AWS CloudFormation에서 "XYZ라는 내보내기를 찾을 수 없음" 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 6월 12일

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

간략한 설명

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

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

이 오류는 다음 시나리오에서 발생할 수 있습니다.

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

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

해결 방법

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

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

오류를 해결하려면 DependsOn 속성을 사용하여 내보낸 출력과 함께 스택의 Fn::ImportValue를 사용하는 스택에 대한 명시적 종속성을 생성합니다.

예를 들어 다음 중첩 스택을 참조하세요. ChildStack01Outputs 섹션의 값을 내보내며 ChildStack02Fn::ImportValue를 사용하여 ChildStack01의 값을 가져옵니다. 다음 예제와 같이 ChildStack02DependsOn을 사용할 수 있습니다.

{   "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 리전 또는 계정에 있지 않은 경우

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

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

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

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

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

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

1.    내보내기 이름이 AWS 계정에 나열되어 있는지 확인합니다.

2.    한 스택에서 다른 스택으로 내보내기 이름을 가져올 때 두 스택 모두에서 정확히 동일한 내보내기 이름을 사용하고 있는지 확인합니다.

3.    Fn::ImportValue를 사용하여 스택을 생성하기 전에 내보내기 및 가져오기 스택의 스택 구성 확인 섹션의 단계를 완료하세요.

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

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

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

CloudFormation 콘솔 사용:

1.    CloudFormation 콘솔을 엽니다.

2.    탐색 창에서 [내보내기]를 선택합니다.

3.    내보내기 값이 콘솔에 나열되는지 확인합니다.

AWS CLI 사용:

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

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

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

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

{
    "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"
        }
}

중요: 스택으로 값 가져오기 및 내보내기를 사용하는 경우 다음 사항을 고려하세요. 스택으로 출력 값을 가져온 후에는 해당 출력 값을 내보내는 스택을 삭제하거나 내보낸 출력 값을 수정할 수 없습니다. 내보내기 스택을 삭제하거나 출력 값을 수정하려면 먼저 모든 가져오기를 제거해야 합니다. 내보내기 이름은 리전 내에서 고유해야 합니다.


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


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