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

上次更新时间:2020 年 6 月 26 日

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

简短描述

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

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

  • 条件资源。 您有一个 AWS CloudFormation 模板,其中不包含条件资源或未满足某些条件的资源。您对资源进行调整,以便满足条件。然后,在满足条件的情况下,更新模板以包括资源。但是,使用 GetTemplateSummary API 收集导入的资源及其标识符的 AWS CloudFormation 控制台无法识别更新模板是否满足条件。
  • AWS Serverless Application Model (AWS SAM) 模板。 AWS SAM 模板不支持使用 AWS::Serverless transform ("Transform: AWS::Serverless-2016-10-31") 导入资源的功能。
  • Fn::Transform. AWS CloudFormation 控制台不支持将内部函数 Fn::Transform 用于使用模板导入资源的堆栈更新。

要解决此错误,可使用 AWS 命令行界面 (AWS CLI) 代替 AWS CloudFormation 控制台。仅在导入不会直接影响使用 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,并用 AWS CloudFormation 模板文件名称替换 template.yaml

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.    (可选)要验证模板中的所有属性是否与您的资源相匹配,请对资源使用偏差检测


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?