시작 구성을 수정하지 않고 모든 AWS CloudFormation 스택 업데이트에서 Auto Scaling 그룹에 롤링 업데이트를 시작하려고 합니다.
간략한 설명
Auto Scaling 그룹에 대한 롤링 업데이트는 UpdatePolicy 속성의 특정 조건이 충족되는 경우에만 시작할 수 있습니다.
롤링 업데이트를 시작하려면 CloudFormation 템플릿의 시작 구성에서 toggle 파라미터를 생성할 수 있습니다. 그러나 스택 업데이트 중에 toggle 파라미터의 값을 변경하면 UserData 속성이 수정됩니다. 모든 UserData 수정에는 대체가 필요합니다. CloudFormation은 UserData에 대한 수정을 감지한 다음 LaunchConfiguration 리소스를 대체합니다. 이 대체는 UpdatePolicy 속성에 의해 정의된 Auto Scaling 롤링 업데이트를 트리거합니다.
해결 방법
다음 단계에서는 AutoScalingRollingUpdate 정책이 Auto Scaling 그룹에 대해 구성되고 Auto Scaling 그룹이 LaunchConfiguration을 참조하도록 구성되어 있다고 가정합니다.
중요: 템플릿에 toggle 파라미터를 추가할 때 UserData 속성의 다른 요소에 영향을 주지 않도록 주의하세요. 또한 cfn-signal 앞에 toggle 파라미터를 추가하지 마세요.
1. CloudFormation 템플릿에서 Toggle을 파라미터로 정의합니다.
JSON:
"Parameters": {
"Toggle": {
"Type": "String",
"AllowedValues": ["true","false"],
"Default": "true"
}
}
YAML:
Parameters:
Toggle:
Type: String
AllowedValues:
- 'true'
- 'false'
Default: 'true'
2. 템플릿의 시작 구성에서 UserData 속성의 toggle 파라미터를 참조한 다음, 스택을 시작합니다. 다음의 JSON 및 YAML 예제를 참조하세요.
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
중요: 스택을 업데이트할 때 롤링 업데이트를 시작하려면 초기 설정에 따라 파라미터의 값을 true에서 false로 또는 false에서 true로 변경하세요.
참고: toggle 파라미터 해결책은 LaunchConfigurationName과 같이 대체가 필요한 업데이트의 속성 및 AWS::EC2::LaunchTemplate과 같은 리소스에 사용할 수 있습니다.