如何解决 AWS CloudFormation 中的错误“此模板不包含任何可导入的资源”?

2 分钟阅读
0

我在 AWS CloudFormation 控制台中收到以下错误:“此模板不包含任何可导入的资源。了解更多。”

简短描述

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

在包含以下任何内容的场景中使用 AWS CloudFormation 控制台时,则会发生此错误:

  • 条件资源。 正在导入的资源具有与计算结果为 false 的条件关联的条件键。
  • AWS Serverless Application Model (AWS SAM) 模板。 导入资源时,AWS CloudFormation 控制台不支持“转换”部分。无法通过使用 AWS::Serverless 转换的模板导入资源。
  • Fn::Transform。 AWS CloudFormation 控制台不支持在导入资源时使用内置函数 Fn::Transform

要解决此模版错误,可使用以下 AWS Command Line Interface (AWS CLI) 代替 AWS CloudFormation 控制台:

  • 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,用 CloudFormation 模版文件名称替换 template.yaml。上述命令会返回变更集的 Amazon Resource Name (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.    (可选)要验证模板中的所有属性是否与您的资源相匹配,请对资源使用偏差检测


相关信息

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

支持导入和偏差检测操作的资源

AWS 官方
AWS 官方已更新 2 年前