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

14

Eu tenho uma seqüência de caracteres é 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 seqüência de caracteres reutilizável que eu possa apenas Ref embora o modelo?

quaisquer pensamentos sobre isso seriam muito apreciados. edit: um exemplo seria passar 2 parâmetros, como ProjectName e Environment, juntando-os

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

e usando os resultados em vários lugares

graeme
fonte
Você está falando de um parâmetro? docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Edwin
Acho que as transformações são o que a AWS fornece para isso. Infelizmente, eles ainda não suportam aliases de YAML.
Jgomo3

Respostas:

7

Infelizmente, meus experimentos devem concordar com sua conclusão, Graeme. Eu luto com isso há algum tempo, mas não encontrei uma maneira de calcular uma String via Fn :: Join e mantê-la para mais tarde no modelo.

Posso compartilhar com você um exemplo típico?

Como em 18/09/2014, a maneira mais sofisticada de armazenar um valor de cadeia para reutilização na seção Recursos seria por meio de um mapeamento (de segundo nível). Melhor ainda, posso pré-calcular uma Condição e determinar se deve usar a sequência ou não. Infelizmente, porém, o armazenamento de uma string simplesmente não funciona.

Aqui está um exemplo de estrofe desse 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 é uma string literal Parameter com um padrão conveniente. Portanto, 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 de formato do modelo: Todo atributo de Mapeamentos deve ser uma String ou uma Lista.

Portanto, compartilho sua frustração de que não parece haver uma maneira de um modelo 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 oposto disso (embora sem exemplo).

Então, se alguém tem um exemplo de solução alternativa, por favor, eles poderiam compartilhar?

johnz
fonte
2

Você pode usar parâmetros ou mapeamentos para armazenar seqüências de caracteres que você pode usar em seus modelos.

Drew Khoury
fonte
1
Isso funciona apenas para cadeias estáticas. O OP solicitou especificamente seqüências de caracteres computadas, o que não parece ser possível.
Joe
0

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

graeme
fonte
0

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

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

Ryan McGeary
fonte