no cloudformation é possível criar uma string reutilizável?

12

Eu tenho uma string que é formada a partir de um número de variáveis que eu uso para muitas coisas diferentes, como Tags e nomes de host.

Existe uma maneira de criar uma string reutilizável que eu possa refinar apenas o modelo?

qualquer pensamento sobre isso seria muito apreciado. editar: Um exemplo seria passar em 2 parâmetros como ProjectName e Environment juntando-se a eles

"Fn::Join" : [ "-", [ {"Ref":"ProjectName"}, {"Ref":"Environment"} ] ]

e usando os resultados em vários lugares

    
por graeme 03.03.2014 / 08:05

4 respostas

6

Infelizmente minhas experiências são de concordar com sua conclusão Graeme. Eu tenho lutado com isso há algum tempo, mas não encontrei uma maneira de calcular um String via Fn :: Join e mantê-lo para mais tarde no template.

Posso compartilhar com você um exemplo típico?

Como em 2014-09-18, a maneira mais sofisticada de armazenar um valor de string para reutilização na seção Recursos seria por meio de um Mapeamento (de segundo nível). Melhor ainda, posso pré-computar uma Condição e determinar se devo usar a string ou não. Mas infelizmente o armazenamento de uma string simplesmente não funciona.

Aqui está um exemplo de uma estrofe de tal Mapeamento…

    "LoadBalancerBucketMap": {
        "BucketName": {
            "string": {
                "Fn::Join": [
                    "-",
                    [
                        "mylb",
                        {
                            "Ref": "Environment"
                        },
                        "logs"
                    ]
                ]
            }
        }
    },

E aqui está uma expressão de acesso a ele em um recurso

                "S3BucketName": {
                    "Fn::FindInMap": [
                        "LoadBalancerBucketMap",
                        "BucketName",
                        "string"
                    }

Neste exemplo, Environment é um parâmetro literal de string com um padrão conveniente. Então, esse é um exemplo muito claro de criação e reutilização de uma string. Mas aqui está o que o processador CloudFormation diz…

Erro de validação do modelo: Erro no formato do modelo: todo atributo Mappings deve ser uma String ou uma lista.

Então, eu compartilho sua frustração de que não parece haver uma maneira em um modelo para fornecer o efeito de uma variável de string temporária.

… Até onde eu posso ver. Mas a resposta que você recebeu originalmente disse o contrário disso (embora sem um exemplo).

Então, se alguém tiver um exemplo de solução alternativa, eles poderão compartilhar?

    
por 18.09.2014 / 15:34
3

Você pode usar params ou mapeamentos para armazenar strings que você pode usar em seus modelos.

    
por 03.03.2014 / 10:10
0

infelizmente eu descobri que não é possível fazer o que eu estava tentando alcançar. não ajuda, mas aí está.

    
por 05.03.2014 / 11:25
0

Na verdade, tornamos o nome da pilha do CloudFormation exatamente {ProjectName}-{Environment} durante aws cloudformation deploy . Você já considerou esta convenção de nomenclatura para o seu nome de pilha?

Depois disso, você pode referenciá-lo como { "Fn:Sub": "${AWS::StackName}" } .

    
por 24.07.2017 / 23:44