Умовна властивість у формуванні 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
Це дійсно варіант, але сильно порушує принцип DRY (не повторюй себе), чого я не прагну робити. Крім того - часто є інші властивості, які можуть бути встановлені або не можуть бути встановлені, наприклад, чи прослуховує ELB на HTTPS на основі того, чи встановлено сертифікат SSL. Спроба зловити всі ці невеликі варіації, повторивши всі декларації з невеликою зміною, швидко призведе до масового нездійсненного шаблону. Але все-таки дякую за пропозицію.
MLu

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