Propriedade condicional no AWS CloudFormation

10

Temos um modelo do AWS CloudFormation para criar algumas instâncias do EC2. Alguns deles, no entanto, exigem um específico PrivateIpAddresse estou lutando para descobrir como incorporar isso ao modelo.

Por enquanto, tenho um parâmetro de modelo PrivateIPe a criação de uma condição RequestedPrivateIP. Por enquanto, tudo bem. No entanto, não consigo descobrir como incorporá-lo à AWS::EC2::Instanceespecificação de recursos. Eu tentei isso:

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

Mas isso falha quando RequestedPrivateIPé falso com

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

Alguma idéia de como atribuir opcionalmente um IP privado estático e, se não for especificado, deixe para a AWS definir um dinâmico?

MLu
fonte

Respostas:

0

Como parece que a PrivateIpAddresspropriedade não suporta uma string vazia como valor, sugiro que você crie dois recursos separados AWS::EC2::Instance. Um deles terá sua condição, RequestedPrivateIPenquanto o outro deve ter a mesma condição, mas negado, por exemplo DidNotRequestPrivateIP.

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

"InstanceWithoutPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "DidNotRequestPrivateIP",
    "Properties": {
        [...]
    }
}
Bazze
fonte
1
Essa é realmente uma opção, mas quebre seriamente o princípio DRY (não se repita) que não estou disposto a fazer. Além disso - geralmente existem outras propriedades que podem ou não ser definidas, por exemplo, se o ELB escuta em HTTPS com base em se um certificado SSL foi definido. Tentar capturar todas essas pequenas variações repetindo todas as declarações com uma ligeira mudança levaria rapidamente a um modelo maciço e inatingível. Mas obrigado pela sugestão de qualquer maneira.
MLU
Concordo plenamente com você @MLu, repetir nunca é divertido. No entanto, pela minha experiência com o CloudFormation, às vezes você é forçado a se repetir. A outra solução que vejo é criar sub-pilhas em vez de incluir nas condições mencionadas acima e, nessas sub-pilhas, você faz coisas específicas para essa condição.
Bazze