如何解决 AWS CloudFormation 中的“This template does not include any resources to import”错误?

2 分钟阅读
0

我想解决 AWS CloudFormation 控制台中的以下错误: "This template does not include any resources to import.Learn more."

简短描述

如果您使用 CloudFormation 控制台将资源导入到在 CloudFormation 之外创建的现有堆栈中,您就会收到此错误。

在以下情况下使用 CloudFormation 控制台时,可能会出现此错误:

  • 您要导入的资源具有一个条件键,该条件键与评估结果为 false 的条件关联。
  • 导入资源时,您可以使用内置函数 Fn::Transform 或转换模板部分,例如 AWS::ServerlessAWS::Include

要解决条件式资源的错误,对于要导入的资源,条件键下指定的条件必须评估为 true

要解决使用转换的模板的错误,请使用 AWS 命令行界面(AWS CLI)而不是 AWS CloudFormation 控制台。

AWS CLI 要求您为 CloudFormation 命令 create-change-set 明确提供导入的资源。

**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅 Troubleshoot AWS CLI errors。此外,确保您使用的是最新的 AWS CLI 版本

解决方法

以下示例使用 AWS CLI 将现有的 AWS::ECS::Cluster 资源导入到 CloudFormation 堆栈中:

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

**注意:**在继续执行后续步骤之前,请确保条件 MyCondition 的评估结果为 true

导入资源

**注意:**如果您的堆栈不在您的默认 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,用您的 CloudFormation 模板文件名替换 template.yaml。前面的命令返回更改集的 ARN,并将该 ARN 存储在环境变量 ID 中。

    如果您的模板使用转换,则必须使用 CAPABILITY_AUTO_EXPAND

  3. (可选)要等待成功创建更改集,请运行 change-set-create-complete 命令:

    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. 要应用更改集并将资源导入堆栈,请运行 execute-change-set 命令:

    aws cloudformation execute-change-set --change-set-name ${ID}
  6. (可选)要验证模板中的所有属性是否与您的资源相匹配,请对资源使用偏差检测

相关信息

使用 AWS CLI 将现有资源导入到堆栈

资源类型支持

AWS 官方
AWS 官方已更新 10 个月前