2016-08-22 81 views
3

我有一个要求,根据用户对停机时间参数的响应以及映射中定义的环境值,有条件地标记资源。这个标签后来被lambda函数用来在晚上关闭实例。AWS CloudFormation条件标记

条件 - - "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" } ],

如何添加一个条件标记任何想法

我没有运气尝试过这样的吗?

谢谢!

回答

2

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

例如

"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标签的人提供了明确的参考信息,说明不需要停机时间 - 因此它可能会更有帮助。

+0

感谢确认克里斯!我尝试了所有的选项,包括你给的选项。我之所以犹豫是否使用这种方法,只是因为我不想在我的实例上有不必要的标签,但现在看来,这是唯一的解决方案。 –

5

我有类似的需求,不希望闲置的标签周围。我已经得到了它的工作使用下面的代码片段:

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

如果你使用YAML

Tags: 
    - 'Fn::If': 
     - MyCondition 
     - 
     Key: MyKey 
     Value: MyValue 
     - !Ref AWS::NoValue 
相关问题