【问题标题】:AWS cloudformation optional lineAWS cloudformation 可选线
【发布时间】:2014-11-25 17:11:31
【问题描述】:

我正在尝试设置一个 cloudformation 模板,该模板将启动一个干净的实例或从快照启动一个。我希望能够使用 if / else 类型语句,这样看起来就像

pseudo code:
if InputSnapshotId:
    "SnapshotId" : {"Ref" : "InputSnapshotId"},
else:
    "Size" : 20,

在 cloudformation 中,我尝试了很多方法,例如:

"WebserverInstanceDataVolume" : {
  "Type" : "AWS::EC2::Volume",
  "Properties" : {
    "Fn::If" : [
      {"Ref" : "FromSnapshot"},
      {"SnapshotId" : { "Ref" : "InputSnapshotId" }},
      {"Size" : "20"}
    ],
    "VolumeType" : "standard",
    "AvailabilityZone" : { "Fn::GetAtt" : [ "WebserverInstance", "AvailabilityZone" ]},
    "Tags" : [
      {"Key" : "Role", "Value": "data" },
    ]
  },
  "DeletionPolicy" : "Delete"
},

或者将 in Fn::If 包裹在 {}:

    {"Fn::If" : [
      {"Ref" : "FromSnapshot"},
      {"SnapshotId" : { "Ref" : "InputSnapshotId" }},
      {"Size" : "20"}
    ]}

所有这些都会引发不同的类型或错误。第一个在 cloudformation 中给出“遇到不支持的属性 Fn::If”,第二个是无效的 JSON。我可以对一个空卷进行快照并定义一个大小参数,然后始终传递一个 SnapshotId 和大小,但我觉得必须有一种方法可以在 cloudformation 中有一个可选行。

有什么想法吗?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    你可以这样做:

     "Conditions" : {
        "NotUseSnapshot" : {"Fn::Equals" : [{"Ref" : "InputSnapshotId"}, ""]}
      }, 
    
      "Resources" : {
        "WebserverInstanceDataVolume" : {
          "Type" : "AWS::EC2::Volume",
          "Properties" : {
            "Size" : {
                "Fn::If" : [
                    "NotUseSnapshot",
                    "20",
                    {"Ref" : "AWS::NoValue"}
                ]
            },
            "SnapshotId" : {
                "Fn::If" : [
                    "NotUseSnapshot",
                    {"Ref" : "AWS::NoValue"},
                    {"Ref" : "InputSnapshotId"}
                ]
            },
            "VolumeType" : "standard",
            "AvailabilityZone" : { "Fn::GetAtt" : [ "WebserverInstance", "AvailabilityZone" ]},
            "Tags" : [
              {"Key" : "Role", "Value": "data" }
            ]
          },
          "DeletionPolicy" : "Delete"
        }
      }
    

    这是一个功能模板的链接:https://github.com/caussourd/public-cloudformation-templates/blob/master/conditional_volume_creation.template

    【讨论】:

    • 完美,我没有意识到我可以将输入定义为 AWS::NoValue,谢谢。
    猜你喜欢
    • 2016-12-23
    • 2019-07-02
    • 2015-06-25
    • 2021-12-28
    • 1970-01-01
    • 2019-03-29
    • 2020-11-06
    • 2018-05-08
    • 2018-08-24
    相关资源
    最近更新 更多