CreationPolicy 属性
将 CreationPolicy
属性与资源相关联,以防止在 Amazon CloudFormation 收到指定数量的成功信号或超出超时期限之前进入“创建完成”状态。要将信号发送到资源,您可以使用 cfn-signal 帮助程序脚本或 SignalResource
API。CloudFormation 向堆栈事件发送有效的信号,以便您跟踪发送的信号数。
仅在 CloudFormation 创建相关联资源时调用创建策略。目前,支持创建策略的 CloudFormation 资源仅有:
当您希望在堆栈创建继续之前等待资源配置操作时,使用 CreationPolicy
属性。例如,如果在 EC2 实例上安装和配置软件应用程序,则您可能希望这些应用程序在继续操作之前正常运行。在这种情况下,您可将 CreationPolicy
属性添加到该实例,然后在安装和配置这些应用程序后向该实例发送成功信号。有关详细示例,请参阅使用 Amazon CloudFormation 在 Amazon EC2 上部署应用程序。
语法
JSON
"CreationPolicy" : { "AutoScalingCreationPolicy" : { "MinSuccessfulInstancesPercent" :
Integer
}, "ResourceSignal" : { "Count" :Integer
, "Timeout" :String
} }
YAML
CreationPolicy: AutoScalingCreationPolicy: MinSuccessfulInstancesPercent:
Integer
ResourceSignal: Count:Integer
Timeout:String
CreationPolicy 属性
AutoScalingCreationPolicy
-
对于 Auto Scaling 组替换更新,指定必须有多少个实例发出成功信号才认为更新成功。
ResourceSignal
-
CloudFormation 创建关联的资源时,配置所需的成功信号数以及 CloudFormation 等待这些信号的时间长度。
Count
-
CloudFormation 在将资源状态设置为
CREATE_COMPLETE
之前必须收到的成功信号的数目。如果资源在超时期限过期之前收到失败信号或未收到指定数目的信号,则资源创建将失败并且 CloudFormation 将回滚堆栈。默认值:
1
Type: Integer
Required: No
Timeout
-
CloudFormation 等待
Count
属性中指定数目的信号的时长。超时期限自 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
"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
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
"WaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "CreationPolicy" : { "ResourceSignal" : { "Timeout" : "PT15M", "Count" : "5" } } }
YAML
WaitCondition: Type: AWS::CloudFormation::WaitCondition CreationPolicy: ResourceSignal: Timeout: PT15M Count: 5