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

最終更新日: 2022 年 3 月 11 日

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 スタックを作成します。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?