Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
当我使用 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.对于元数据键,使用 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.对于实例资源,配置 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 堆栈。
相关信息
- 语言
- 中文 (简体)
