스택 실패 옵션 - AWS CloudFormation

스택 실패 옵션

프로비저닝 실패가 발생한 경우 성공적으로 프로비저닝된 리소스를 롤백하지 않고 실패 지점부터 시작하여 애플리케이션을 반복적으로 개발할 수 있습니다. 스택 실패 옵션을 지정하여 CREATE_FAILED 또는 UPDATE_FAILED 상태의 리소스 문제를 해결할 수 있습니다. 모든 스택 배포 및 변경 세트 작업에 대한 실패 옵션을 프로비저닝할 수 있습니다.

  • Preserve successfully provisioned resources(성공적으로 프로비저닝된 리소스 보존)로 설정된 작업 생성은 성공한 리소스의 상태를 유지하는 반면 실패한 리소스는 다음 업데이트 작업이 수행될 때까지 실패 상태로 유지됩니다.

  • Preserve successfully provisioned resources(성공적으로 프로비저닝된 리소스 보존)로 설정된 업데이트 및 변경 세트 작업은 성공한 리소스의 상태를 유지하는 동시에 실패한 리소스를 마지막으로 알려진 안정 상태로 롤백합니다. 실패한 리소스는 UPDATE_FAILED 상태가 됩니다. 마지막으로 알려진 안정 상태가 없는 리소스는 다음 스택 작업 시 삭제됩니다.

실패한 리소스의 롤백 일시 중지에 대한 자세한 내용을 알아보려면 다음 섹션을 참조하세요.

스택 실패 옵션 개요

AWS CloudFormation 콘솔, API 또는 AWS CLI에서 작업을 실행하기 전에 프로비저닝된 리소스 실패에 대한 동작을 지정합니다. 그런 다음 다른 수정 없이 리소스 배포 프로세스를 진행합니다. 운영 실패가 발생하면 CloudFormation은 각 독립 프로비저닝 경로의 첫 번째 실패 시 중지합니다. CloudFormation은 리소스 간의 종속 항목을 식별하여 독립 프로비저닝 작업을 병렬화합니다. 그런 다음 실패가 발생할 때까지 각 독립 프로비저닝 경로에서 리소스 프로비저닝을 진행합니다. 한 경로의 실패는 다른 프로비저닝 경로에 영향을 주지 않습니다. CloudFormation은 완료될 때까지 리소스를 계속 프로비저닝하거나 다른 실패 시 중지됩니다.

배포 프로세스를 계속하려면 문제를 수정합니다. CloudFormation은 이전에 성공적으로 프로비저닝할 수 없었던 리소스에 대한 프로비저닝 작업을 재시도하기 전에 필요한 업데이트를 수행합니다. Retry(재시도), Update(업데이트) 또는 Roll back(롤백) 작업을 제출하여 문제를 해결합니다. 예를 들어 Amazon EC2 인스턴스를 프로비저닝하고 EC2 인스턴스가 생성 작업 중 실패하는 경우 실패한 리소스를 즉시 롤백하는 대신 오류를 조사할 수 있습니다. 시스템 상태 확인 및 인스턴스 상태 확인을 검토한 다음 문제가 해결되면 Retry(재시도) 작업을 선택할 수 있습니다.

스택 작업이 실패하고 Stack failure options(스택 실패 옵션) 메뉴에서 Preserve successfully provisioned resources(성공적으로 프로비저닝된 리소스 보존)를 지정한 경우 다음 옵션을 선택할 수 있습니다.

  • Retry(재시도) – 실패한 리소스에 대한 프로비저닝 작업을 재시도하고 스택 작업이 성공적으로 완료되거나 다음 오류가 발생할 때까지 템플릿 프로비저닝을 계속합니다. AWS Identity and Access Management(IAM) 권한과 같이 템플릿 수정이 필요하지 않은 문제로 인해 리소스 프로비저닝에 실패한 경우 이 옵션을 선택합니다.

  • Update(업데이트) – 프로비저닝된 리소스는 템플릿 업데이트 시 업데이트됩니다. 생성 또는 업데이트에 실패한 리소스는 재시도됩니다. 템플릿 오류로 인해 리소스 프로비저닝에 실패하고 템플릿을 수정한 경우 이 옵션을 선택합니다. FAILED 상태인 스택을 업데이트할 때 스택 업데이트를 계속하려면 Stack failure options(스택 실패 옵션)에 대해 Preserve successfully provisioned resources(성공적으로 프로비저닝된 리소스 보존)를 선택해야 합니다.

  • Roll back(롤백) – CloudFormation은 스택을 마지막으로 알려진 안정 상태로 롤백합니다.

스택 롤백을 일시 중지하는 조건

스택에서 실패한 리소스의 롤백을 일시 중지하려면 다음 조건을 충족해야 합니다.

  • 스택 작업 중 Preserve successfully provisioned resources(성공적으로 프로비저닝된 리소스 보존) 파라미터를 지정해야 합니다. 롤백 동작에 대한 자세한 내용은 AWS CloudFormation 스택 옵션 설정 섹션을 참조하세요.

  • 스택 작업은 스택 상태가 CREATE_FAILED 또는 UPDATE_FAILED여야 합니다. 스택 상태에 대한 자세한 내용은 스택 상태 코드 섹션을 참조하세요.

참고

변경할 수 없는 업데이트 유형은 지원되지 않습니다.

성공적으로 프로비저닝된 리소스 보존(콘솔)

Create stack
스택 생성 작업 중 성공적으로 프로비저닝된 리소스 보존
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/cloudformation에서 AWS CloudFormation 콘솔을 엽니다.

  2. Create stack(스택 생성)을 선택한 다음 With new resources (standard)(새 리소스 사용(표준))를 선택합니다.

  3. Specify template(템플릿 지정) 페이지에서 다음 옵션 중 하나를 사용하여 스택 템플릿을 선택합니다.

    • 템플릿 준비 완료

    • 샘플 템플릿 사용

    • Application Composer에서 빌드

    설정을 수락하고 Next(다음)를 선택합니다.

  4. Specify stack details(스택 세부 정보 지정) 페이지의 Stack name(스택 이름) 상자에 스택 이름을 입력합니다.

  5. Parameters(파라미터) 섹션에서 스택 템플릿에 정의된 파라미터를 지정합니다.

    기본값을 사용하여 파라미터를 사용하거나 변경할 수 있습니다.

  6. 파라미터 값에 만족하면 Next(다음)를 선택합니다.

  7. Configure stack options(스택 옵션 구성) 페이지에서 스택에 대한 추가 옵션을 설정할 수 있습니다.

  8. Stack failure options(스택 실패 옵션)에서 Preserve successfully provisioned resources(성공적으로 프로비저닝된 리소스 보존)를 선택합니다.

  9. 스택 옵션에 만족하면 Next(다음)를 선택합니다.

  10. Review(검토) 페이지에서 스택을 검토하고 Create stack(스택 생성)을 선택합니다.

결과: 생성에 실패한 리소스는 스택 작업이 실패할 때 스택이 롤백되지 않도록 스택 상태를 CREATE_FAILED로 전환합니다. 성공적으로 프로비저닝된 리소스는 CREATE_COMPLETE 상태입니다. Stack events(스택 이벤트) 탭에서 스택을 모니터링할 수 있습니다.

Update stack
스택 업데이트 작업 중 성공적으로 프로비저닝된 리소스 보존
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/cloudformation에서 AWS CloudFormation 콘솔을 엽니다.

  2. 업데이트할 스택을 선택하고 Update(업데이트)를 선택합니다.

  3. Update stack(스택 지정) 페이지에서 다음 옵션 중 하나를 사용하여 스택 템플릿을 선택합니다.

    • Use current template(현재 템플릿 사용)

    • Replace current template(현재 템플릿 교체)

    • Application Composer에서 템플릿 편집

    설정을 수락하고 Next(다음)를 선택합니다.

  4. Specify stack details(스택 세부 정보 지정) 페이지에서 스택 템플릿에 정의된 파라미터를 지정합니다.

    기본값을 사용하여 파라미터를 사용하거나 변경할 수 있습니다.

  5. 파라미터 값에 만족하면 Next(다음)를 선택합니다.

  6. Configure stack options(스택 옵션 구성) 페이지에서 스택에 대한 추가 옵션을 설정할 수 있습니다.

  7. Behavior on provisioning failure(프로비저닝 실패에 대한 동작)에서 Preserve successfully provisioned resources(성공적으로 프로비저닝된 리소스 보존)를 선택합니다.

  8. 스택 옵션에 만족하면 Next(다음)를 선택합니다.

  9. Review(검토) 페이지에서 스택을 검토하고 Update stack(스택 업데이트)을 선택합니다.

결과: 업데이트에 실패한 리소스는 스택 상태를 UPDATE_FAILED로 전환하고 마지막으로 알려진 안정 상태로 롤백합니다. 마지막으로 알려진 안정 상태가 없는 리소스는 다음 스택 작업 시 CloudFormation에 의해 삭제됩니다. 성공적으로 프로비저닝된 리소스는 CREATE_COMPLETE 또는 UPDATE_COMPLETE 상태입니다. Stack events(스택 이벤트) 탭에서 스택을 모니터링할 수 있습니다.

Change set
참고

CREATE_FAILED 또는 UPDATE_FAILED 상태의 스택에 대해 변경 세트를 시작할 수 있지만 UPDATE_ROLLBACK_FAILED 상태의 스택에 대해 변경 세트를 시작할 수 없습니다.

변경 세트 작업 중 성공적으로 프로비저닝된 리소스 보존
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/cloudformation에서 AWS CloudFormation 콘솔을 엽니다.

  2. 시작하려는 변경 세트가 포함된 스택을 선택한 다음 Change sets(변경 세트) 탭을 선택합니다.

  3. 변경 세트를 선택한 다음 Execute(실행)를 선택합니다.

  4. Execute change set(변경 세트 실행)에서 Preserve successfully provisioned resources(성공적으로 프로비저닝된 리소스 보존) 옵션을 선택합니다.

  5. Execute change set(변경 세트 실행)를 선택합니다.

결과: 업데이트에 실패한 리소스는 스택 상태를 UPDATE_FAILED로 전환하고 마지막으로 알려진 안정 상태로 롤백합니다. 마지막으로 알려진 안정 상태가 없는 리소스는 다음 스택 작업 시 CloudFormation에 의해 삭제됩니다. 성공적으로 프로비저닝된 리소스는 CREATE_COMPLETE 또는 UPDATE_COMPLETE 상태입니다. Stack events(스택 이벤트) 탭에서 스택을 모니터링할 수 있습니다.

성공적으로 프로비저닝된 리소스 보존(AWS CLI)

Create stack
스택 생성 작업 중 성공적으로 프로비저닝된 리소스 보존

create-stack 작업 중 --disable-rollback 옵션이나 on-failure DO_NOTHING 열거를 선택합니다.

  1. --disable-rollback 옵션을 사용하여 create-stack 명령에 스택 이름과 템플릿을 제공합니다.

    aws cloudformation create-stack --stack-name myteststack --template-body file://DOC-EXAMPLE-BUCKET.json --disable-rollback

    명령은 다음 출력을 반환합니다.

    {
        "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
    }
  2. describe-stacks 명령을 사용하여 스택의 상태를 설명합니다.

    aws cloudformation describe-stacks --stack-name myteststack

    명령은 다음 출력을 반환합니다.

    {
        "Stacks":  [
            {
                "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
                "Description": "AWS CloudFormation Sample Template",
                "Tags": [],
                "Outputs": [],
                "StackStatusReason": “The following resource(s) failed to create: [MyBucket]”,
                "CreationTime": "2013-08-23T01:02:15.422Z",
                "Capabilities": [],
                "StackName": "myteststack",
                "StackStatus": "CREATE_FAILED",
                "DisableRollback": true
            }
        ]
    }
Update stack
스택 업데이트 작업 중 성공적으로 프로비저닝된 리소스 보존
  1. --disable-rollback 옵션을 사용하여 update-stack 명령에 기존 스택 이름과 템플릿을 제공합니다.

    aws cloudformation update-stack --stack-name myteststack --template-url DOC-EXAMPLE-BUCKET.template --disable-rollback

    명령은 다음 출력을 반환합니다.

    {
        "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
    }
  2. describe-stacks 또는 describe-stack-events 명령을 사용하여 스택의 상태를 설명합니다.

    aws cloudformation describe-stacks --stack-name myteststack

    명령은 다음 출력을 반환합니다.

    {
        "Stacks":  [
            {
                "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
                "Description": "AWS CloudFormation Sample Template",
                "Tags": [],
                "Outputs": [],
                "CreationTime": "2013-08-23T01:02:15.422Z",
                "Capabilities": [],
                "StackName": "myteststack",
                "StackStatus": "UPDATE_COMPLETE",
                "DisableRollback": true
            }
        ]
    }
Change set
참고

CREATE_FAILED 또는 UPDATE_FAILED 상태의 스택에 대해 변경 세트를 시작할 수 있지만 UPDATE_ROLLBACK_FAILED 상태의 스택에 대해 변경 세트를 시작할 수 없습니다.

변경 세트 작업 중 성공적으로 프로비저닝된 리소스 보존

execute-change-set 작업 중 --disable-rollback 옵션을 지정합니다.

  1. --disable-rollback 옵션을 사용하여 execute-change-set 명령에 스택 이름과 템플릿을 제공합니다.

    aws cloudformation execute-change-set --stack-name myteststack --change-set-name my-change-set --template-body file://template.yaml

    명령은 다음 출력을 반환합니다.

    {
     "Id": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/my-change-set/bc9555ba-a949-xmpl-bfb8-f41d04ec5784",
     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
    }
  2. --disable-rollback 옵션으로 변경 세트를 시작합니다.

    aws cloudformation execute-change-set --stack-name myteststack --change-set-name my-change-set -–disable-rollback
  3. describe-stacks 또는 describe-stack-events 명령을 사용하여 스택의 상태를 결정합니다.

    { "StackEvents": [ { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896", "EventId": "49c966a0-7b74-11ea-8071-024244bb0672", "StackName": "myteststack", "LogicalResourceId": " MyBucket", "PhysicalResourceId": "MyBucket", "ResourceType": "AWS::S3::Bucket", "Timestamp": "2020-04-10T21:43:17.015Z", "ResourceStatus": "UPDATE_FAILED" "ResourceStatusReason": "User XYZ is not allowed to perform S3::UpdateBucket on MyBucket" } }
  4. 권한 오류를 수정하고 작업을 다시 시도합니다.

    aws cloudformation update-stack --stack-name myteststack --use-previous-template --disable-rollback

    명령은 다음 출력을 반환합니다.

    {
        "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
    }
  5. describe-stacks 또는 describe-stack-events 명령을 사용하여 스택의 상태를 설명합니다.

    aws cloudformation describe-stacks --stack-name myteststack

    명령은 다음 출력을 반환합니다.

    {
        "Stacks":  [
            {
                "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
                "Description": "AWS CloudFormation Sample Template",
                "Tags": [],
                "Outputs": [],
                "CreationTime": "2013-08-23T01:02:15.422Z",
                "Capabilities": [],
                "StackName": "myteststack",
                "StackStatus": "UPDATE_COMPLETE",
                "DisableRollback": true
            }
        ]
    }

스택 롤백

CREATE_FAILED 또는 UPDATE_FAILED 스택 상태에서 스택 롤백

스택을 마지막 안정 상태로 롤백하려면 rollback-stack 명령을 사용합니다.

  • rollback-stack 명령으로 롤백을 시작하고 스택 이름을 지정합니다.

    aws cloudformation rollback-stack --stack-name myteststack

    명령은 다음 출력을 반환합니다.

    {
        "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
    }
참고

rollback-stack 작업은 마지막으로 알려진 안정 상태가 없는 스택을 삭제합니다.