CloudFormation에서 ‘XYZ라는 이름의 내보내기를 찾을 수 없습니다’ 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 10월 6일

스택에서 Fn::ImportValue를 사용할 때 AWS CloudFormation에서 “XYZ라는 내보내기를 찾을 수 없음” 오류가 수신됩니다.

간략한 설명

CloudFormation에서 가져오기 또는 내보내기 값을 사용하는 스택 참조를 생성하는 경우 다음을 수행해야 합니다.

  • Export: 플래그를 값을 내보내는 스택에서 CloudFormation 템플릿의 Outputs 섹션에 사용합니다.
  • 내보낸 값을 참조하려는 스택에서 Fn::ImportValue를 사용합니다.

다음과 같은 시나리오에서 "No Export named XYX found" 오류가 발생할 수 있습니다.

  • 중첩 스택에서 Fn::ImportValue를 사용합니다.
  • 내보낸 값이 값을 가져오는 것과 동일한 AWS 리전 또는 AWS 계정에 있지 않은 경우
  • 내보낸 값을 스택에서 가져오기 전에 해당 값이 생성되거나 게시되지 않는 경우
  • 가져오기 스택에서 잘못된 내보내기 이름을 사용했습니다.

해당하는 시나리오에 따라 다음 해결 방법 중 하나를 선택하십시오.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

중첩 스택에서 Fn::ImportValue를 사용 중인 경우

기본적으로 중첩 스택을 사용하는 경우 CloudFormation은 하위 스택을 병렬로 생성합니다. 하위 스택이 서로 병렬로 생성되고 한 스택이 다른 스택에서 출력을 가져오는 경우 스택 생성이 실패할 수 있습니다. 다른 하위 스택에서 가져올 때 내보내기 값을 제때에 사용하지 못할 위험이 있습니다.

문제를 해결하려면 DependsOn 속성을 사용하여 Fn::ImportValue를 사용하는 스택에 대한 명시적 종속성을 생성합니다. 그러면 Fn:ImportValue를 사용하는 자식 스택은 값을 내보내는 자식 스택 이후에만 생성됩니다.

다음의 중첩 스택 예시에서 ChildStack01Outputs 섹션의 값을 내보내며 ChildStack02Fn::ImportValue를 사용하여 ChildStack01의 값을 가져옵니다. 다음 YAML 양식 예제와 같이 DependsOnChildStack02에 사용할 수 있습니다.

AWSTemplateFormatVersion: 2010-09-09
Resources:
 ChildStack01:
   Type: 'AWS::CloudFormation::Stack'
   Properties:
     TemplateURL: 'https://s3.amazonaws.com/cloudformation-templates-us-east-1/VPC.template'
     TimeoutInMinutes: '60'
 ChildStack02:
   Type: 'AWS::CloudFormation::Stack'
   DependsOn: ChildStack01
   Properties:
     TemplateURL: 'https://s3.amazonaws.com/cloudformation-templates-us-east-1/Subnet.template'
     TimeoutInMinutes: '60'

팁: 교차 스택 참조의 경우 Fn::ImportValue를 사용하여 다른 템플릿에서 값을 가져옵니다. 중첩 스택의 경우 Fn::RefFn::GetAtt를 사용하여 현재 템플릿의 값을 참조합니다.

내보낸 값이 값을 가져오는 것과 동일한 AWS 리전 또는 계정에 있지 않은 경우

교차 스택 참조는 단일 계정 및 리전 내에서만 적용됩니다. 동일한 계정 및 리전에 있는 다른 스택은 내보낸 값만 가져올 수 있습니다.

이 문제를 해결하려면 Fn::ImportValue를 사용하여 스택을 생성하기 전에 내보내기 및 가져오기 스택의 스택 구성 확인 섹션의 단계를 완료하십시오.

내보낸 값을 스택에서 가져오기 전에 해당 값이 생성되거나 게시되지 않는 경우

비중첩 스택의 경우 값을 내보내는 스택을 배포해야 합니다. 가져올 스택을 생성하기 전에 스택은 Create_Complete 또는 Update_Complete 상태여야 합니다.

이 문제를 해결하려면 Fn::ImportValue를 사용하여 스택을 생성하기 전에 내보내기 및 가져오기 스택의 스택 구성 확인 섹션의 단계를 완료하십시오.

가져오기 스택에서 잘못된 내보내기 이름을 사용함

  1. 내보내기 이름이 계정에 나열되어 있는지 확인합니다.
  2. 한 스택에서 다른 스택으로 내보내기 이름을 가져올 때 두 스택 모두에서 정확히 동일한 내보내기 이름을 사용하고 있는지 확인합니다.
  3. Fn::ImportValue를 사용하여 스택을 생성하기 전에 내보내기 및 가져오기 스택의 스택 구성 확인 섹션의 단계를 완료하십시오.

내보내기 및 가져오기 스택의 스택 구성 확인

CloudFormation 콘솔 또는 AWS CLI를 사용하여 내보내기 값이 동일한 리전 및 계정에 있는지 확인할 수 있습니다.

CloudFormation 콘솔 사용:

  1. CloudFormation 콘솔을 엽니다.
  2. 탐색 창에서 [내보내기]를 선택합니다.
  3. 내보내기 값이 콘솔에 나열되는지 확인합니다.

AWS CLI 사용:

1.    다음 명령을 실행하여 사용 가능한 내보내기를 나열합니다.

aws cloudformation list-exports --region us-east-1

참고: us-east-1을 해당하는 리전으로 바꾸십시오.

2.    출력에서 Name 속성이 가져오기 및 내보내기 스택에 대해 동일한지 확인합니다. 다음과 유사하게 출력됩니다.

aws cloudformation list-exports --region us-east-1 --output yaml
Exports:
- ExportingStackId: arn:aws:cloudformation:us-east-1:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800
  Name: private-vpc-subnet-a
  Value: subnet-01a234bcdefghij56

중요: 스택으로 값 가져오기 및 내보내기를 사용하는 경우 다음 사항을 고려하십시오. 스택으로 출력 값을 가져온 후에는 해당 출력 값을 내보내는 스택을 삭제하거나 내보낸 출력 값을 수정할 수 없습니다. 내보내기 스택을 삭제하거나 출력 값을 수정하려면 먼저 모든 가져오기를 제거해야 합니다. 내보내기 이름은 리전 내에서 고유해야 합니다. 이 문제를 해결하려면 CloudFormation 스택 간에 값을 공유하도록 하려면 AWS Systems Manager Parameter Store에서 파라미터를 사용해야 합니다.


이 문서가 도움이 되었나요?


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