업데이트 롤백 계속 - AWS CloudFormation

업데이트 롤백 계속

CloudFormation에서 스택 업데이트를 롤백하려고 시도할 때 업데이트 프로세스 중에 변경한 내용을 모두 롤백하지 못하는 경우가 있습니다. 이를 UPDATE_ROLLBACK_FAILED 상태라고 합니다. 예를 들어, 스택이 CloudFormation 외부에서 삭제된 이전 데이터베이스 인스턴스로 롤백하기 시작합니다. CloudFormation에서는 데이터베이스가 삭제되었는지 알지 못하므로 해당 데이터베이스 인스턴스가 존재하는 것으로 간주하고 롤백을 시도합니다. 따라서 업데이트 롤백이 실패합니다.

UPDATE_ROLLBACK_FAILED 상태의 스택은 업데이트할 수 없지만 작업 상태(UPDATE_ROLLBACK_COMPLETE)로 롤백할 수 있습니다. 스택을 원래 설정으로 되돌린 후 다시 업데이트를 시도할 수 있습니다.

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

참고

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

업데이트 롤백을 계속하려면(콘솔)
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/cloudformation에서 AWS CloudFormation 콘솔을 엽니다.

  2. 화면 상단의 탐색 모음에서 스택이 위치한 AWS 리전을 선택합니다.

  3. 스택 페이지에서 업데이트할 스택을 선택하고 스택 작업, 업데이트 롤백 계속을 차례로 선택합니다.

    오류 해결의 해결 방법이 모두 효과가 없는 경우 고급 옵션을 사용하여 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)
  • continue-update-rollback 명령을 --stack-name 옵션과 함께 사용하여 롤백을 계속할 스택의 ID를 지정합니다.

실패한 중첩 스택 업데이트에서 계속 롤백

여러 개의 스택이 서로 중첩된 경우 풀 스택 계층 구조를 작동 상태로 되돌리려면 여러 중첩 수준에서 리소스를 건너뛰어야 할 수도 있습니다.

예를 들어, 내부에 WebInfra-ComputeWebInfra-Storage 스택이 포함된 WebInfra라는 루트 스택이 있습니다. 또한 이 두 스택 내부에는 자체 중첩 스택이 있습니다.

업데이트 중에 문제가 발생하여 업데이트 프로세스가 실패하면 전체 스택 계층 구조가 다음 다이어그램과 같이 UPDATE_ROLLBACK_FAILED 상태가 될 수 있습니다.

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

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

continue-update-rollback 명령을 사용하여 루트 스택을 실행 가능한 상태로 가져오려면 --resources-to-skip 옵션을 사용하여 롤백에 실패한 리소스를 건너뛰어야 합니다.

다음 continue-update-rollback 예제는 이전에 실패한 스택 업데이트에서 롤백 작업을 재개합니다. 이 예제에서 --resources-to-skip 옵션은 다음 항목을 포함합니다.

  • myCustom

  • WebInfra-Compute-Asg.myAsg

  • WebInfra-Compute-LB.myLoadBalancer

  • WebInfra-Storage.DB

루트 스택의 리소스의 경우 논리적 ID(예: myCustom)만 입력하면 됩니다. 하지만 중첩 스택에 포함된 리소스의 경우 중첩 스택 이름과 해당 논리적 ID를 마침표로 구분하여 입력해야 합니다. 예: WebInfra-Compute-Asg.myAsg.

aws cloudformation continue-update-rollback --stack-name WebInfra \ --resources-to-skip myCustom WebInfra-Compute-Asg.myAsg WebInfra-Compute-LB.myLoadBalancer WebInfra-Storage.DB
중첩 스택의 스택 이름 찾기

하위 스택의 스택 ID 또는 Amazon 리소스 이름(ARN)에서 찾을 수 있습니다.

다음 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를 찾을 수도 있습니다. 자세한 내용은 CloudFormation 콘솔에서 스택 정보 보기 단원을 참조하십시오.