AWS CloudFormation 条件标记

AWS CloudFormation conditional tagging

我需要根据用户对停机时间参数的响应和地图中定义的环境值有条件地标记资源。 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"
                }
            ],

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

谢谢!

遗憾的是,我认为有条件地添加标签是不可能的。您能做的最好的事情就是使用条件修改标签的数据——键或值或两者。如果您修改键,则任何对预期标签键的自动搜索都不会找到具有修改后键的资源。但是你会留下一些不必要的标签。

例如

"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 标签的资源提供明确的参考,即没有需要停机时间 - 所以它可能会更有帮助。

我也有类似的需求,也不希望闲置的标签随处可见。我已经使用以下代码段使其正常工作:

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

如果您使用的是 YAML

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