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?

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": {
        [...]
    }
}

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.