AWS CloudFormation에서 "This template does not include any resources to import" 오류를 해결하려면 어떻게 해야 합니까?

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

AWS CloudFormation 콘솔에서 "This template does not include any resources to import. Learn more."라는 오류가 표시되었습니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

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

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

  • 조건부 리소스. 보유 중인 AWS CloudFormation 템플릿은 조건부 리소스를 제외하거나 특정 조건에 부합하지 않는 리소스를 제외합니다. 리소스를 조정하여 조건에 부합하도록 하세요. 그런 다음, 이제 조건에 부합하게 되었으니 템플릿을 업데이트하여 리소스를 포함하도록 합니다. 다만 AWS CloudFormation 콘솔은 가져온 리소스와 그 식별자를 취합하는 데 GetTemplateSummary API를 사용하므로 업데이트된 템플릿에서 조건에 부합하는지 여부를 인식하지 못합니다.
  • AWS Serverless Application Model(AWS SAM) 템플릿. AWS SAM 템플릿은 AWS::Serverless transform("Transform: AWS::Serverless-2016-10-31")을 사용하는 리소스를 가져오는 기능을 지원하지 않습니다.
  • Fn::Transform. AWS CloudFormation은 리소스를 가져올 때 템플릿을 사용하는 스택 업데이트에 대해 Fn::Transform이라는 내장 함수 사용을 지원하지 않습니다.

이 오류를 해결하려면 AWS CloudFormation 콘솔 대신 AWS 명령줄 인터페이스(AWS CLI)를 사용할 수 있습니다. 해당 가져오기 작업이 Fn::Transform 함수나 AWS::Serverless 리소스를 직접적으로 사용하는 리소스에 영향을 미치지 않는 경우에만 AWS CLI를 사용하세요.

AWS CLI는 가져온 리소스의 식별자를 검색하는 데 GetTemplateSummary를 사용하지 않습니다. 대신, AWS CLI에서는 사용자가 AWS CloudFormation API create-change-setexecute-change-set를 사용해 가져온 리소스를 명시적으로 제공해야 합니다.

해결 방법

다음과 같은 경우에서는 Amazon Elastic Container Service(Amazon ECS) 클러스터를 AWS CloudFormation 스택으로 가져왔습니다.

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

앞선 상황에서 발생한 오류를 해결하려면 다음과 같은 단계를 거쳐야 합니다.

참고: 스택이 기본 AWS 리전이 아닌 경우, 명령에 --region을 추가하거나, AWS_DEFAULT_REGION 환경 변수를 설정하여 내보냄으로써 기본 리전을 변경해야 할 수 있습니다.

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

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

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

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)

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

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

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

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

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

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

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


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

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?