CloudFormation에서 스택을 생성하거나 업데이트하려고 할 때 "Internal Failure" 오류를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 4월 5일

AWS CloudFormation에서 "Internal Failure" 오류를 해결하고 싶습니다.

간략한 설명

CloudFormation 스택을 생성하거나 업데이트할 때 리소스에 대한 작업이 실패하면 "Internal Failure" 오류가 발생할 수 있습니다. 스택 배포가 실패하는 경우에도 이 오류가 나타날 수 있습니다.

다음과 같은 경우에 리소스에 대한 작업이 실패할 수 있습니다.

  • 리소스 또는 속성이 잘못된 값으로 설정되었습니다. 이 문제를 해결하려면 테스트 스택을 배포하여 리소스 또는 속성의 잘못된 값 찾기 섹션의 단계를 따라 완료하세요.
  • 내부 워크플로가 실패했습니다. AWS CloudTrail을 사용하여 이 문제를 해결하려면 CloudTrail 이벤트 로그에서 실패한 API 작업 찾기 섹션의 단계를 수행하세요.

마지막으로 CloudFormation 템플릿의 출력 섹션에 잘못된 값을 전달하면 스택이 배포되지 못할 수 있습니다. 이 오류를 해결하려면 CloudFormation 템플릿의 출력 섹션에서 값 확인 섹션의 단계를 수행하세요.

참고: 다음 단계는 CloudFormation에서 스택을 생성하거나 업데이트하려고 할 때 나타나는 "Internal Failure" 오류에만 적용됩니다.

해결 방법

테스트 스택을 배포하여 리소스 또는 속성의 잘못된 값 찾기

리소스 속성의 잘못된 값을 찾으려면 실패한 리소스만 포함된 CloudFormation 템플릿으로 테스트 스택을 배포합니다.

테스트 스택이 배포되면 CloudTrail 이벤트 로그에서 실패한 API 작업 찾기 섹션의 단계를 수행하세요.

테스트 스택이 배포되지 않으면 잘못된 값을 찾을 때까지 테스트 스택에서 불필요한 속성을 제거합니다.

다음 예제 시나리오에서는 CloudFormation이 AWS Config로 AWS::Config::ConformancePack 리소스를 생성하려고 할 때 "Internal Failure" 오류가 발생합니다. 오류가 발생하는 이유는 DeliveryS3Bucket 속성이 잘못된 구문을 사용하기 때문입니다. DeliveryS3Bucket 속성은 버킷 이름만 값으로 허용합니다(예: bucketname). 버킷 이름을 포함하는 파일 경로는 허용되는 값이 아닙니다(예: s3://bucketname).

AWSTemplateFormatVersion: 2010-09-09
Resources:
  CloudFormationCanaryPack:
    Type: AWS::Config::ConformancePack
    Properties:
      ConformancePackName: ConformancePackName
      DeliveryS3Bucket: s3://bucketname            # Incorrect value for DeliveryS3Bucket
      TemplateS3Uri: s3://bucketname/prefix

CloudTrail 이벤트 로그에서 실패한 API 작업 찾기

1.    CloudTrail 콘솔을 엽니다.

2.    탐색 창에서 [이벤트 기록]을 선택합니다.

3.    시간 범위(Time range)에 실패한 API 호출을 분리하기 위한 시간 범위를 입력하고 적용(Apply)을 선택합니다.

팁: 시작(From) 시간에 CloudFormation 스택에서 리소스가 CREATE_IN_PROGRESS 또는 UPDATE_IN_PROGRESS 상태로 변경된 시점을 입력합니다. 종료(To) 시간에는 API 호출이 실패한 시간을 입력합니다.

4.    이벤트 기록(Event history)에서 기본적으로 표시되는 이벤트보다 많이 검색하려면 속성 필터를 사용합니다.

참고: 기본적으로 이벤트 기록(Event history)에서는 false로 설정된 읽기 전용 필터를 사용합니다. 읽기 전용 필터 결과는 API 활동에 대한 쓰기 이벤트만 표시하고 표시된 이벤트 목록에서 읽기 전용 이벤트를 제외합니다.

EventName을 사용하여 반환된 이벤트의 이름을 기준으로 필터링할 수 있습니다. 리소스를 생성하거나 업데이트하는 데 사용되는 API 작업을 알고 있는 경우 특정 API 호출에 대해서만 EventName 필터를 사용할 수 있습니다. 예를 들어, CloudFormation 스택은 AWS::Config::ConformancePack 리소스를 생성할 때 AWS Config API 작업인 PutConformancePack을 사용합니다. 즉, PutConformancePack API에 대해서만 필터링할 수 있습니다. EventSource를 사용하여 API 요청을 수행한 AWS 서비스로 필터링할 수 있습니다. 즉, 이벤트 소스 목록을 스크롤하여 CloudFormation 템플릿에 사용되는 적절한 리소스를 선택할 수 있습니다.

5.    실패의 근본 원인을 찾으려면 반환된 이벤트의 오류 메시지를 검토하세요.

참고: 일부 API 작업은 실패하면 원래 CloudFormation 템플릿을 업데이트하고 테스트 배포를 수행하여 오류가 해결되었는지 확인해야 합니다.

CloudFormation 템플릿의 출력 섹션에서 값 확인

CloudFormation 템플릿에서 출력 섹션의 값에 구문 오류가 없도록 합니다. 예를 들어 후행 공백을 제거합니다.

동적 참조로 리소스 속성을 검색하려면 스택 배포 시 해당 속성을 사용할 수 있는지 확인해야 합니다. CloudFormation 외부에서 이를 시뮬레이션하려면 다음을 수행합니다.

1.    실패한 속성을 포함한 리소스 유형에 대한 API 호출을 생성*하거나 업데이트*합니다(생성 또는 수정).

2.    스택 생성 또는 업데이트 프로세스에서 Describe* API 호출로 리소스의 현재 속성을 검색합니다.

다음 예제 시나리오에서는 AWS::DMS::ReplicationInstance 리소스의 ReplicationInstancePrivateIpAddresses 속성이 [출력]에 전달되었을 때 스택에서 반환하는 내부 오류를 보여줍니다.

다음 예제에서 인스턴스의 프라이빗 IP 속성은 ReplicationInstance 리소스가 사용 가능 상태로 변경된 후부터 사용할 수 있습니다. 스택이 출력을 처리할 시점에 ReplicationInstance 리소스가 사용 가능 상태가 아닐 경우 CloudFormation이 프라이빗 IP 속성을 검색하지 못합니다. 그러면 배포가 실패합니다.

AWSTemplateFormatVersion: 2010-09-09
Resources:
  BasicReplicationInstance:
    Type: AWS::DMS::ReplicationInstance
    Properties:
      ReplicationInstanceClass: dms.t2.small
Outputs:
  DmsInstanceIP:
    Value: !GetAtt BasicReplicationInstance.ReplicationInstancePrivateIpAddresses

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


결제 또는 기술 지원이 필요하세요?