AWS CloudFormation の「このテンプレートにはインポートするリソースが含まれていません」というエラーを解決する方法を教えてください。

最終更新日: 2020 年 6 月 26 日

AWS CloudFormation コンソールに「このテンプレートにはインポートするリソースが含まれていません。詳細をご確認ください」」というエラーが表示されます。 このエラーを解決するにはどうすればよいですか?

簡単な説明

このエラーは、AWS CloudFormation コンソールを使用して、AWS CloudFormation の外部で作成されたリソースを既存のスタックにインポートするときに発生します。

このエラーは、以下のいずれかのシナリオで AWS CloudFormation コンソールを使用する場合に発生することがあります。

  • 条件付きリソース。 条件付きリソース、または特定の条件を満たしていないリソースを除外する AWS CloudFormation テンプレートがあります。条件が満たされるように、リソースを調整します。次に、テンプレートを更新して、条件が満たされたリソースを含めます。ただし、GetTemplateSummary API を使用して、インポートされたリソースとその識別子を収集する AWS CloudFormation コンソールでは、更新されたテンプレートで条件が満たされているかどうかは認識されません。
  • AWS サーバーレスアプリケーションモデル (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 では、create-change-set および execute-change-set の AWS CloudFormation API を使用して、インポートされたリソースを明示的に指定する必要があります。

解決方法

次のシナリオでは、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.    (オプション) テンプレートのすべてのプロパティがリソースと一致することを確認するには、リソースでドリフト検出を使用します。