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?