當我使用 CloudFormation 佈建 Amazon EC2 執行個體時,如何確定已部署 CodeDeploy 代理程式?
我正在使用 AWS CloudFormation 佈建基礎架構和 AWS CodeDeploy 資源。如何確定 CodeDeploy 代理程式已在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上安裝並執行?
簡短描述
如果您建立下列任一資源作為 CodeDeploy 部署的目標,請使用 cfn-init 和 cfn-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 類型的 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 代理程式?
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- 已提問 6 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前