【问题标题】:How to create AWS ECS cluster via AWS Cloudformation only if it DOES NOT exists仅当 AWS Cloudformation 不存在时,如何通过它创建 AWS ECS 集群
【发布时间】:2019-03-02 10:51:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: json amazon-web-services amazon-cloudformation amazon-ecs


    【解决方案1】:

    您只能根据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重写模板,检查集群是否存在,如果存在则移除资源定义。

    【讨论】:

    • 天哪!我希望有一种更简单的方法来做到这一点。谢谢@斯蒂芬
    猜你喜欢
    • 2017-11-02
    • 2018-08-23
    • 1970-01-01
    • 2013-03-21
    • 2015-08-23
    • 2020-12-15
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多