2016-08-22 5 views
3

У меня есть требование условно пометить ресурсы на основе ответа пользователя на параметр простоя и значение среды, определенной на карте. Этот тег позже используется функцией лямбда, чтобы выключать экземпляры в ночное время.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 
Смежные вопросы