CreationPolicy-Attribut
Ordnen Sie das CreationPolicy
-Attribut einer Ressource zu, um zu verhindern, dass diese den Status für eine erfolgreich abgeschlossene Aktion erhält, bevor AWS CloudFormation eine angegebene Anzahl von Erfolgssignalen empfangen hat oder das Zeitlimit überschritten worden ist. Um einer Ressource Signale zu senden, können Sie das Hilfsskript cfn-signal oder die SignalResource
-API verwenden. CloudFormation veröffentlicht gültige Signale für die Stack-Ereignisse, sodass Sie die Anzahl der gesendeten Signale verfolgen können.
Die Erstellungsrichtlinie wird nur aufgerufen, wenn CloudFormation die zugehörigen Ressourcen erstellt. Derzeit werden Erstellungsrichtlinien nur von den CloudFormation-Ressourcen unterstützt:
Verwenden Sie das Attribut CreationPolicy
, wenn vor der Stack-Erstellung auf Ressourcenkonfigurationsoptionen gewartet werden soll. Wenn Sie beispielsweise Softwareanwendungen auf einer EC2 Instance installieren und konfigurieren, sollten diese Anwendungen ausgeführt werden, bevor Sie fortfahren. In diesen Fällen können Sie der Instance ein CreationPolicy
-Attribut hinzufügen und nach der Installation und Konfiguration der Anwendungen der Instance ein Erfolgssignal senden. Ein ausführliches Beispiel finden Sie unter Bereitstellen von Anwendungen auf Amazon EC2 mit AWS CloudFormation.
Syntax
JSON
"CreationPolicy" : { "AutoScalingCreationPolicy" : { "MinSuccessfulInstancesPercent" :
Integer
}, "ResourceSignal" : { "Count" :Integer
, "Timeout" :String
} }
YAML
CreationPolicy: AutoScalingCreationPolicy: MinSuccessfulInstancesPercent:
Integer
ResourceSignal: Count:Integer
Timeout:String
CreationPolicy-Eigenschaften
AutoScalingCreationPolicy
-
Bei einer Auto Scaling-Gruppe gibt eine Ersetzungsaktualisierung an, wie viele Instances einen Erfolg signalisieren müssen, damit die Aktualisierung erfolgreich ausgeführt werden kann.
MinSuccessfulInstancesPercent
-
Gibt den Prozentsatz der Instances in einer Auto Scaling-Ersetzungsaktualisierung an, die einen Erfolg signalisieren müssen, damit die Aktualisierung erfolgreich ist. Sie können einen Wert von
0
bis100
angeben. CloudFormation rundet auf das nächste Zehntelprozent auf oder ab. Wenn Sie beispielsweise fünf Instances mit einem minimalen erfolgreichen Prozentsatz von50
aktualisieren, müssen drei Instances Erfolg signalisieren. Wenn eine Instance innerhalb der in derTimeout
-Eigenschaft angegebenen Zeitspanne kein Signal sendet, geht CloudFormation davon aus, dass die Instance nicht erstellt wurde.Standard:
100
Type: Integer
Required: No
ResourceSignal
-
Konfiguriert die Anzahl der erforderlichen Erfolgssignale und die Zeitspanne, über die CloudFormation auf diese Signale wartet, wenn CloudFormation die zugehörigen Ressourcen erstellt.
Count
-
Die Anzahl der Erfolgssignale, die CloudFormation empfangen muss, bevor der Ressourcenstatus auf
CREATE_COMPLETE
festgelegt wird. Wenn die Ressource ein Fehlersignal oder nicht die angegebene Anzahl von Signalen empfängt, bevor das Zeitüberschreitungslimit abgelaufen ist, dann schlägt die Ressourcenerstellung fehl und CloudFormation setzt den Stack zurück.Standard:
1
Type: Integer
Required: No
Timeout
-
Wie lange CloudFormation auf die Anzahl von Signalen wartet, die in der
Count
-Eigenschaft angegeben worden ist. Dieser Zeitraum beginnt, wenn CloudFormation mit dem Erstellen der Ressource beginnt, und er ist nicht vor der von Ihnen angegebene Zeitspanne zu Ende, sondern erst kurz danach. Die maximale Zeitspanne, die Sie angeben können, beträgt 12 Stunden.Der Wert muss im ISO8601-Format für Zeitspannen
im Format "PT #
H#
M#
S" angegeben werden, wobei#
für Zeichen die Anzahl von Stunden, Minuten bzw. Sekunden steht. Um die besten Ergebnisse zu erzielen, geben Sie eine ausreichend lange Zeitspanne an, sodass genügend Zeit zum Starten der Instances gegeben ist. Ein kürzeres Zeitlimit können zu einem Rollback führen.Standard:
PT5M
(5 Minuten)Type: String
Required: No
Beispiele
Auto Scaling-Gruppe
Im folgenden Beispiel wird gezeigt, wie Sie einer Auto Scaling-Gruppe eine Erstellungsrichtlinie hinzufügen. Die Erstellungsrichtlinie erfordert drei Signale und hat ein Zeitüberschreitungslimit von 15 Minuten.
Damit Instances auf eine Elastic Load Balancing-Zustandsprüfung warten, bevor sie Erfolg signalisieren, fügen Sie mit dem Hilfsprogramm-Skript cfn-init eine Verifizierung der Zustandsprüfung hinzu. Ein Beispiel finden Sie unter dem Befehl verify_instance_health
in der Beispielvorlage Fortlaufende Auto Scaling-Updates
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
Im folgenden Beispiel wird gezeigt, wie Sie einer Wartebedingung eine Erstellungsrichtlinie hinzufügen.
JSON
"WaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "CreationPolicy" : { "ResourceSignal" : { "Timeout" : "PT15M", "Count" : "5" } } }
YAML
WaitCondition: Type: AWS::CloudFormation::WaitCondition CreationPolicy: ResourceSignal: Timeout: PT15M Count: 5