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
Respostas:
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…
E aqui está uma expressão de acesso a ele em um Recurso
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?
fonte
Você pode usar parâmetros ou mapeamentos para armazenar seqüências de caracteres que você pode usar em seus modelos.
fonte
infelizmente, descobri que não é possível fazer o que estava tentando alcançar. não ajuda, mas aí está.
fonte
Na verdade, tornamos o nome da pilha do CloudFormation exatamente
{ProjectName}-{Environment}
duranteaws 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}" }
.fonte