Lamentablemente, mis experimentos están de acuerdo con tu conclusión, Graeme. He tenido problemas con esto durante algún tiempo, pero no he encontrado una manera de calcular una Cadena a través de Fn :: Join y guardarla para más adelante en la plantilla.
¿Puedo compartir con ustedes un ejemplo típico?
A partir del 18 de septiembre de 2014, la forma más sofisticada de almacenar un valor de cadena para su reutilización en la sección Recursos sería a través de una asignación (de segundo nivel). Mejor aún, puedo calcular previamente una Condición y determinar si usar la cadena o no. Pero desafortunadamente, el almacenamiento de una cadena simplemente no funciona.
Aquí hay un ejemplo de estrofa de tal mapeo ...
"LoadBalancerBucketMap": {
"BucketName": {
"string": {
"Fn::Join": [
"-",
[
"mylb",
{
"Ref": "Environment"
},
"logs"
]
]
}
}
},
Y aquí hay una expresión de acceso a él en un Recurso
"S3BucketName": {
"Fn::FindInMap": [
"LoadBalancerBucketMap",
"BucketName",
"string"
}
En este ejemplo, el entorno es un parámetro de cadena literal con un valor predeterminado conveniente. Ese es un ejemplo muy claro de crear y reutilizar una cadena. Pero aquí está lo que dice el procesador CloudFormation ...
Error de validación de plantilla: error de formato de plantilla: cada atributo de asignaciones debe ser una cadena o una lista.
Así que comparto su frustración de que no parece haber una forma en una plantilla para proporcionar el efecto de una variable de cadena temporal.
... Hasta donde puedo ver. Pero la respuesta que recibió originalmente decía lo contrario de esto (aunque sin un ejemplo).
Entonces, si alguien tiene una solución alternativa, ¿podrían compartir?