當我使用 CloudFormation 佈建 Amazon EC2 執行個體時,如何確定已部署 CodeDeploy 代理程式?

3 分的閱讀內容
0

我正在使用 AWS CloudFormation 佈建基礎架構和 AWS CodeDeploy 資源。如何確定 CodeDeploy 代理程式已在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上安裝並執行?

簡短描述

如果您建立下列任一資源作為 CodeDeploy 部署的目標,請使用 cfn-initcfn-signal 助手指令碼

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

佈建基礎架構部署之前,您可以使用助手指令碼,透過 CodeDeploy 代理程式完整佈建目標執行個體。

解決方法

若要使用 cfn-initcfn-signal 助手指令碼來部署 CodeDeploy 代理程式,請完成下列步驟以正確設定 AWS CloudFormation 範本。

1.    在程式碼編輯器中,建立 JSON 或 YAML 檔案以用作資源的 AWS CloudFormation 範本。

2.    對於 Metadata 索引鍵,請使用 AWS::CloudFormation::Init 類型以包含執行個體或啟動組態的中繼資料。

使用 AWS::CloudFormation::Init 類型的 Metadata 索引鍵範例

"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.    對於執行個體資源,請設定 CreationPolicy 屬性以執行下列操作: 要求 Amazon EC2 執行個體或 Amazon EC2 Auto Scaling 群組,在特定時間段內將成功信號傳送至 CloudFormation。

要求 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 堆疊


相關資訊

適用於 CodeDeploy 的 AWS CloudFormation 範本參考

為 CodeDeploy 建立 Amazon EC2 執行個體 (AWS CloudFormation 範本)

如何使用啟動組態在執行 Amazon Linux 或 Ubuntu 的 EC2 執行個體上自動安裝 CodeDeploy 代理程式?

AWS 官方
AWS 官方已更新 2 年前