AWS CloudFormation의 시작 구성을 변경하지 않은 경우 롤링 업데이트를 트리거하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 5월 20일

AWS CloudFormation 스택을 업데이트하면 시작 구성을 수정하지 않기 때문에 Auto Scaling 그룹의 인스턴스가 업데이트되지 않습니다. 그러나 시작 구성을 수정하지 않고도 스택의 모든 업데이트에 대해 Auto Scaling 그룹에서 롤링 업데이트를 트리거하고 싶습니다.

간략한 설명

Auto Scaling 그룹에 대한 롤링 업데이트는 UpdatePolicy 속성의 특정 조건이 충족되는 경우에만 트리거됩니다.

롤링 업데이트를 트리거하기 위해 AWS CloudFormation 템플릿의 시작 구성에서 트리거 파라미터(이 예제에서는 Toggle)를 생성할 수 있습니다. 그러나 스택 업데이트 중에 Toggle 파라미터의 값을 변경하면 UserData 특성이 수정됩니다. UserData를 수정하려면 대체가 필요합니다. AWS CloudFormation은 UserData에 대한 수정을 감지한 다음 LaunchConfiguration 리소스를 대체합니다. 이 대체는 UpdatePolicy 속성에 의해 정의된 Auto Scaling 롤링 업데이트를 트리거합니다.

​해결 방법

다음 단계에서는 AutoScalingRollingUpdate 정책이 Auto Scaling 그룹에 대해 구성되고 Auto Scaling 그룹이 LaunchConfiguration을 참조하도록 구성되어 있다고 가정합니다.

중요: 템플릿에 Toggle 파라미터를 추가할 때 UserData 속성의 다른 요소에 영향을 주지 않도록 주의하십시오. cfn-signal 앞에 Toggle 파라미터를 추가하지 마십시오.

1.    AWS CloudFormation 템플릿에서 파라미터를 정의하십시오(이 예제의 경우, Toggle). 다음의 JSON 및 YAML 예제를 참조하십시오.

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

중요: 스택을 업데이트할 때 롤링 업데이트를 트리거하려면 스택을 시작하기 전에 초기 설정에 따라 Toggle 파라미터의 값을 true에서 false 또는 false에서 true로 변경하십시오.

참고: Toggle 파라미터 솔루션은 대체가 필요한 업데이트(예 : LaunchConfigurationName) 및 AWS::EC2::LaunchTemplate과 같은 리소스에 사용할 수 있습니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?