en la formación en la nube, ¿es posible crear una cadena reutilizable?

14

Tengo una cadena que se forma a partir de una serie de variables que utilizo para muchas cosas diferentes, como etiquetas y nombres de host.

¿Hay alguna manera de crear una cadena reutilizable que pueda simplemente Ref mediante la plantilla?

cualquier idea sobre esto sería muy apreciada. editar: un ejemplo sería pasar 2 parámetros como ProjectName y Environment uniéndolos

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

y usando los resultados en varios lugares

graeme
fuente
¿Estás hablando de un parámetro? docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Edwin
Creo que las transformaciones son lo que AWS proporciona para esto. Lamentablemente, todavía no admiten alias YAML.
jgomo3

Respuestas:

7

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?

johnz
fuente
2

Puede usar parámetros o asignaciones para almacenar cadenas que puede usar en sus plantillas.

Drew Khoury
fuente
1
Esto solo funciona para cadenas estáticas. El OP solicitó específicamente cadenas calculadas, lo que no parece ser posible en absoluto.
Joe
0

Desafortunadamente, he descubierto que no es posible hacer lo que estaba tratando de lograr. no ayuda pero ahí está.

graeme
fuente
0

Realmente hacemos nuestro nombre de pila de CloudFormation exactamente {ProjectName}-{Environment}durante aws cloudformation deploy. ¿Has considerado esta convención de nomenclatura para tu nombre de pila?

Luego, puede hacer referencia a él como { "Fn:Sub": "${AWS::StackName}" }.

Ryan McGeary
fuente