最初のスタックの作成 - AWS CloudFormation

最初のスタックの作成

このトピックでは、AWS Management Console を使用して最初の CloudFormation スタックを作成する方法について説明します。このチュートリアルでは、基本的なAWSリソースのプロビジョニング、スタックイベントのモニタリング、出力の生成方法について説明します。

この例では、CloudFormation テンプレートは YAML で記述されています。YAML は、インフラストラクチャをコードとして定義するために広く使用されている人間が読める形式です。CloudFormation の詳細については、JSON 形式の他のテンプレートも表示されますが、このチュートリアルでは読みやすいように YAML が使われています。

CloudFormation を実践するためのガイド付きの実践コースに興味がある場合、「AWS CloudFormation の開始方法」ワークショップを参照してください。

注記

CloudFormation は無料で使用できますが、作成した Amazon EC2 および Amazon S3 リソースに対しては課金されます。ただし、AWS を初めて使用する場合は、 無料利用枠を利用して、この学習プロセス中のコストを最小に抑えるか無料にできます。

前提条件

  • Amazon EC2、Amazon S3、および CloudFormation を使用するアクセス許可を持つ IAM ユーザーまたはロール、または管理ユーザーアクセスで AWS アカウント にアクセス可能である必要があります。

  • インターネットにアクセスできる Virtual Private Cloud (VPC) が必要です。手軽に始めるには、アカウントにデフォルトで用意されている VPC を利用するのがおすすめです。この演習では、デフォルトの VPC とデフォルトのサブネットで十分です。

コンソールを使用して CloudFormation スタックを作成する

コンソールで Hello world CloudFormation スタックを作成するには
  1. クラウドフォーメーション コンソールを開きます。

  2. [Create Stack] (スタックの作成) を選択します。

  3. [スタックの作成] ページで、[Infrastructure Composer からビルド][Infrastructure Composer で作成] の順に選択します。これにより、CloudFormation コンソールモードで Infrastructure Composer に移動し、サンプルテンプレートをアップロードして検証できます。

  4. サンプルテンプレートをアップロードして検証するには、次の手順を実行します。

    1. [テンプレート] を選択します。次に、次の CloudFormation テンプレートをコピーしてテンプレートエディタに貼り付けます。

      AWSTemplateFormatVersion: 2010-09-09 Description: CloudFormation Template for WebServer with Security Group and EC2 Instance Parameters: LatestAmiId: Description: The latest Amazon Linux 2 AMI from the Parameter Store Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' InstanceType: Description: WebServer EC2 instance type Type: String Default: t2.micro AllowedValues: - t3.micro - t2.micro ConstraintDescription: must be a valid EC2 instance type. MyIP: Description: Your IP address in CIDR format (e.g. 203.0.113.1/32). Type: String MinLength: '9' MaxLength: '18' Default: 0.0.0.0/0 AllowedPattern: '^(\d{1,3}\.){3}\d{1,3}\/\d{1,2}$' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x. Resources: WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow HTTP access via my IP address SecurityGroupIngress: - IpProtocol: tcp FromPort: '80' ToPort: '80' CidrIp: !Ref MyIP WebServer: Type: AWS::EC2::Instance Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType SecurityGroupIds: - !Ref WebServerSecurityGroup UserData: !Base64 | #!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<html><body><h1>Hello World!</h1></body></html>" > /var/www/html/index.html Outputs: WebsiteURL: Value: !Join - '' - - http:// - !GetAtt WebServer.PublicDnsName Description: Website URL

      次のステップに進む前に、テンプレートを確認し、CloudFormation の主要な概念を把握しましょう。

      • この Parameters セクションでは、スタックを作成するときにテンプレートに渡すことができる値を宣言します。テンプレートで後で指定されるリソースは、これらの値を参照し、データを使用します。テンプレートにハードコーディングしたくない情報をパラメータに設定できます。また、デプロイする特定のアプリケーションまたは設定に固有の情報を指定する方法でもあります。

      • テンプレートでは次のパラメータを定義します。

        • LatestAmiId – AWS Systems Manager Parameter Store から最新の Amazon Linux 2 AMI ID を取得します。

        • InstanceType – EC2 インスタンスタイプの選択を許可します (デフォルト: t2.microt3.microt2.micro を選択できます)。

        • MyIP – HTTP アクセスの IP アドレス範囲を指定します (デフォルト: 0.0.0.0/0、任意の IP からのアクセスを許可できます)。

      • Resources セクションには、テンプレートで作成する AWS リソースの定義が含まれています。リソース宣言は、これらすべての構成を一度に指定するための効率的な方法です。テンプレートにリソース宣言を含めると、テンプレートを使用してスタックを作成することによって、宣言したすべてのリソースを作成および設定できます。同じテンプレートから新しいスタックを作成することで、同じ設定のリソースを複製することができます。

      • このテンプレートによって以下のリソースが作成されます。

        • WebServerSecurityGroup – 指定された IP 範囲からのポート 80 でのインバウンド HTTP トラフィックを許可する EC2 セキュリティグループ。

        • WebServer – 次の設定の EC2 インスタンス。

          • 最新の Amazon Linux 2 AMI を使用します。

          • 選択したインスタンスタイプを適用します

          • SecurityGroupIds プロパティに WebServerSecurityGroup を追加します。

          • Apache HTTP Server をインストールするためのユーザーデータスクリプトが含まれています

      • 論理名は、各リソースおよびパラメータ宣言の先頭に指定されます。例えば、WebServerSecurityGroup は EC2 セキュリティグループリソースに割り当てられた論理名です。Ref 関数は、テンプレート内の他の部分で、リソースやパラメータを論理名で参照するのに使用されます。あるリソースが別のリソースを参照すると、リソース間に依存関係が作成されます。

      • Outputs セクションは、スタックの作成後に返されるカスタム値を定義します。出力値を使用することで、スタック内のリソースに関する情報 (リソース識別子、URLなど) を取得できます。

      • テンプレートは 1 つの出力を定義します。

        • WebsiteURL – EC2 インスタンスのパブリック DNS 名を使用して構築された、デプロイ済のウェブサーバーの URL。Join 関数は、固定の http://PublicDnsName 変数を 1 つの文字列に結合し、ウェブサーバーの完全な URL を簡単に出力するのに役立ちます。

    2. テンプレートをアップロードする前に、[検証] を選択して YAML コードが有効であることを確認します。

    3. 次に、[テンプレートを作成] を選択してテンプレートを作成し、S3 バケットに追加します。

    4. 開いたダイアログボックスから、後で削除できるように S3 バケットの名前を書き留めておきます。次に、[確認] を選択し、CloudFormation に進みます。移動先の CloudFormation コンソールには、テンプレートへの S3 パスが指定されています。

  5. [スタックの作成] ページで、[次へ] を選択します。

  6. [スタックの詳細を指定] ページの [スタック名] フィールドに名前を入力します。スタック名にスペースを含めることはできません。この例では MyTestStack を使用します。

  7. [パラメータ] で、次のようにパラメータ値を指定します。

    • LatestAmiId: これはデフォルトで最新の Amazon Linux 2 AMI に設定されます。

    • InstanceType: EC2 インスタンスタイプとして t2.micro または t3.micro を選択します。

      注記

      AWS を初めてご利用いただく場合、無料利用枠を使用して t2.micro インスタンスを起動し、12 か月間無料で使用できます (t2.micro が利用できないリージョンでは、無料利用枠で t3.micro インスタンスを使用できます)。

    • MyIP: 実際のパブリック IP アドレスを /32 サフィックスで指定します。/32 サフィックスは、単一の IP アドレスを許可するように指定するために CIDR 表記で使用されます。これは、この特定の IP アドレスとの間のトラフィックを許可し、他の IP アドレスは許可しないことを意味します。

  8. [次へ] を 2 回選択して、[名前、確認、および作成] ページに進みます。このチュートリアルでは、[スタックオプションの設定] ページのデフォルトをそのままにしておくことができます。

  9. スタックの情報を確認します。設定が適切であることを確認したら、[Submit (送信)] を選択します。

スタックの作成をモニタリング

[送信] を選択すると、CloudFormation はテンプレートで指定されたリソースの作成を開始します。新しいスタックである MyTestStack が、CloudFormation コンソールの上部のリストに表示されます。ステータスは CREATE_IN_PROGRESS である必要があります。スタックの詳細なステータスは、イベントを表示して確認できます。

スタックのイベントを表示するには
  1. CloudFormation コンソールのリストで、スタック MyTestStack を選択します。

  2. スタックの詳細ペインで、[Events] (イベント) タブを選択します。

    コンソールは自動的に更新され、60 秒ごとに最新のイベントがイベントリストに表示されます。

[イベント] タブには、スタックの作成の主要な各ステップが、最新のイベントが一番上になるように時間順に表示されます。

最初のイベント (イベントリストの一番下のイベント) は、スタック作成プロセスの開始です。

2024-12-23 18:54 UTC-7 MyTestStack CREATE_IN_PROGRESS User initiated

続いて、各リソースの作成の開始と終了を示すイベントが表示されます。たとえば、EC2 インスタンスの作成は、次のようなエントリになります。

2024-12-23 18:59 UTC-7 WebServer CREATE_COMPLETE

2024-12-23 18:54 UTC-7 WebServer CREATE_IN_PROGRESS Resource creation initiated

CloudFormation がリソースの作成を開始したことがレポートされると、CREATE_IN_PROGRESS イベントが記録されます。リソースが正常に作成されると、CREATE_COMPLETE イベントが記録されます。

CloudFormation によって正常にスタックが作成されると、[Events] (イベント) タブの上部に次のイベントが表示されます。

2024-12-23 19:17 UTC-7 MyTestStack CREATE_COMPLETE

CloudFormation がリソースを作成できない場合は、CREATE_FAILED イベントがレポートされます。また、デフォルトではスタックがロールバックされて、作成されたリソースがある場合はすべて削除されます。[状況の理由] 列には、失敗の原因となった問題が表示されます。

スタックが作成された後、[リソース] タブで作成した EC2 インスタンスとセキュリティグループが表示されます。

ウェブサーバーをテストする。

スタックが正常に作成されたら、CloudFormation コンソールの [Outputs] タブに移動します。[WebsiteURL] フィールドを探します。これには、EC2 インスタンスのパブリック URL が含まれます。

ブラウザを開き、[WebsiteURL] にリストされている URL に移動します。ブラウザに「"Hello World!"」とメッセージが表示されます。

これにより、EC2 インスタンスが Apache HTTP Server を実行し、基本的なウェブページを提供していることがわかります。

クリーンアップ

不要なサービスに対して課金されていないことを確認するために、スタックとそのリソースを削除して、クリーンアップすることができます。スタックのテンプレートを保存する S3 バケットを削除することもできます。

スタックとそのリソースを削除するには
  1. クラウドフォーメーション コンソールを開きます。

  2. [スタック] ページで、作成したスタックの名前の横にあるオプション [MyTestStack] を選択し、続いて [削除]を選択します。

  3. 確認を求めるメッセージが表示されたら、[削除] を選択してください。

  4. [イベント] タブでスタック削除プロセスの進行状況をモニタリングします。MyTestStack のステータスが DELETE_IN_PROGRESS に変わります。CloudFormation がスタックの削除を完了すると、リストからスタックが削除されます。

サンプルテンプレートの使用が終了し、Amazon S3 バケットが不要になったら削除します。バケットを削除するには、パケットを空にする必要があります。バケットを空にすると、バケット内のすべてのオブジェクトが削除されます。

Amazon S3 バケットを空にして削除するには
  1. Amazon S3 コンソールを開きます。

  2. コンソールの左側のナビゲーションペインで、[バケット] を選択します。

  3. [バケット] リストで、このチュートリアル用に作成したバケットの名前の横にあるオプションを選択し、[空] を選択します。

  4. [バケットを空にする] ページで、テキストフィールドに permanently delete と入力して、[空にする] をクリックします。

  5. [バケットを空にする: ステータス] ページで、バケットを空にするプロセスの進行状況をモニタリングします。

  6. バケットリストに戻るには、[Exit (終了)] を選択します。

  7. バケットの名前の横にあるオプションを選択し、[削除] を選択します。

  8. 確認を求められたら、バケットの名前を入力し、[バケットを削除] を選択します。

  9. [バケット] リストで、バケット削除プロセスの進捗状況を確認します。Amazon S3 がバケットの削除を完了すると、バケットはリストから消えます。

次のステップ

お疲れ様でした。スタックを正常に作成し、その作成をモニタリングし、その出力を使用しました。独自のテンプレート作成の詳細については、「CloudFormation テンプレートの使用」を参照してください。

CloudFormation のより複雑な使用例については、「CloudFormation のチュートリアル」を参照してください。