UpdatePolicy 속성 - AWS CloudFormation

UpdatePolicy 속성

UpdatePolicy 속성을 사용하여 AWS CloudFormation에서 다음 리소스의 업데이트를 처리하는 방식을 지정합니다.

리소스 업데이트 정책

  • AWS::AppStream::Fleet 리소스의 경우 CloudFormation은 최신 AppStream 2.0 에이전트 소프트웨어로 Image Builder를 업데이트할 수 있습니다. 자세한 내용은 AppStream 2.0 버전 관리를 참조하세요.

  • AWS::AutoScaling::AutoScalingGroup 리소스의 경우 CloudFormation은 예약된 작업이 auto scaling과 연결되어 있는지와 변경 유형에 따라 세 가지 업데이트 정책 중 하나를 호출합니다.

    • 다음 중 하나 이상을 완료하면 AutoScalingReplacingUpdateAutoScalingRollingUpdate 정책 적용됩니다.

      • Auto Scaling 그룹의 AWS::AutoScaling::LaunchConfiguration을 변경합니다.

      • auto scaling의 VPCZoneIdentifier 속성을 변경합니다.

      • auto scaling의 LaunchTemplate 속성을 변경합니다.

      • 현재 LaunchConfiguration과 일치하지 않는 인스턴스가 포함된 Auto Scaling 그룹을 업데이트합니다.

      AutoScalingReplacingUpdateAutoScalingRollingUpdate 정책이 둘 다 지정된 경우 WillReplace 속성을 true로 설정하면 AutoScalingReplacingUpdate가 우선 적용됩니다.

    • 예약된 작업이 연결되어 있는 Auto Scaling 그룹을 포함하는 스택을 업데이트하는 경우 AutoScalingScheduledAction 정책이 적용됩니다.

  • AWS::ElastiCache::ReplicationGroup 리소스의 경우 CloudFormation에서 전체 리소스를 대체하는 대신 샤드를 추가 또는 제거함으로써 복제 그룹의 샤드를 수정할 수 있습니다. 자세한 내용은 UseOnlineResharding 정책 단원을 참조하십시오.

  • AWS::OpenSearchService::Domain 및 레거시 AWS::Elasticsearch::Domain 리소스의 경우 CloudFormation은 전체 리소스를 대체하지 않고도 OpenSearch Service 도메인을 OpenSearch 또는 Elasticsearch의 새 버전으로 업그레이드할 수 있습니다. 자세한 내용은 EnableVersionUpgrade 정책 단원을 참조하십시오.

  • AWS::Lambda::Alias 리소스의 경우, CloudFormation에서 별칭 버전이 변경될 때 CodeDeploy 배포 작업을 수행합니다. 자세한 내용은 CodeDeployLambdaAlias 업데이트 정책 단원을 참조하십시오.

AppStream 2.0 업데이트 정책

업데이트 정책에 대한 AppStream 2.0 구성입니다.

명령문

JSON

{ "UpdatePolicy": { "StopBeforeUpdate": { "Type": "Boolean" }, "StartAfterUpdate": { "Type": "Boolean" } } }

YAML

UpdatePolicy: StopBeforeUpdate: Type: Boolean StartAfterUpdate: Type: Boolean
StopBeforeUpdate

업데이트 전에 지정된 플릿을 중지합니다.

필수 항목 여부: 아니요

StartAfterUpdate

업데이트 후 지정된 플릿을 시작합니다.

필수 항목 여부: 아니요

AutoScalingReplacingUpdate 정책

AWS CloudFormation에서 auto scaling에 대한 대체 업데이트를 처리하는 방법을 지정하려면 AutoScalingReplacingUpdate 정책을 사용합니다. 이 정책을 사용하면 AWS CloudFormation에서 auto scaling을 새 그룹으로 바꿀지 아니면 auto scaling의 인스턴스만 바꿀지 지정할 수 있습니다.

중요

업데이트를 시도하기 전에 이전 및 새 Auto Scaling 그룹에 대한 Amazon EC2 용량이 충분한지 확인하십시오.

명령문

JSON

"UpdatePolicy" : { "AutoScalingReplacingUpdate" : { "WillReplace" : Boolean } }

YAML

UpdatePolicy: AutoScalingReplacingUpdate: WillReplace: Boolean

속성

WillReplace

Auto Scaling 그룹 및 이 그룹이 포함된 인스턴스를 업데이트 중 바꿀지 여부를 지정합니다. 이를 바꾸는 동안 CloudFormation에서 새 그룹 생성이 완료될 때까지 이전 그룹을 보존합니다. 업데이트에 실패하는 경우, CloudFormation에서 이전 Auto Scaling 그룹으로 롤백하고 새 Auto Scaling 그룹을 삭제할 수 있습니다.

CloudFormation은 새 그룹을 생성하는 동안 어떠한 인스턴스도 분리 또는 연결하지 않습니다. 새 Auto Scaling 그룹이 생성된 후 CloudFormation은 정리 프로세스 중 이전 Auto Scaling 그룹을 삭제합니다.

WillReplace 파라미터를 설정하는 경우 일치하는 CreationPolicy를 지정합니다. 최소 인스턴스 수(MinSuccessfulInstancesPercent 속성으로 지정)가 Timeout 기간(CreationPolicy 정책으로 지정됨) 이내에 성공 신호를 보내지 않으면 대체 업데이트는 실패하고 AWS CloudFormation은 이전 auto scaling으로 롤백합니다.

유형: 부울

필수 항목 여부: 아니요

AutoScalingRollingUpdate 정책

CloudFormation에서 Auto Scaling 그룹에 대한 롤링 업데이트를 처리하는 방법을 지정하려면 AutoScalingRollingUpdate 정책을 사용합니다. 롤링 업데이트를 통해 AWS CloudFormation에서 auto scaling의 인스턴스를 배치별로 또는 한 번에 모두 업데이트할지 여부를 지정할 수 있습니다.

중요

롤링 업데이트 중 일부 Auto Scaling 프로세스에서는 CloudFormation에서 롤링 업데이트를 완료하기 전에 Auto Scaling 그룹을 변경할 수 있습니다. 이러한 변경으로 인해 롤링 업데이트에 실패할 수 있습니다. 롤링 업데이트 중 Auto Scaling에서 프로세스를 실행하지 못하도록 하려면 SuspendProcesses 속성을 사용합니다. 자세한 내용은 Auto Scaling 그룹 롤링 업데이트 수행을 위해 권장되는 몇 가지 모범 사례에는 무엇이 있습니까?를 참조하십시오.

스택 업데이트 롤백 작업 도중 CloudFormation에서는 현재 스택 업데이트 작업 전에 템플릿에 지정된 UpdatePolicy 구성을 사용합니다. 예를 들어 스택 템플릿의 UpdatePolicy에 있는 MaxBatchSize를 1에서 10으로 업데이트했다고 가정합니다. 그런 다음 스택 업데이트를 수행하고, 업데이트가 실패하면 CloudFormation에서 업데이트 롤백 작업을 개시합니다. 이러한 경우 CloudFormation에서는 최대 배치 크기로 10이 아닌 1을 사용합니다. 따라서 롤링 업데이트를 시작할 가능성이 높은 AWS::AutoScaling::AutoScalingGroup 리소스를 업데이트하기 전에 이러한 업데이트와 별개로 스택 업데이트에서 UpdatePolicy 구성을 변경하는 것이 좋습니다.

명령문

JSON

"UpdatePolicy" : { "AutoScalingRollingUpdate" : { "MaxBatchSize" : Integer, "MinActiveInstancesPercent" : Integer, "MinInstancesInService" : Integer, "MinSuccessfulInstancesPercent" : Integer, "PauseTime" : String, "SuspendProcesses" : [ List of processes ], "WaitOnResourceSignals" : Boolean } }

속성

MaxBatchSize

동시에 바꿀 수 있는 최대 인스턴스 수를 지정합니다.

기본값: 1

최대: 100

유형: 정수

필수 항목 여부: 아니요

MinActiveInstancesPercent

업데이트가 성공하려면 롤링 업데이트 중에 해당 그룹의 원하는 용량과 비교하여 InService 상태에 있어야 하는 Auto Scaling 그룹의 인스턴스 비율을 지정합니다. 0~100 범위의 값을 지정할 수 있습니다. CloudFormation은 이를 10분의 1퍼센트 단위로 반올림합니다. 예를 들어 최소 InService 비율이 50인 5개의 인스턴스를 업데이트하는 경우 3개 이상의 인스턴스가 InService 상태여야 합니다.

인스턴스가 1시간이라는 정해진 시간 내에 InService 상태로 전환되지 않으면 CloudFormation은 인스턴스가 업데이트되지 않은 것으로 간주합니다.

이 속성을 지정하는 경우 PauseTime 속성도 사용해야 합니다.

MinActiveInstancesPercent 파라미터는 안정화만을 목적으로 인스턴스에만 적용됩니다. Auto Scaling 그룹의 인스턴스 수를 지정하려면 AWS::AutoScaling::AutoScalingGroup 리소스에 대한 MinSize, MaxSize, DesiredCapacity 속성을 참조하세요.

UpdatePolicy에서 MinActiveInstancesPercent를 설정하면 AWS::AutoScaling::AutoScalingGroup 리소스의 DesiredCapacity 속성이 해당 Auto Scaling 그룹에서 현재 원하는 용량보다 높으므로 시작된 인스턴스에도 영향을 미칩니다.

기본값: 100

유형: 정수

필수 항목 여부: 아니요

MinInstancesInService

CloudFormation에서 이전 인스턴스를 업데이트하는 동안 Auto Scaling 그룹 내에서 작동해야 하는 최소 인스턴스 수를 지정합니다. 이 값은 Auto Scaling 그룹의 MaxSize보다 작아야 합니다.

기본값: 0

유형: 정수

필수 항목 여부: 아니요

MinSuccessfulInstancesPercent

Auto Scaling 롤링 업데이트에서 성공 신호를 보내야 하는 인스턴스의 비율을 지정합니다. 이 비율의 인스턴스가 성공 신호를 보내야 업데이트에 성공합니다. 0~100 범위의 값을 지정할 수 있습니다. CloudFormation은 이를 10분의 1퍼센트 단위로 반올림합니다. 예를 들어 최소 성공 비율 50으로 인스턴스 다섯 개를 업데이트하는 경우 인스턴스 세 개에서 성공 신호를 보내야 성공입니다.

PauseTime 속성에 지정된 시간 내에 인스턴스가 신호를 전송하지 않으면 CloudFormation은 해당 인스턴스가 업데이트되지 않았다고 가정합니다.

이 속성을 지정하는 경우 WaitOnResourceSignalsPauseTime 속성도 사용해야 합니다.

MinSuccessfulInstancesPercent 파라미터는 신호 전송만을 목적으로 인스턴스에만 적용됩니다. Auto Scaling 그룹의 인스턴스 수를 지정하려면 AWS::AutoScaling::AutoScalingGroup 리소스에 대한 MinSize, MaxSize, DesiredCapacity 속성을 참조하세요.

기본값: 100

유형: 정수

필수 항목 여부: 아니요

중요

MinSuccessfulInstancesPercent 속성이 0으로 설정되면 CloudFormation은 용량 인스턴스의 0%가 InService 상태가 될 때까지 기다립니다. MinSuccessfulInstancesPercent는 auto scaling 상태를 Update Complete로 간주하기 전에 즉시 반환되어 스택 템플릿에 정의된 후속 리소스로 이동합니다.

다른 auto scaling이 CloudFormation 템플릿에 정의되어 있으면 동시에 업데이트됩니다. 모든 auto scaling이 InService 상태에서 한 번에 0%의 용량 인스턴스로 배포되면 0개의 인스턴스가 고객 트래픽을 처리하므로 가용성 문제가 발생합니다.

CloudFormation은 MinSuccessfulInstancesPercent가 0보다 큰 값으로 설정되어 auto scaling 업데이트가 완료된 것으로 간주하기 전에 합리적인 최소 인스턴스를 확인할 것을 권장합니다.

PauseTime

인스턴스에 소프트웨어 애플리케이션을 시작할 시간을 주기 위해 인스턴스 배치를 변경한 후 CloudFormation이 일시 정지하는 시간입니다. 예를 들어 Auto Scaling 그룹에서 인스턴스 수를 확장하는 경우 PauseTime을 지정해야 할 수 있습니다.

WaitOnResourceSignals 속성을 사용하는 경우, PauseTime은 Auto Scaling 그룹이 추가 또는 대체된 인스턴스로부터 필요한 수의 유효 신호를 받을 때까지 CloudFormation에서 기다리는 시간입니다. Auto Scaling 그룹이 필요한 수의 신호를 받기 전에 PauseTime이 초과되면 업데이트는 실패합니다. 최적의 결과를 얻으려면 애플리케이션의 시작 시간이 넉넉하도록 기간을 지정하십시오. 업데이트를 롤백해야 하는 경우 PauseTime이 짧으면 롤백에 실패할 수 있습니다.

PauseTimeISO8601 기간 형식입니다(PT#H#M#S 형식, 여기서 #은 각각 시간, 분 및 초를 나타내는 숫자임). 최대 PauseTime은 1시간입니다(PT1H).

기본값: WaitOnResourceSignals 속성이 true로 설정된 경우 PT1H(1시간)입니다.

타입: 문자열

필수 항목 여부: 아니요

SuspendProcesses

스택 업데이트 중 일시 중지할 Auto Scaling 프로세스를 지정합니다. 프로세스를 일시 중지하면 Auto Scaling이 스택 업데이트를 방해하지 않습니다. 예를 들어, Amazon EC2 Auto Scaling에서 경고와 연결된 조정 정책을 시작하지 않도록 경보를 일시 중지할 수 있습니다. 유효한 값을 알아보려면 Amazon EC2 Auto Scaling API 참조SuspendProcesses 작업에 대한 ScalingProcesses.member.N 파라미터를 참조하세요.

기본값: 지정되지 않음

유형: Auto Scaling 프로세스 목록

필수 항목 여부: 아니요

WaitOnResourceSignals

Auto Scaling 그룹에서 업데이트 중 새 인스턴스의 신호를 대기할지 여부를 지정합니다. 이 속성을 사용하면 인스턴스가 auto scaling에서 업데이트를 계속 진행하기 전에 애플리케이션 설치 및 구성을 완료하도록 합니다. AWS CloudFormation은 새 EC2 인스턴스가 그룹으로 시작된 후 auto scaling의 업데이트를 일시 중지합니다. 업데이트를 계속 진행하려면 AWS CloudFormation이 지정된 PauseTime 내에 각각의 새 인스턴스로부터 신호를 수신해야 합니다. Auto Scaling 그룹에 신호를 보내려면 cfn-signal 헬퍼 스크립트 또는 SignalResource API를 사용합니다.

인스턴스가 성공 신호를 보내기 전에 Elastic Load Balancing 상태 확인을 대기하도록 하려면 cfn-init 헬퍼 스크립트를 사용하여 상태-확인 검증을 추가합니다. 예를 들어, Auto Scaling 롤링 업데이트 샘플 템플릿에서 verify_instance_health 명령을 참조하십시오.

기본값: true

유형: 부울

필수 항목 여부: 조건부. MinSuccessfulInstancesPercent 속성을 지정하는 경우 WaitOnResourceSignalsPauseTime 속성도 사용해야 합니다.

AutoScalingScheduledAction 정책

AWS::AutoScaling::AutoScalingGroup 리소스에 예약된 작업이 연결되어 있는 경우 AWS CloudFormation에서 MinSize, MaxSizeDesiredCapacity 속성 업데이트를 처리하는 방법을 지정하려면 AutoScalingScheduledAction 정책을 사용합니다.

Auto Scaling 그룹의 그룹 크기 속성은 예약된 작업을 통해 언제든지 변경할 수 있습니다. Auto Scaling 그룹 및 예약된 작업을 사용하여 스택을 업데이트할 때 예약된 작업이 적용되더라도 CloudFormation은 항상 Auto Scaling 그룹의 그룹 크기 속성 값을 템플릿의 AWS::AutoScaling::AutoScalingGroup 리소스에 정의된 값으로 설정합니다.

예약된 작업이 적용되는 경우 CloudFormation이 그룹 크기 속성 값을 변경하지 않도록 하려면 AutoScalingScheduledAction 업데이트 정책을 사용하고 IgnoreUnmodifiedGroupSizePropertiestrue로 설정하여 사용자가 템플릿에서 MinSize, MaxSize 또는 DesiredCapacity 속성 값을 수정하지 않는 한 CloudFormation에서 이러한 값을 변경하지 않도록 합니다.

명령문

JSON

"UpdatePolicy" : { "AutoScalingScheduledAction" : { "IgnoreUnmodifiedGroupSizeProperties" : Boolean } }

속성

IgnoreUnmodifiedGroupSizeProperties

true이면 AWS CloudFormation에서 스택 업데이트 중 현재 auto scaling과 템플릿의 AWS::AutoScaling::AutoScalingGroup 리소스에 설명된 auto scaling 간의 그룹 크기 속성 차이를 무시합니다. 템플릿에서 그룹 크기 속성 값을 수정하면 AWS CloudFormation은 수정된 값을 사용하고 auto scaling을 업데이트합니다.

기본값: false

유형: 부울

필수 항목 여부: 아니요

UseOnlineResharding 정책

전체 AWS::ElastiCache::ReplicationGroup 리소스를 대체하는 대신 샤드를 추가 또는 제거함으로써 복제 그룹의 샤드를 수정하려면 UseOnlineResharding 업데이트 정책을 사용합니다.

UseOnlineReshardingtrue로 설정된 경우 AWS::ElastiCache::ReplicationGroup 리소스의 NumNodeGroupsNodeGroupConfiguration 속성을 업데이트할 수 있고, CloudFormation에서는 중단 없이 이러한 속성을 업데이트합니다. UseOnlineReshardingfalse로 설정되거나 지정되지 않은 경우 NumNodeGroupsNodeGroupConfiguration 속성을 업데이트하면 CloudFormation에서 전체 AWS::ElastiCache::ReplicationGroup 리소스를 교체합니다.

UseOnlineResharding 업데이트 정책에는 속성이 없습니다.

UseOnlineResharding 업데이트 정책을 true로 설정할 때 고려해야 할 사항은 다음과 같습니다.

  • 해당 스택 업데이트 작업의 유일한 업데이트로 NumNodeGroupsNodeGroupConfiguration 속성에 대한 업데이트를 수행하는 것이 좋습니다.

    복제 그룹의 노드 그룹 구성 업데이트는 리소스 집약적 작업입니다. 스택 업데이트가 실패하는 경우 CloudFormation에서는 복제 그룹의 노드 그룹 구성에 대한 변경 사항을 롤백하지 않습니다. 하지만 CloudFormation에서 실패한 업데이트 작업의 일부분으로 변경된 나머지 속성을 롤백합니다.

  • 노드 그룹을 업데이트하려면 모든 노드 그룹을 식별해야 합니다.

    NodeGroupConfiguration 속성을 지정하는 경우 CloudFormation에서 중단 없이 노드 수를 업데이트하도록 각 노드 그룹 구성에 대한 NodeGroupId 또한 지정해야 합니다.

    복제 그룹 생성 시 각 노드 그룹에 대한 ID를 지정하지 않는 경우 ElastiCache에서 자동으로 각 노드 그룹에 대한 ID를 생성합니다. 중단 없이 복제 그룹을 업데이트하려면 ElastiCache 콘솔(https://console.aws.amazon.com/elasticache/) 또는 DescribeReplicationGroups를 사용하여 복제 그룹의 모든 노드 그룹에 대한 ID를 검색합니다. 그런 다음 샤드 추가 또는 제거 시도 전에 스택 템플릿의 각 노드 그룹에 대한 ID를 지정합니다.

    참고

    스택 템플릿에 복제 그룹을 생성할 때 지정한 각 노드 그룹에 대한 ID를 포함시키는 것이 모범 사례입니다.

    추가로 중단 없이 노드 수를 업데이트하려면 각 NodeGroupConfiguration에 대한 PrimaryAvailabilityZone, ReplicaAvailabilityZonesReplicaCount 속성을 정확히 지정해야 합니다. 다시 한 번 ElastiCache 콘솔(https://console.aws.amazon.com/elasticache/) 또는 DescribeReplicationGroups를 사용하여 각 노드 그룹에 대한 실제 값을 검색하고 이를 스택 템플릿의 값과 비교할 수 있습니다. 별도의 스택 업데이트로, 또는 노드 그룹의 수를 변경하는 동일한 스택 업데이트의 일부분으로 노드 그룹의 속성 값을 업데이트할 수 있습니다.

    중단 없이 노드 그룹의 수를 업데이트하기 위해 UseOnlineResharding 업데이트 정책을 사용할 때 ElastiCache에서는 지정된 수의 슬롯 사이에 키스페이스를 균등하게 분산합니다. 이는 나중에 업데이트할 수 없습니다. 따라서 이러한 방식으로 노드 그룹의 수를 업데이트한 이후 스택 템플릿에서 각 NodeGroupConfigurationSlots 속성에 지정된 값을 제거해야 합니다. 더 이상 각 노드 그룹의 실제 값을 반영하지 않기 때문입니다.

  • 실제 노드 그룹 제거 결과는 다를 수 있습니다.

    현재 노드 그룹의 수보다 작은 NumNodeGroups 값을 지정하는 경우 CloudFormation에서는 ElastiCache에 지정된 노드 수에 도달하는 데 필요한 만큼 노드 그룹을 제거하도록 지시합니다. 하지만 ElastiCache에서 항상 원하는 수의 노드 그룹을 제거할 수는 없습니다. ElastiCache에서 원하는 수의 노드 그룹을 제거할 수 없는 경우 CloudFormation에서는 스택 이벤트를 생성하여 이를 사용자에게 알립니다. ElastiCache에서 노드 그룹을 전혀 제거할 수 없는 경우 CloudFormation 리소스 업데이트는 실패합니다.

복제 그룹 수정에 대한 자세한 내용을 알아보려면 Amazon ElastiCache API 참조ModifyReplicationGroupShardConfiguration을 참조하세요.

명령문

JSON

"UpdatePolicy" : { "UseOnlineResharding" : Boolean }

YAML

UpdatePolicy: UseOnlineResharding: Boolean

EnableVersionUpgrade 정책

전체 AWS::OpenSearchService::Domain 또는 AWS::Elasticsearch::Domain 리소스를 대체하지 않고 OpenSearch Service 도메인을 새 버전의 OpenSearch 또는 Elasticsearch로 업그레이드하려면 EnableVersionUpgrade 업데이트 정책을 사용합니다.

EnableVersionUpgradetrue로 설정된 경우 AWS::OpenSearchService::Domain 리소스의 EngineVersion 속성이나 레거시 AWS::Elasticsearch::Domain 리소스의 ElasticsearchVersion 속성을 업데이트할 수 있으며 CloudFormation는 중단 없이 해당 속성을 업데이트합니다. EnableVersionUpgradefalse로 설정되거나 지정되지 않은 경우 EngineVersion 속성 ElasticsearchVersion 속성을 업데이트하면 CloudFormation에서 전체 AWS::OpenSearchService::Domain/AWS::Elasticsearch::Domain 리소스가 대체됩니다.

EnableVersionUpgrade 업데이트 정책에는 속성이 없습니다.

OpenSearch Service 도메인 업그레이드에 대한 자세한 내용을 알아보려면 Amazon OpenSearch Service 개발자 안내서의 UpgradeDomain을 참조하세요.

명령문

JSON

"UpdatePolicy" : { "EnableVersionUpgrade" : Boolean }

YAML

UpdatePolicy: EnableVersionUpgrade: Boolean

CodeDeployLambdaAlias 업데이트 정책

AWS::Lambda::Alias 리소스 버전이 변경될 때 CodeDeploy 배포 작업을 수행하려면 CodeDeployLambdaAliasUpdate 업데이트 정책을 사용하십시오.

명령문

JSON

"UpdatePolicy" : { "CodeDeployLambdaAliasUpdate" : { "AfterAllowTrafficHook" : String, "ApplicationName" : String, "BeforeAllowTrafficHook" : String, "DeploymentGroupName" : String } }

속성

AfterAllowTrafficHook

트래픽 라우팅이 완료된 후 실행시킬 Lambda 함수의 이름.

필수 항목 여부: 아니요

타입: 문자열

ApplicationName

CodeDeploy 애플리케이션의 이름.

필수 항목 여부: 예

타입: 문자열

BeforeAllowTrafficHook

트래픽 라우팅 시작 전에 실행시킬 Lambda 함수의 이름.

필수 항목 여부: 아니요

타입: 문자열

DeploymentGroupName

CodeDeploy 배포 그룹의 이름. 트래픽 전환 정책을 설정하는 장소입니다.

필수 항목 여부: 예

타입: 문자열

AWS::Lambda::Alias 리소스의 UpdatePolicy 속성을 지정하는 방법에 대한 예제는 Lambda 별칭 업데이트 정책 단원을 참조하십시오.

예제

다음 예제에서는 Auto Scaling 그룹에 업데이트 정책을 추가하는 방법과 메타데이터 업데이트 시 가용성 유지 관리 방법을 보여줍니다.

auto scaling에 UpdatePolicy 추가

다음 예에서는 업데이트 정책을 추가하는 방법을 보여 줍니다. 업데이트 중 Auto Scaling 그룹은 인스턴스를 두 개씩 한 배치로 업데이트하고 최소 한 개의 인스턴스는 계속 작동하도록 합니다. WaitOnResourceSignals 플래그가 설정되었으므로 Auto Scaling 그룹에서는 그룹에 추가된 새 인스턴스를 대기합니다. 새 인스턴스는 Auto Scaling 그룹이 인스턴스의 다음 배치를 업데이트하기 전에 해당 그룹에 신호를 보내야 합니다.

JSON

"ASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : [ "us-east-1a", "us-east-1b" ], "DesiredCapacity" : "1", "LaunchConfigurationName" : { "Ref" : "LaunchConfig" }, "MaxSize" : "4", "MinSize" : "1" }, "UpdatePolicy" : { "AutoScalingScheduledAction" : { "IgnoreUnmodifiedGroupSizeProperties" : "true" }, "AutoScalingRollingUpdate" : { "MinInstancesInService" : "1", "MaxBatchSize" : "2", "WaitOnResourceSignals" : "true", "PauseTime" : "PT10M" } } }, "ScheduledAction" : { "Type" : "AWS::AutoScaling::ScheduledAction", "Properties" : { "AutoScalingGroupName" : { "Ref" : "ASG" }, "DesiredCapacity" : "2", "StartTime" : "2017-06-02T20 : 00 : 00Z" } }

YAML

ASG: Type: 'AWS::AutoScaling::AutoScalingGroup' Properties: AvailabilityZones: - us-east-1a - us-east-1b DesiredCapacity: '1' LaunchConfigurationName: Ref: LaunchConfig MaxSize: '4' MinSize: '1' UpdatePolicy: AutoScalingScheduledAction: IgnoreUnmodifiedGroupSizeProperties: 'true' AutoScalingRollingUpdate: MinInstancesInService: '1' MaxBatchSize: '2' WaitOnResourceSignals: 'true' PauseTime: PT10M ScheduledAction: Type: 'AWS::AutoScaling::ScheduledAction' Properties: AutoScalingGroupName: Ref: ASG DesiredCapacity: '2' StartTime: '2017-06-02T20 : 00 : 00Z'

AutoScalingReplacingUpdate 정책

다음 예에서는 연결된 Auto Scaling 그룹이 업데이트 중 대체되도록 강제하는 정책을 선언합니다. 업데이트에 성공하려면 (MinSuccessfulPercentParameter 파라미터로 지정된) 비율의 인스턴스가 Timeout 기간 내에 성공 신호를 보내야 합니다.

JSON

"UpdatePolicy" : { "AutoScalingReplacingUpdate" : { "WillReplace" : "true" } }, "CreationPolicy" : { "ResourceSignal" : { "Count" : { "Ref" : "ResourceSignalsOnCreate"}, "Timeout" : "PT10M" }, "AutoScalingCreationPolicy" : { "MinSuccessfulInstancesPercent" : { "Ref" : "MinSuccessfulPercentParameter" } } }

YAML

UpdatePolicy: AutoScalingReplacingUpdate: WillReplace: 'true' CreationPolicy: ResourceSignal: Count: !Ref 'ResourceSignalsOnCreate' Timeout: PT10M AutoScalingCreationPolicy: MinSuccessfulInstancesPercent: !Ref 'MinSuccessfulPercentParameter'

cfn-init 헬퍼 스크립트에 대한 메타데이터 업데이트 시 가용성 유지 관리

인스턴스에 소프트웨어 애플리케이션을 설치할 때 AWS::CloudFormation::Init 메타데이터 키와 cfn-init 헬퍼 스크립트를 사용하여 auto scaling의 인스턴스를 부트스트랩할 수 있습니다. CloudFormation은 패키지를 설치하고, 명령을 실행하고, 메타데이터에 설명된 기타 부트스트랩 작업을 수행합니다.

메타데이터만 업데이트하는 경우(예: 패키지를 다른 버전으로 업데이트하는 경우) cfn-hup 헬퍼 데몬을 사용하여 업데이트를 감지해 적용할 수 있습니다. 그러나 cfn-hup 데몬은 각 인스턴스에서 독립적으로 실행됩니다. 이 데몬이 모든 인스턴스에서 동시에 실행되면 업데이트 중 애플리케이션 또는 서비스를 사용하지 못할 수 있습니다. 가용성을 보장하기 위해 CloudFormation이 인스턴스를 한 번에 한 배치씩 업데이트하도록 롤링 업데이트를 강제 적용할 수 있습니다.

중요

롤링 업데이트를 강제 적용하려면 CloudFormation에서 새 인스턴스를 생성한 다음 이전 인스턴스를 삭제해야 합니다. 이전 인스턴스에 저장된 모든 정보는 손실됩니다.

롤링 업데이트를 강제 실행하려면 시작 구성 리소스의 논리적 ID를 변경한 다음 스택과 원본 로직 ID(예: 연결된 auto scaling)를 가리키는 참조를 업데이트합니다. CloudFormation은 auto scaling에 대한 롤링 업데이트를 트리거하여 모든 인스턴스를 대체합니다.

원본 템플릿

"LaunchConfig": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "Comment" : "Install a simple PHP application", "AWS::CloudFormation::Init" : { ... } } }

업데이트된 논리적 ID

"LaunchConfigUpdateRubygemsPkg": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "Comment" : "Install a simple PHP application", "AWS::CloudFormation::Init" : { ... } } }

Lambda 별칭 업데이트 정책

다음은 UpdatePolicy 리소스의 AWS::Lambda::Alias 속성을 지정하는 방법에 대한 예제입니다. 정책으로 전달되는 애플리케이션 및 배포 그룹이 배포와 관련된 모든 세부 정보를 정의합니다.

JSON

"Alias": { "Type": "AWS::Lambda::Alias", "Properties": { "FunctionName": { "Ref": "LambdaFunction" }, "FunctionVersion": { "Fn::GetAtt": [ "FunctionVersionTwo", "Version" ] }, "Name": "MyAlias" }, "UpdatePolicy": { "CodeDeployLambdaAliasUpdate": { "ApplicationName": { "Ref": "CodeDeployApplication" }, "DeploymentGroupName": { "Ref": "CodeDeployDeploymentGroup" }, "BeforeAllowTrafficHook": { "Ref": "PreHookLambdaFunction" }, "AfterAllowTrafficHook": { "Ref": "PreHookLambdaFunction" } } } }

YAML

Alias: Type: 'AWS::Lambda::Alias' Properties: FunctionName: !Ref LambdaFunction FunctionVersion: !GetAtt FunctionVersionTwo.Version Name: MyAlias UpdatePolicy: CodeDeployLambdaAliasUpdate: ApplicationName: !Ref CodeDeployApplication DeploymentGroupName: !Ref CodeDeployDeploymentGroup BeforeAllowTrafficHook: !Ref PreHookLambdaFunction AfterAllowTrafficHook: !Ref PreHookLambdaFunction