업데이트 롤백 계속 - AWS CloudFormation

업데이트 롤백 계속

AWS CloudFormation에서 업데이트 중에 모든 변경 사항을 롤백할 수 없는 경우 스택이 UPDATE_ROLLBACK_FAILED 상태로 전환됩니다. 예를 들어, 스택이 CloudFormation 외부에서 삭제된 이전 데이터베이스 인스턴스로 롤백하기 시작합니다. CloudFormation에서는 데이터베이스가 삭제되었는지 알지 못하므로 해당 데이터베이스 인스턴스가 존재하는 것으로 간주하고 롤백을 시도합니다. 따라서 업데이트 롤백이 실패합니다.

스택이 UPDATE_ROLLBACK_FAILED 상태인 경우 작업 상태(UPDATE_ROLLBACK_COMPLETE)로 계속 롤백할 수 있습니다. UPDATE_ROLLBACK_FAILED 상태인 스택을 업데이트할 수 없습니다. 하지만 롤백을 계속할 수 있는 경우 스택을 원래 설정으로 되돌린 다음 다시 업데이트할 수 있습니다.

대부분의 경우 스택을 계속해서 롤백하려면 업데이트 롤백 실패의 원인인 오류를 해결해야 합니다. 그 밖의 경우(예: 스택 작업이 시간 초과된 경우) 변경하지 않고 업데이트를 계속 롤백할 수 있습니다.

참고

중첩 스택을 사용하는 경우 상위 스택을 롤백하면 모든 하위 스택도 함께 롤백하려고 시도합니다.

업데이트 롤백을 계속하려면(콘솔)
  1. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

  2. 업데이트할 스택을 선택하고 Stack actions(스택 작업), 업데이트 롤백 계속을 차례로 선택합니다.

    오류 해결의 해결 방법이 모두 효과가 없는 경우 고급 옵션을 사용하여 CloudFormation에서 롤백할 수 없는 리소스를 건너뛸 수 있습니다. 건너뛸 리소스의 논리적 ID를 조회하여 입력해야 합니다. 업데이트 전달 도중이 아니라 UpdateRollback 중에 UPDATE_FAILED 상태로 전환된 리소스만 지정합니다.

    주의

    CloudFormation에서 지정된 리소스의 상태를 UPDATE_COMPLETE로 설정하고 스택을 계속 롤백합니다. 롤백이 완료된 이후에는 건너뛴 리소스의 상태가 스택 템플릿에 있는 리소스의 상태와 일치하지 않게 됩니다. 다른 스택을 업데이트하기 전에 스택 또는 리소스를 서로 일치하도록 업데이트해야 합니다. 그렇지 않으면 후속 스택 업데이트가 실패할 수 있습니다. 이 경우 스택을 복구할 수 없습니다.

    스택을 롤백하는 데 필요한 최소 리소스 수를 지정합니다. 예를 들어, 리소스 업데이트가 실패하여 종속 리소스가 실패할 수 있습니다. 이 경우 종속 리소스를 건너뛸 필요가 없습니다.

    중첩 스택에 포함된 리소스를 건너뛰려면 NestedStackName.ResourceLogicalID 형식을 사용합니다. Type: AWS::CloudFormation::Stack 목록에서 스택 리소스의 논리적 ID(ResourcesToSkip)를 지정하려면 포함된 해당 스택이 DELETE_IN_PROGRESS, DELETE_COMPLETE 또는 DELETE_FAILED 상태 중 하나여야 합니다.

업데이트 롤백을 계속하려면(AWS CLI)

ResourcesToSkip을 사용하여 중첩 스택 계층 구조 복구

다음 다이어그램은 UPDATE_ROLLBACK_FAILED 상태인 중첩 스택 계층 구조를 보여줍니다. 이 예에서는 WebInfra 루트 스택에 두 개의 중첩 스택(WebInfra-ComputeWebInfra-Storage)이 있고, 여기에 다시 하나 이상의 중첩 스택이 있습니다.

3단계 중첩 스택의 계층 구조 다이어그램.
참고

간소화하기 위해 이 예에서는 스택 이름이 잘려 있습니다. 하위 스택 이름은 일반적으로 CloudFormation에 의해 생성되고 고유한 임의의 문자열을 포함하므로 실제 이름은 사용자에게 친숙하지 않을 수 있습니다.

continue-update-rollback을 사용하여 루트 스택을 실행 가능한 상태로 가져오려면 resources-to-skip 파라미터를 사용하여 롤백에 실패한 리소스를 건너뛰어야 합니다. 이 예에서 resources-to-skip은 다음 항목을 포함합니다.

  1. myCustom

  2. WebInfra-Compute-Asg.myAsg

  3. WebInfra-Compute-LB.myLoadBalancer

  4. WebInfra-Storage.DB

다음은 전체 AWS CLI 명령의 예입니다.

$ aws cloudformation continue-update-rollback --stack-name WebInfra \ --resources-to-skip myCustom WebInfra-Compute-Asg.myAsg WebInfra-Compute-LB.myLoadBalancer WebInfra-Storage.DB

NestedStackName.ResourceLogicalID 형식을 사용하여 중첩 스택의 리소스를 지정했지만, 루트 스택의 리소스(예: myCustom)에 대해서는 논리적 ID만 지정했습니다.

중첩 스택의 스택 이름 찾기

스택 ID 또는 Amazon 리소스 이름(ARN)에서 하위 스택의 이름을 찾을 수 있습니다. 다음 예에서 스택 이름은 WebInfra-Storage-Z2VKC706XKXT입니다.

arn:aws:cloudformation:us-east-1:123456789012:stack/WebInfra-Storage-Z2VKC706XKXT/ea9e7f90-54f7-11e6-a032-028f3d2330bd

중첩 스택의 논리적 ID 찾기

상위 스택의 템플릿 정의에서 하위 스택의 논리적 ID를 찾을 수 있습니다. 다이어그램에서 WebInfra-Storage-DB 하위 스택의 LogicalId는 상위 WebInfra-StorageDB입니다.

CloudFormation 콘솔의 Resources(리소스) 또는 Events(이벤트) 탭에 있는 스택 리소스에 대한 Logical ID(논리적 ID) 열에서 논리적 ID를 찾을 수도 있습니다.