AWS CloudFormation条件标记

时间:2016-08-22 13:56:32

标签: amazon-web-services amazon-cloudformation

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

关于如何添加条件标签的任何想法?

谢谢!

3 个答案:

答案 0 :(得分:9)

我有类似的需求,并且不希望未使用的标签位于其中。我已经使用以下代码段了解它:

SUM( TIMESTAMPDIFF(DAY
       ,GREATEST(de.from_date,s.from_date)
       ,LEAST(IFNULL(de.to_date,DATE(NOW())),IFNULL(s.to_date,DATE(NOW())))
     )
*
s.salary
)
/
SUM( TIMESTAMPDIFF(DAY
       ,GREATEST(de.from_date,s.from_date)
       ,LEAST(IFNULL(de.to_date,DATE(NOW())),IFNULL(s.to_date,DATE(NOW())))
     )
)

答案 1 :(得分:3)

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

e.g。

"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为true,则会创建一个标记为custodian_downtime的标记,其值为Offhours tz=ET

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

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

答案 2 :(得分:1)

如果你正在使用YAML

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