AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

CreationPolicy 属性

CreationPolicy 属性与资源关联以防止其状态在 AWS CloudFormation 收到指定数量的成功信号或超出超时期限之前达到创建完成。要将信号发送到资源,您可使用 cfn-signal 帮助程序脚本或 SignalResource API。AWS CloudFormation 向堆栈事件发送有效信号以便您跟踪已发送信号的数量。

仅在 AWS CloudFormation 创建相关联资源时调用创建策略。目前,支持创建策略的 AWS CloudFormation 资源仅有 AWS::AutoScaling::AutoScalingGroupAWS::EC2::InstanceAWS::CloudFormation::WaitCondition

当您希望在堆栈创建继续之前等待资源配置操作时,使用 CreationPolicy 属性。例如,如果在 EC2 实例上安装和配置软件应用程序,则您可能希望这些应用程序在继续操作之前正常运行。在这种情况下,您可将 CreationPolicy 属性添加到该实例,然后在安装和配置这些应用程序后向该实例发送成功信号。有关详细示例,请参阅使用 AWS CloudFormation 在 Amazon EC2 上部署应用程序

语法

JSON

Copy
"CreationPolicy" : { "AutoScalingCreationPolicy" : { "MinSuccessfulInstancesPercent" : Integer }, "ResourceSignal" : { "Count" : Integer, "Timeout" : String } }

YAML

Copy
CreationPolicy: AutoScalingCreationPolicy: MinSuccessfulInstancesPercent: Integer ResourceSignal: Count: Integer Timeout: String

CreationPolicy 属性

AutoScalingCreationPolicy

对于 Auto Scaling 组替换更新,指定必须有多少个实例发出成功信号时更新才能继续。

MinSuccessfulInstancesPercent

指定 Auto Scaling 替换更新中的必须发出成功信号才能继续更新的实例百分比。可以指定从 0100 的值。AWS CloudFormation 取整到最接近的十分位值。例如,如果您更新五个实例,最小成功百分比为 50,则必须有三个实例发送成功信号才行。如果某个实例在 Timeout 属性指定的时间里未发送信号,AWS CloudFormation 假定该实例未创建。

默认值100

Type: Integer

Required: No

ResourceSignal

AWS CloudFormation 创建关联的资源时,配置所需的成功信号数以及 AWS CloudFormation 等待这些信号的时间长度。

Count

AWS CloudFormation 在将资源状态设置为 CREATE_COMPLETE 之前必须收到的成功信号的数目。如果资源在超时期限过期之前收到失败信号或未收到指定数目的信号,则资源创建将失败并且 AWS CloudFormation 将回滚堆栈。

默认值1

Type: Integer

Required: No

Timeout

AWS CloudFormation 等待 Count 属性中指定数目的信号的时长。超时期限自 AWS CloudFormation 开始创建资源后开始,并且超时期限过期时间不会早于您指定的时间,但会在您指定时间后的很短时间内发生。您可指定的最长时间为 12 小时。

该值必须采用以下形式的 ISO8601 持续时间格式:"PT#H#M#S",其中各个 # 分别表示小时数、分钟数和秒数。为获得最佳结果,请指定足够长的时间段,以便实例可以正常启动和运行。更短的超时可导致回滚。

默认值PT5M(5 分钟)

Type: String

Required: No

示例

Auto Scaling 组

以下示例介绍如何将创建策略添加到 Auto Scaling 组。创建策略需要 3 个成功信号且在 15 分钟后超时。

要让实例在发送成功信号之前等待 Elastic Load Balancing 运行状况检查,请使用 cfn-init 帮助程序脚本来添加运行状况检查验证。例如,请参阅 Auto Scaling 滚动更新示例模板中的 verify_instance_health 命令。

JSON

Copy
"AutoScalingGroup": { "Type": "AWS::AutoScaling::AutoScalingGroup", "Properties": { "AvailabilityZones": { "Fn::GetAZs": "" }, "LaunchConfigurationName": { "Ref": "LaunchConfig" }, "DesiredCapacity": "3", "MinSize": "1", "MaxSize": "4" }, "CreationPolicy": { "ResourceSignal": { "Count": "3", "Timeout": "PT15M" } }, "UpdatePolicy" : { "AutoScalingScheduledAction" : { "IgnoreUnmodifiedGroupSizeProperties" : "true" }, "AutoScalingRollingUpdate" : { "MinInstancesInService" : "1", "MaxBatchSize" : "2", "PauseTime" : "PT1M", "WaitOnResourceSignals" : "true" } } }, "LaunchConfig": { "Type": "AWS::AutoScaling::LaunchConfiguration", "Properties": { "ImageId": "ami-16d18a7e", "InstanceType": "t2.micro", "UserData": { "Fn::Base64": { "Fn::Join" : [ "", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "/opt/aws/bin/cfn-signal -e 0 --stack ", { "Ref": "AWS::StackName" }, " --resource AutoScalingGroup ", " --region ", { "Ref" : "AWS::Region" }, "\n" ] ] } } } }

YAML

Copy
AutoScalingGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Fn::GetAZs: '' LaunchConfigurationName: Ref: LaunchConfig DesiredCapacity: '3' MinSize: '1' MaxSize: '4' CreationPolicy: ResourceSignal: Count: '3' Timeout: PT15M UpdatePolicy: AutoScalingScheduledAction: IgnoreUnmodifiedGroupSizeProperties: 'true' AutoScalingRollingUpdate: MinInstancesInService: '1' MaxBatchSize: '2' PauseTime: PT1M WaitOnResourceSignals: 'true' LaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-16d18a7e InstanceType: t2.micro UserData: "Fn::Base64": !Sub | #!/bin/bash -xe yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource AutoScalingGroup --region ${AWS::Region}

WaitCondition

以下示例介绍如何将创建策略添加到等待条件。

JSON

Copy
"WaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "CreationPolicy" : { "ResourceSignal" : { "Timeout" : "PT15M", "Count" : "5" } } }

YAML

Copy
WaitCondition: Type: AWS::CloudFormation::WaitCondition CreationPolicy: ResourceSignal: Timeout: PT15M Count: 5