CreationPolicy-Attribut - AWS CloudFormation

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 bis 100 angeben. CloudFormation rundet auf das nächste Zehntelprozent auf oder ab. Wenn Sie beispielsweise fünf Instances mit einem minimalen erfolgreichen Prozentsatz von 50 aktualisieren, müssen drei Instances Erfolg signalisieren. Wenn eine Instance innerhalb der in der Timeout-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