Amazon Elastic Compute Cloud(Amazon EC2) Auto Scaling 그룹에서 각 AWS CloudFormation 스택 업데이트에 대한 롤링 업데이트를 수행하고 싶습니다. 매번 시작 템플릿을 수정하고 싶지는 않습니다.
해결 방법
Auto Scaling 그룹에 대한 롤링 업데이트를 시작하려면 UpdatePolicy 속성을 사용하십시오.
CloudFormation 템플릿의 시작 구성에서 AWS::EC2::LaunchTemplate 리소스 유형의 UserData 속성에 있는 Toggle 파라미터를 참조하는 것이 좋습니다. 예를 들어 스택 업데이트 중에 Toggle 값을 true에서 false로 변경하면 UserData 속성이 수정됩니다. 이 작업을 수행하면 CloudFormation이 새 시작 템플릿 버전을 생성하도록 요청합니다.
다음 해결 방법은 사용자가 Auto Scaling 그룹에 대해 AutoScalingRollingUpdate 정책을 구성하고 AWS::EC2::LaunchTemplate을 참조하도록 Auto Scaling 그룹을 구성했다고 가정합니다.
중요: 템플릿에 Toggle 파라미터를 추가할 때 UserData 속성의 다른 요소에 방해가 되지 않도록 하십시오.
롤링 업데이트를 설정하려면 다음 단계를 완료하십시오.
-
CloudFormation 템플릿에서 Toggle을 파라미터로 정의합니다.
JSON 파일의 경우 다음 코드를 입력합니다.
"Parameters": {
"Toggle": {
"Type": "String",
"AllowedValues": [
"true",
"false"
],
"Default": "true",
"Description": "Toggle parameter to force ASG update"
}
}
YAML 파일의 경우 다음 코드를 입력합니다.
Parameters:
Toggle:
Type: String
AllowedValues:
- 'true'
- 'false'
Default: 'true'
Description: 'Toggle parameter to force ASG update'
-
템플릿의 시작 구성에서 UserData 속성의 Toggle 파라미터를 참조하십시오.
JSON 예시:
"LaunchTemplate": {
"Type": "AWS::EC2::LaunchTemplate",
"Properties": {
"LaunchTemplateData": {
"ImageId": { "Ref": "ImageId" },
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"#!/bin/bash\n",
"echo \"Toggle parameter is set to ",
{
"Ref": "Toggle"
},
"\"\n"
...
...
]
]
}
},
"InstanceType": { "Ref": "InstanceType" }
}
}
YAML 예시:
LaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateData:
ImageId: !Ref ImageId
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
echo "Toggle parameter is set to ${Toggle}"
...
...
InstanceType: !Ref InstanceType
-
스택을 생성합니다.
-
롤링 업데이트를 시작하려면 현재 설정에 따라 Toggle 파라미터의 값을 true에서 false로 변경하거나 false에서 true로 변경합니다.
참고: 업데이트 시 대체가 필요한 속성(예: LaunchTemplateName)에도 위 해결 방법을 사용할 수 있습니다.