Ist es bei der Wolkenbildung möglich, einen wiederverwendbaren String zu erstellen?

14

Ich habe eine Zeichenfolge, die aus einer Reihe von Variablen gebildet wird, die ich für viele verschiedene Dinge wie Tags und Hostnamen verwende.

Gibt es eine Möglichkeit, eine wiederverwendbare Zeichenfolge zu erstellen, die ich nur aus der Vorlage heraus referenzieren kann?

Über Gedanken hierzu würde ich mich sehr freuen. edit: In einem Beispiel würden zwei Parameter übergeben, z. B. ProjectName und Environment

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

und Verwenden der Ergebnisse an mehreren Stellen

graeme
quelle
Sprechen Sie über einen Parameter? docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Edwin
Ich denke, Transformationen sind das, was AWS dafür bietet. Leider unterstützen sie noch keine YAML-Aliase.
jgomo3

Antworten:

7

Leider stimmen meine Experimente mit Ihrer Schlussfolgerung Graeme überein. Ich habe einige Zeit damit zu kämpfen, aber keine Möglichkeit gefunden, einen String über Fn :: Join zu berechnen und für einen späteren Zeitpunkt in der Vorlage aufzubewahren.

Kann ich Ihnen ein typisches Beispiel geben?

Zum 18.09.2014 würde die ausgefeilteste Methode zum Speichern eines Zeichenfolgenwerts zur Wiederverwendung im Abschnitt Ressourcen über eine Zuordnung (zweite Ebene) erfolgen. Besser noch, ich kann eine Bedingung vorberechnen und bestimmen, ob die Zeichenfolge verwendet werden soll oder nicht. Aber leider funktioniert das Speichern eines Strings einfach nicht.

Hier ist eine Beispielzeilengruppe für ein solches Mapping…

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

Und hier ist ein Zugriffsausdruck in einer Ressource

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

In diesem Beispiel ist Environment ein Literal-String-Parameter mit einem geeigneten Standardwert. Das ist also ein sehr anschauliches Beispiel für das Erstellen und Wiederverwenden einer Zeichenfolge. Aber hier ist, was der CloudFormation-Prozessor sagt ...

Vorlagenüberprüfungsfehler: Vorlagenformatfehler: Jedes Zuordnungsattribut muss eine Zeichenfolge oder eine Liste sein.

Daher teile ich Ihre Frustration darüber, dass es in einer Vorlage keine Möglichkeit zu geben scheint, den Effekt einer temporären Zeichenfolgenvariablen bereitzustellen.

Soweit ich sehen kann. Aber die Antwort, die Sie ursprünglich erhalten haben, sagte das Gegenteil davon (wenn auch ohne Beispiel).

Wenn also jemand ein Beispiel für eine Problemumgehung hat, kann er dies bitte mitteilen?

Johnz
quelle
2

Sie können Parameter oder Zuordnungen verwenden, um Zeichenfolgen zu speichern, die Sie in Ihren Vorlagen verwenden können.

Drew Khoury
quelle
1
Dies funktioniert nur für statische Zeichenfolgen. Das OP hat speziell nach berechneten Zeichenfolgen gefragt, was anscheinend überhaupt nicht möglich ist.
Joe
0

Leider habe ich festgestellt, dass es nicht möglich ist, das zu tun, was ich erreichen wollte. es hilft nicht, aber da ist es.

graeme
quelle
0

Wir machen unseren CloudFormation-Stack-Namen genau {ProjectName}-{Environment}während aws cloudformation deploy. Haben Sie diese Namenskonvention für Ihren Stapelnamen berücksichtigt?

Danach können Sie es einfach als referenzieren { "Fn:Sub": "${AWS::StackName}" }.

Ryan McGeary
quelle