【问题标题】:AWS CloudFormation conditional taggingAWS CloudFormation 条件标记
【发布时间】:2016-12-29 02:51:09
【问题描述】:

我需要根据用户对停机时间参数的响应和地图中定义的环境值有条件地标记资源。这个标签稍后被 lambda 函数用来在晚上关闭实例。

我这样尝试过,但没有运气 -

条件 -

    "EnvCheck": {
        "Fn::Not": [
            {"Fn::Equals": [{"Ref": "EnvironmentType"}, "prod"]}
        ]
    },
    "EnableDowntimeTag": {
        "Fn::And": [
            {"Fn::Equals": [{"Ref": "CustodianDowntime"}, "true"]},
            {"Condition": "EnvCheck"}
        ]
    }

标签部分

    "Tags": [
                {
                    "Key": "OwnerContact",
                    "PropagateAtLaunch": "true",
                    "Value": {
                        "Ref": "OwnerContact"
                    }
                },
                {
                    "Condition" : "EnableDowntimeTag",
                    "Key": "custodian_downtime",
                    "PropagateAtLaunch": "true",
                    "Value": "Offhours tz=ET"
                }
            ],

知道如何添加条件标签吗?

谢谢!

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    不幸的是,我认为不可能有条件地添加标签。您可以做的最好的事情是使用条件来修改标签的数据 - 键或值或两者兼而有之。如果您修改了密钥,那么任何对预期标签密钥的自动搜索都不会找到具有修改后密钥的资源。但是你会留下不必要的标签。

    例如

    "Tags": [
        {
            "Key": "OwnerContact",
            "PropagateAtLaunch": "true",
            "Value": {
                "Ref": "OwnerContact"
            }
        },
        {
            "Key": { 
                "Fn::If" : [
                    "EnableDowntimeTag",
                    "custodian_downtime",
                    "no_custodian_downtime"
                ]
            },
            "PropagateAtLaunch": "true",
            "Value": { 
                "Fn::If" : [
                    "EnableDowntimeTag",
                    "Offhours tz=ET",
                    ""
                ]
            }
        }
    ],
    

    这样,如果条件EnableDowntimeTag 为真,则创建一个键为custodian_downtime 的标签,其值为Offhours tz=ET。

    如果条件不成立,则创建一个键为no_custodian_downtime 的标签,其值为空。

    如果您使用标签来识别自动化流程中的资源,这应该有助于它仅识别所需的资源 - 同时还为那些带有 no_custodian_downtime 标签的资源提供明确的参考,不需要停机 - 所以它可能会更有帮助。

    【讨论】:

    • 感谢您确认克里斯!我尝试了所有选项,包括您提供的选项。我犹豫使用这种方法的唯一原因是我不想在我的实例上添加不必要的标签,但目前看来,这是唯一的解决方案。
    • 请注意,虽然原始 Cloudformation 仍然无法实现,但引入 AWS CDK (docs.aws.amazon.com/cdk/latest/guide/home.html) 等工具可以更轻松地满足此类要求。
    【解决方案2】:

    我也有类似的需求,也不希望未使用的标签到处乱放。我已经使用以下 sn-p 让它工作了:

    "Tags": [
      ...,
      {
        "Fn::If": [
          "MyCondition",
          {"Key": "MyKey", "Value": "MyValue"},
          {"Ref": "AWS::NoValue"}
        ]
      }
    ],
    

    【讨论】:

      【解决方案3】:

      如果你使用的是 YAML

        Tags:
          - 'Fn::If':
            - MyCondition
            -
              Key: MyKey
              Value: MyValue
            - !Ref AWS::NoValue
      

      【讨论】:

        猜你喜欢
        • 2020-11-24
        • 1970-01-01
        • 2018-06-22
        • 2018-04-23
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 2015-03-04
        • 2017-05-01
        相关资源
        最近更新 更多