AWS CLIとCloudFormationのインフラストラクチャへの展開

物理サーバーの暗黒時代では、湿気のある地下室でドライバーやケーブルを使ってインフラが提供されていました。しかし、パブリッククラウドソリューションがオンプレミスインフラからサーバーのプロビジョニングと実行の優先方法として台頭し、これらの暗黒の時代は明るくなりました。このブログポストでは、AWS CLIとCloudFormationを使用してクラウドソリューションをデプロイする方法について学びます。

この記事は、数分でモックAPIを作成できるツール、Mockiの共同創業者であるKarl Erikssonによるゲスト投稿です。.

アプリケーションの実行環境が1つだけの場合、AWSコンソールなどのグラフィカルユーザーインターフェース(GUI)を使用して簡単に管理できます。しかし、開発、ステージング、本番など複数の環境を持つ場合、事が難しくなります。人為的なミスや時間が絡んできます。AWS CLIとCloudFormationが役立ちます。

インフラストラクチャをコードとして管理する必要があります。AWSの世界では、それを実現するためにCloudFormationスタックを使用します。

CloudFormationスタックを初めてデプロイするとき、AWSはすべてをゼロから作成します。スタックを更新としてデプロイする場合、インフラストラクチャの変更を検出してそれらの変更のみをデプロイします。

CloudFormationスタックにより、異なる環境全体に同じ変更が適用されることが保証されます。

CloudFormation:AWSインフラストラクチャをコードとして管理するためのツール

AWS Infrastructure as Code Source: https://aws.amazon.com/cloudformation/

AWS CloudFormationは、AWS環境でインフラストラクチャをコードとして記述してプロビジョニングするためのツールです。 AWSのほとんどのサービスがCloudFormationでサポートされています。 AWSコンソールで作成できるほとんどのもの、例えば仮想サーバー、データベース、ロードバランサー、ファイルストレージは、CloudFormationスタックに追加することができます。 追加されたすべてのリソースは、その後、コマンドラインまたは他の自動化されたプロセスから展開できます。

更新に関して、CloudFormationは操作を最も効率的な方法で実行し、何か問題が発生した場合には変更を自動的にロールバックします。

それでは、AWS CLIとCloudFormationを使用してインフラストラクチャを作成する方法を学びましょう。

前提条件

この記事の残りの部分でのCloudFormationチュートリアルを進めるためには、以下のものが必要です:

  • AWSアカウント
  • AWS CLI – こちらからダウンロードしてセットアップする方法を学習してください。コマンドaws s3 lsを実行して正常に返された場合は、すべてが正常です。

AWS CLIで複数のAWSプロファイルが設定されている場合は、このチュートリアルで使用する開発またはテスト目的に適したプロファイルを使用してください。

最初のCloudFormationスタックの作成

十分な背景情報はこれで終わりです。では、AWS CLIとCloudFormationを使用してスタックを作成しましょう!

この例では、AWS S3という静的ファイルホスティングサービスでホストされる静的ウェブサイトを展開するために必要なインフラストラクチャを含むスタックを作成します。

始めるには、template.yamlという新しいファイルを作成し、以下のコンテンツで埋めてください:

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # あなた自身のユニークな名前を使用してください
  • AWSTemplateFormatVersion テンプレートの形式バージョンを指定し、AWSがデプロイ時に正しく解釈できるようにします。
  • Description – テンプレートの説明を含み、デプロイ後にAWSコンソールに表示されます。
  • Resources – テンプレートに追加するすべてのインフラストラクチャが含まれます。この場合、リソースは静的サイトをホストするシンプルなS3バケットを作成します。

BucketNameプロパティは一意である必要があるため、your-bucket-name以外の別の名前を考えてください。

AWS CLIとCloudFormationを使用して、スタックをデプロイする

シンプルなテンプレートが作成されたので、以下のコマンドを使用してAWSにデプロイします:

aws cloudformation deploy --template-file template.yaml --stack-name static-website

コマンドを実行した後、AWSコンソールに移動し、サービス→CloudFormationに移動します。そこでデプロイが実行されているのを確認できるはずです。数分後、CREATE_COMPLETEの状態になるはずです。そうであれば、完了です!

エラーがある場合は、スタックの詳細を表示する際にイベントセクションでそれらを確認できるはずです。

サービスS3に移動すると、新しいS3バケットが作成されているはずです。

シンプルなウェブサイトを構築する

ウェブサイトを保存するためのS3バケットが用意されたら、サイトとして機能するindex.htmlファイルを作成します。

何か特定のものが思い浮かばない場合は、以下のコンテンツをindex.htmlファイルに使用できます:

<html>
  <body>
    <h1>Static Site Deployed Using CloudFormation</h1>
    <p>Hello! This site was deployed using CloudFormation. Go cloud!</p>
  </body>
</html>

index.htmlファイルを保存し、AWSコンソールを介してS3バケットにアップロードします。

サイトを訪れるすべての人がアクセスできるように、インデックスファイルに公開読み取りアクセスを許可することを忘れないでください。

テンプレートの更新

現在、作成されたS3バケットはウェブサイトのホスティングに設定されていません。それを変更しましょう。現在、AWSコンソールを介してインデックスファイルをダウンロードすることはできますが、パブリックインターネットからアクセスすることはできません。AWS CLIとCloudFormationを使用して、構成を変更して静的ウェブサイトのホスティングを有効にします。

template.yamlファイルを以下のように変更して、それを有効にします。以下では、テンプレートにいくつかの新しいプロパティを紹介します。

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # 独自のユニークな名前を使用してください
            AccessControl: PublicRead
            WebsiteConfiguration:
                IndexDocument: index.html
Outputs:
    WebsiteURL:
        Value: !GetAtt [Bucket, WebsiteURL]
        Description: URL for website hosted on S3
  • AccessControl – S3バケットへのアクセス権をパブリックリードに設定し、サイトを訪れるユーザーはindex.htmlファイルを表示できるようにします
  • WebsiteConfiguration – S3バケットをウェブサイトとして構成し、ユーザーがバケットのURLにアクセスしたときにアップロードされたindex.htmlファイルを提供します
  • Outputs – スタックの一部であるリソースの異なるプロパティです。上記の例では、WebsiteURLがスタックの出力です。テンプレートを再デプロイすると、AWS CloudFormationコンソールでウェブサイトのURLが出力として表示されるはずです。

前の手順と同じコマンドを使用して、既存のスタックに変更をデプロイしてください。

aws cloudformation deploy --template-file template.yaml --stack-name static-website

結果を確認するには、CloudFormationコンソールに移動します。数分後に、スタックがUPDATE_COMPLETE状態になっていることに気付くはずです。スタックがこの状態になったら、Outputsタブに移動し、テンプレートにWebsiteUrlが出力として追加されていることを確認してください。

提供されたURLをクリックすると、ブラウザでサイトが表示されます。

おめでとうございます!AWS CLIとCloudFormationを使用して、インフラストラクチャをコードとして最初のスタックをデプロイしました!この時点で、テンプレートファイルを追加して新しい変更をデプロイするか、必要に応じて新しいテンプレートを作成し続けてください。

結論

このチュートリアルでは、インフラストラクチャをコードとして扱う概念と、手動でインフラストラクチャをプロビジョニングする方法との利点について学びました。AWS CLIとCloudFormationを使用して、インフラストラクチャをコードとして静的ウェブサイトを作成するためのスタックをデプロイしました。

このチュートリアルで学んだ原則を使用して、CloudFormationを使用して完全に本番対応のシステムをデプロイすることができます。

さらなる読み物

「実世界のインフラストラクチャをコードとして扱う」(HashiCorpによる)を読むには、こちらをチェックしてください。

CloudFormationを開発フローに統合し、すべてのインフラストラクチャをCloudFormationを使用して管理する方法について詳しく学びたい場合は、次を確認してください:

AWSでインフラストラクチャをコードとして展開する旅に幸運を!

Source:
https://adamtheautomator.com/aws-cli-and-cloudformation/