CloudFormation を使用して Amazon EC2 インスタンスをプロビジョニングする場合、CodeDeploy エージェントがデプロイされていることを確認するにはどうすればよいですか?

所要時間3分
0

AWS CloudFormation を使用してインフラストラクチャと AWS CodeDeploy リソースをプロビジョニングしています。Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに CodeDeploy エージェントがインストールされ、実行されていることを確認するにはどうすればよいですか?

簡単な説明

以下のリソースのいずれかを CodeDeploy デプロイのターゲットとして作成する場合は、cfn-initcfn-signal ヘルパースクリプトを使用します。

  • AWS::EC2::Instance
  • AWS::AutoScaling::AutoScalingGroup

インフラストラクチャのデプロイをプロビジョニングする前に、これらのヘルパースクリプトを使用して、CodeDeploy エージェントによりターゲットインスタンスを完全にプロビジョニングできます。

解決方法

cfn-init および cfn-signal ヘルパースクリプトを使用して CodeDeploy エージェントをデプロイするには、次のステップを完了して、AWS CloudFormation テンプレートを正しく設定します。

1.    コードエディターで、JSON または YAML ファイルを作成して、リソース用の AWS CloudFormation テンプレートとして使用します。

2.    Metadata キーには、AWS::CloudFormation::Init 型を使用してインスタンスまたは起動設定のメタデータを含めます。

AWS::CloudFormation::Init タイプを使用するメタデータキーの例

"SampleLinuxInstance" : {
            "Type" : "AWS::EC2::Instance",
            "Metadata" : {
                "AWS::CloudFormation::Init" : {
                    "config" : {
                        "packages" : {
                            "yum" : {
                                "ruby" : []
                            }
                        },
                        "files" : {
                            "/home/ec2-user/install" : {
                                "source" : {"Fn::Join" : ["", ["https://aws-codedeploy-", {"Ref" : "AWS::Region"}, ".s3.amazonaws.com/latest/install"]]},
                                "mode" : "000755"
                            }
                        },
                        "commands" : {
                            "00-install-agent" : {
                                "command" : "./install auto",
                                "cwd" : "/home/ec2-user/"
                            },
                            "01-cfn-signal" : {
                                "command" : {"Fn::Join" : ["", ["/opt/aws/bin/cfn-signal -e 0 --stack ", { "Ref": "AWS::StackName" }, " --resource SampleLinuxInstance --region ", { "Ref" : "AWS::Region" }]]}
                            }
                        }
                    }
                }
            },
            "Properties" : {
                ...
            }
        }

注: AWS::CloudFormation::Init タイプには、CodeDeploy エージェント用のインストール手順が含まれています。また、以下のステップを完了した後に CloudFormation スタックにシグナルバックするコマンドも含まれています。

3.    UserData プロパティを使用して、cfn-init スクリプトを起動します。

cfn-init スクリプトを呼び出す UserData プロパティの例

"Properties" : {
                "InstanceType" : "t2.micro",
                "ImageId" : {"Ref" : "AMI"},
                "IamInstanceProfile" : {"Ref" : "SampleInstanceProfile"},
                "KeyName" : {"Ref" : "SSHKey"},
                "UserData" :  {"Fn::Base64" : {
                    "Fn::Join" : ["", [
                        "#!/bin/bash\n",
                        "yum -y update\n",
                        "yum -y install cfn-bootstrap\n",
                        "/opt/aws/bin/cfn-init -v",
                        " --stack ", { "Ref" : "AWS::StackName" },
                        " --resource SampleLinuxInstance",
                        " --region ", { "Ref" : "AWS::Region" }, 
                        "\n"
                    ]]
                }},
                "Tags" : [
                    {
                        "Key" : {"Ref" : "InstanceTagKey"},
                        "Value" : {"Ref" : "InstanceTagValue"}
                    }
                ]
            }

4.    インスタンスリソースについては、Amazon EC2 インスタンスまたは Amazon EC2 Auto Scaling グループが指定された期間内に CloudFormation に成功シグナルを送信することを必須化するよう、CreationPolicy 属性を設定します。

Amazon EC2 インスタンスが特定の期間内に CloudFormation に成功シグナルを送信することを必須化する CreationPolicy 属性の例

"SampleLinuxInstance" : {
            "Type" : "AWS::EC2::Instance",
            "CreationPolicy" : {
                "ResourceSignal" : {
                    "Count" : "1",
                    "Timeout" : "PT5M"
                }
            },

5.    Amazon EC2 インスタンスまたは Amazon EC2 Auto Scaling グループのデプロイグループリソースの明示的な依存関係を作成するには、DependsOn 属性を使用します。

デプロイグループリソース用に明示的な依存関係を作成する DependsOn 属性の例

"SampleLinuxCDDeploymentGroup" : {
            "Type" : "AWS::CodeDeploy::DeploymentGroup",
            "DependsOn" : "SampleLinuxInstance",
            "Properties" : {
                "ApplicationName" : {"Ref" : "SampleCDApp"},
                "ServiceRoleArn" : {"Ref" : "ServiceRole"},
                "Ec2TagFilters" : [
                    {
                        "Key" : {"Ref" : "InstanceTagKey"},
                        "Value" : {"Ref" : "InstanceTagValue"},
                        "Type" : "KEY_AND_VALUE"
                    }
                ],
                "Deployment" : {
                    "Revision" : {
                        "RevisionType" : "S3",
                        "S3Location" : {
                            "Bucket" : {"Ref" : "BucketName"},
                            "BundleType" : {"Ref" : "BundleType"},
                            "Key" : {"Ref" : "BundleKey"}
                        }
                    }
                }
            }
        }

6.    CloudFormation テンプレートを完了するには、環境に必要なその他の追加リソース、プロパティ、または出力を含めます。

7.    完了したテンプレートを使用して、CloudFormation スタックを作成します。


関連情報

AWS CloudFormation templates for CodeDeploy reference (CodeDeploy リファレンス用の AWS CloudFormation テンプレート)

Create an Amazon EC2 instance for CodeDeploy (AWS CloudFormation template) (CodeDeploy 用の Amazon EC2 インスタンスの作成 (AWS CloudFormation テンプレート))

起動設定を使用して、Amazon Linux または Ubuntu を実行している Amazon EC2 インスタンスに CodeDeploy エージェントを自動的にインストールする方法を教えてください

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ