Ich möchte bei jedem AWS CloudFormation-Stack-Update fortlaufende Updates in meiner Auto Scaling-Gruppe einleiten, ohne die Startkonfiguration zu ändern.
Kurzbeschreibung
Sie können fortlaufende Updates für eine Auto Scaling-Gruppe nur initiieren, wenn Sie bestimmte Bedingungen des updatePolicy-Attributs erfüllen.
Um fortlaufende Updates zu initiieren, können Sie in der Startkonfiguration Ihrer CloudFormation-Vorlage einen Umschaltparameter erstellen. Wenn Sie jedoch den Wert des Toggle-Parameters während einer Stack-Aktualisierung ändern, wird die UserData -Eigenschaft geändert. Jede Änderung an UserData muss ersetzt werden . CloudFormation erkennt die Änderung an UserData und ersetzt dann die LaunchConfiguration-Ressource. Dieser Ersatz initiiert das fortlaufende Auto Scaling-Update, wie durch das UpdatePolicy attribute definiert.
Behebung
Bei den folgenden Schritten wird davon ausgegangen, dass Ihre AutoScalingRollingUpdate-Richtlinie für Ihre Auto Scaling-Gruppe konfiguriert ist und dass Ihre Auto Scaling-Gruppe so konfiguriert ist, dass sie auf LaunchConfiguration verweist.
Wichtig: Stellen Sie sicher, dass Sie andere Elemente in der UserData-Eigenschaft nicht stören, wenn Sie Ihrer Vorlage den Toggle-Parameter hinzufügen. Fügen Sie den Toggle-Parameter auch nicht vor dem cfn-signal hinzu.
1. Definieren Sie in Ihrer CloudFormation-Vorlage **Toggle **als Parameter.
JSON:
"Parameters": {
"Toggle": {
"Type": "String",
"AllowedValues": ["true","false"],
"Default": "true"
}
}
YAML:
Parameters:
Toggle:
Type: String
AllowedValues:
- 'true'
- 'false'
Default: 'true'
2. Verweisen Sie in der Startkonfiguration Ihrer Vorlage auf den Toggle-Parameter in der Eigenschaft UserData und starten Sie dann Ihren Stack. Sehen Sie sich die folgenden JSON- und YAML-Beispiele an.
JSON:
"LaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Properties" : {
"ImageId" : { "Ref" : "ImageID" },
"UserData" : { "Fn::Base64" : { "Ref" : "Toggle" }
...
...
},
"InstanceType" : { "Ref" : "Type" }
}
}
YAML:
LaunchConfig:
Type: 'AWS::AutoScaling::LaunchConfiguration'
Properties:
ImageId: !Ref ImageID
UserData:
'Fn::Base64': !Ref Toggle
...
...
InstanceType: !Ref Type
Wichtig: Um fortlaufende Aktualisierungen zu initiieren, wenn Sie Ihren Stack aktualisieren, ändern Sie den Wert des Parameters von true auf false oder von false auf true, je nach der ursprünglichen Einstellung.
Hinweis: Sie können die Toggle-Parameter-Lösung für Eigenschaften verwenden, bei denen ein Update ersetzt werden muss, wie z. B. LaunchConfigurationName, und für Ressourcen wie AWS::EC2::LaunchTemplate.