en cloudformation est-il possible de créer une chaîne réutilisable?

14

j'ai une chaîne qui est formée d'un certain nombre de variables que j'utilise pour de nombreuses choses différentes telles que les balises et les noms d'hôte.

y a-t-il un moyen de créer une chaîne réutilisable que je peux simplement ref à travers le modèle?

toute réflexion à ce sujet serait très appréciée. edit: Un exemple serait de passer 2 paramètres tels que ProjectName et Environment les joignant

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

et en utilisant les résultats dans un certain nombre d'endroits

graeme
la source
Je pense que les transformations sont ce qu'AWS fournit pour cela. Malheureusement, ils ne prennent pas encore en charge les alias YAML.
jgomo3

Réponses:

7

Malheureusement, mes expériences sont d'accord avec votre conclusion Graeme. J'ai du mal avec cela depuis un certain temps, mais je n'ai pas trouvé de moyen de calculer une chaîne via Fn :: Join et de la conserver pour plus tard dans le modèle.

Puis-je partager avec vous un exemple typique?

Au 18/09/2014, le moyen le plus sophistiqué de stocker une valeur de chaîne pour réutilisation dans la section Ressources serait via un mappage (de deuxième niveau). Mieux encore, je peux pré-calculer une condition et déterminer s'il faut utiliser la chaîne ou non. Mais malheureusement, le stockage d'une chaîne ne fonctionne tout simplement pas.

Voici un exemple de strophe d'une telle cartographie…

    "LoadBalancerBucketMap": {
        "BucketName": {
            "string": {
                "Fn::Join": [
                    "-",
                    [
                        "mylb",
                        {
                            "Ref": "Environment"
                        },
                        "logs"
                    ]
                ]
            }
        }
    },

Et voici une expression d'accès à elle dans une ressource

                "S3BucketName": {
                    "Fn::FindInMap": [
                        "LoadBalancerBucketMap",
                        "BucketName",
                        "string"
                    }

Dans cet exemple, Environnement est un paramètre de chaîne littérale avec une valeur par défaut pratique. C'est donc un exemple très clair de création et de réutilisation d'une chaîne. Mais voici ce que dit le processeur CloudFormation…

Erreur de validation du modèle: Erreur de format du modèle: chaque attribut de mappage doit être une chaîne ou une liste.

Je partage donc votre frustration qu'il ne semble pas y avoir de moyen dans un modèle pour fournir l'effet d'une variable de chaîne temporaire.

… Pour autant que je puisse voir. Mais la réponse que vous avez reçue à l'origine disait le contraire (bien que sans exemple).

Donc, si quelqu'un a un exemple de solution de contournement, alors s'il vous plaît, pourrait-il le partager?

johnz
la source
2

Vous pouvez utiliser des paramètres ou des mappages pour stocker des chaînes que vous pouvez utiliser dans vos modèles.

Drew Khoury
la source
1
Cela ne fonctionne que pour les chaînes statiques. L'OP a spécifiquement demandé des chaînes calculées, ce qui ne semble pas du tout possible.
Joe
0

malheureusement, j'ai trouvé qu'il n'était pas possible de faire ce que j'essayais de réaliser. ça n'aide pas mais ça y est.

graeme
la source
0

Nous faisons en fait notre nom de pile CloudFormation exactement {ProjectName}-{Environment}pendant aws cloudformation deploy. Avez-vous pris en compte cette convention de dénomination pour le nom de votre pile?

Ensuite, vous pouvez simplement le référencer comme { "Fn:Sub": "${AWS::StackName}" }.

Ryan McGeary
la source