首页 > 解决方案 > 仅当 AWS Cloudformation 不存在时,如何通过它创建 AWS ECS 集群

问题描述

我在 .json 中指定以下代码块以通过 AWS cloudformation 创建集群。

"MyCluster": {
      "Type" : "AWS::ECS::Cluster",
      "Properties" : {
      "ClusterName" : {
          "Ref": "EcsCluster"
        }
    }   
}

如果具有特定名称的集群已经存在,我想提供一个异常条件来忽略集群创建。任何帮助将不胜感激。

标签: jsonamazon-web-servicesamazon-cloudformationamazon-ecs

解决方案


您只能根据Conditions值有条件地创建资源,并且所有条件都在模板的“开始时间”进行评估,并且仅基于对输入参数的简单字符串和逻辑运算。所以你不能做任何事情,比如使用自定义资源来检查集群是否已经存在,如果存在则跳过创建它。

您可以使用自定义资源来修改堆栈创建的 ECS 集群的名称,检查您的首选名称是否已被“采用”,如果是,则返回一个不同的、不冲突的名称。

如果您需要完全消除资源,您需要添加一个参数来打开或关闭它:

AWSTemplateFormatVersion: "2010-09-09"

Parameters:
    CreateCluster:
        Type: "String"
        Description: "Whether to create the ECS Cluster"
        AllowedValues: [ "true", "false" ]
        Default: "false"
...

Conditions:
    CreateCluster: { "Fn::Equals": [ { Ref: "CreateCluster" }, "true" ] }

....

Resources:
    MyCluster:
        Type: "AWS::ECS::Cluster"
        Properties:
            ClusterName: { Ref: "EcsCluster" }
       Condition: "CreateCluster"

或者你需要使用Transform重写模板,检查集群是否存在,如果存在则移除资源定义。


推荐阅读