Условное свойство в AWS CloudFormation


10

У нас есть шаблон AWS CloudFormation для создания некоторых экземпляров EC2. Некоторые из них, однако, требуют конкретного, PrivateIpAddressи я изо всех сил пытаюсь выяснить, как включить это в шаблон.

На данный момент у меня есть параметр шаблона PrivateIPи создание условия RequestedPrivateIP. Все идет нормально. Однако я не могу понять, как включить его в AWS::EC2::Instanceспецификацию ресурса. Я попробовал это:

    "PrivateIpAddress": {
        "Fn::If": [ "RequestedPrivateIP",
            { "Ref": "PrivateIP" },
            ""                            <-- This doesn't work
        ]
    },

Но это не удается, когда RequestedPrivateIPложь с

CREATE_FAILED    AWS::EC2::Instance    NodeInstance    Invalid addresses: []

Любая идея, как дополнительно назначить статический частный IP-адрес и, если он не указан, оставить AWS для установки динамического?

Ответы:



0

Поскольку кажется, что PrivateIpAddressсвойство не поддерживает пустую строку в качестве значения, я бы предложил создать два отдельных ваших ресурса AWS::EC2::Instance. У одного из них будет ваше состояние, RequestedPrivateIPа у другого должно быть то же состояние, но отрицательное, например DidNotRequestPrivateIP.

"InstanceWithPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "RequestedPrivateIP",
    "Properties": {
        [...]
    }
},

"InstanceWithoutPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "DidNotRequestPrivateIP",
    "Properties": {
        [...]
    }
}

1
Это действительно вариант, но он серьезно нарушает принцип «СУХОЙ» («Не повторяйся»), что я не хочу делать. Кроме того - часто существуют другие свойства, которые могут или не могут быть установлены, например, прослушивает ли ELB HTTPS в зависимости от того, был ли установлен сертификат SSL. Попытка поймать все эти маленькие вариации путем повторения всех объявлений с небольшим изменением быстро приведет к огромному не поддерживаемому шаблону. Но все равно спасибо за предложение.
МЛ

1
Я полностью согласен с тобой @MLu, повторять никогда не весело. Однако из моего опыта работы с CloudFormation вы иногда вынуждены повторяться. Другое решение, которое я вижу, состоит в том, чтобы вместо этого создавать субстеки, которые вы включаете в условия, которые я упомянул выше, а затем в этих субстеках вы делаете вещи, специфичные для этого условия.
Bazze
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.