AWS CloudFormation에서 "This template does not include any resources to import(이 템플릿에는 가져올 리소스가 없습니다)" 오류를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 3월 29일

AWS CloudFormation 콘솔에서 다음과 같은 오류가 표시되었습니다. "This template does not include any resources to import. Learn more."(이 템플릿에는 가져올 리소스가 없습니다. 자세히 알아보기)

간략한 설명

이 오류는 AWS CloudFormation 콘솔을 사용해 CloudFormation 외부에서 생성된 리소스를 기존 스택에 가져오려 할 때 발생합니다.

다음과 같은 상황에서 AWS CloudFormation 콘솔을 사용할 때 이 오류가 발생할 수 있습니다.

  • 조건부 리소스. 가져오는 리소스에 false로 평가되는 조건과 연결된 조건 키가 있습니다.
  • AWS Serverless Application Model(AWS SAM) 템플릿. AWS CloudFormation 콘솔은 리소스를 가져올 때 변환 섹션을 지원하지 않습니다. AWS::Serverless 변환을 사용하는 템플릿이 있는 리소스는 가져올 수 없습니다.
  • Fn::Transform. AWS CloudFormation 콘솔은 리소스를 가져올 때 내장 함수 Fn::Transform의 사용을 지원하지 않습니다.

이 오류를 해결하려면 AWS CloudFormation 콘솔 대신 AWS Command Line Interface(AWS CLI)를 사용할 수 있습니다.

  • AWS SAM
  • Fn::Transform

조건부 리소스에 대한 이 오류를 해결하려면 가져오는 리소스에 대하여 조건 키 아래에 지정된 조건이 true로 평가되어야 합니다.

AWS CLI에서는 CloudFormation 명령인 create-change-set을 사용하여 가져온 리소스를 명시적으로 제공해야 합니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인합니다.

해결 방법

다음 예에서는 AWS CLI를 사용하여 기존 AWS::ECS::Cluster 리소스를 CloudFormation 스택으로 가져옵니다.

Resources:
  ...
  ECSCluster2:
    Condition: MyCondition
    Type: AWS::ECS::Cluster
    DeletionPolicy: Retain
    Properties:
      ClusterName: Cluster2

참고: 다음 단계로 진행하기 전에 MyCondition 조건이 true로 평가되는지 확인하십시오.

AWS CLI를 사용하여 리소스를 가져오려면 다음 단계를 완료하십시오.

참고: 스택이 기본 AWS 리전이 아닌 경우, 명령에 --region을 추가하거나, AWS_DEFAULT_REGION 환경 변수를 설정하여 기본 리전을 변경합니다.

1.    import.txt라는 이름의 리소스 가져오기 파일을 생성합니다. 예:

[
    {
        "ResourceType": "AWS::ECS::Cluster",
        "LogicalResourceId":
            "ECSCluster2"
        ,
        "ResourceIdentifier": {
            "ClusterName":"Cluster2"
        }
    }
]

2.    스택에 대해 변경 설정을 생성하려면 다음과 같이 create-change-set 명령을 실행합니다.

ID=$(aws cloudformation create-change-set --stack-name testStack --change-set-name testSet --resources-to-import file://import.txt --change-set-type IMPORT --template-body file://template.yaml --capabilities CAPABILITY_AUTO_EXPAND  --query 'Id' --output text)

참고: testStack을 사용자의 스택 이름으로, template.yaml을 사용자 CloudFormation 템플릿 파일 이름으로 바꿉니다. 앞선 명령은 변경 설정의 Amazon 리소스 이름(ARN)을 반환하고 ARN을 환경 변수 ID에 저장합니다.

참고: 템플릿이 변환을 사용하는 경우에만 CAPABILITY_AUTO_EXPAND를 사용해야 합니다.

3.    (선택 사항) 변경 설정이 생성될 때까지 기다리면서 다음과 같은 명령을 실행합니다.

aws cloudformation wait change-set-create-complete --change-set-name ${ID}

4.    AWS CloudFormation 콘솔을 사용하여 변경 세트를 확인합니다. 또는 다음 describe-change-set 명령을 사용합니다.

aws cloudformation describe-change-set --change-set-name ${ID}

5.    변경 설정을 적용하고 리소스를 스택으로 가져오려면 다음과 같은 명령을 실행합니다.

aws cloudformation execute-change-set --change-set-name ${ID}

6.    (선택 사항) 템플릿의 모든 속성이 리소스와 일치하는지 확인하려면 리소스에서 드리프트 감지를 사용하세요.