2016-08-22 83 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 
相關問題