我想解决 AWS CloudFormation 控制台中的以下错误: "This template does not include any resources to import.Learn more."
简短描述
如果您使用 CloudFormation 控制台将资源导入到在 CloudFormation 之外创建的现有堆栈中,您就会收到此错误。
在以下情况下使用 CloudFormation 控制台时,可能会出现此错误:
要解决条件式资源的错误,对于要导入的资源,条件键下指定的条件必须评估为 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 以更改默认区域。
要导入资源,请完成以下步骤:
-
创建一个名为 import.txt 的资源导入文件:
[
{
"ResourceType": "AWS::ECS::Cluster",
"LogicalResourceId":
"ECSCluster2"
,
"ResourceIdentifier": {
"ClusterName":"Cluster2"
}
}
]
-
要针对您的堆栈创建一个更改集,请运行 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。
-
(可选)要等待成功创建更改集,请运行 change-set-create-complete 命令:
aws cloudformation wait change-set-create-complete --change-set-name ${ID}
-
使用 AWS CloudFormation 控制台查看更改集。或者,运行 describe-change-set 命令:
aws cloudformation describe-change-set --change-set-name ${ID}
-
要应用更改集并将资源导入堆栈,请运行 execute-change-set 命令:
aws cloudformation execute-change-set --change-set-name ${ID}
-
(可选)要验证模板中的所有属性是否与您的资源相匹配,请对资源使用偏差检测。
相关信息
使用 AWS CLI 将现有资源导入到堆栈
资源类型支持