View a markdown version of this page

Fn::Sub - AWS CloudFormation

Dies ist das neue CloudFormation Template Reference Guide. Bitte aktualisieren Sie Ihre Lesezeichen und Links. Hilfe zu den ersten CloudFormation Schritten finden Sie im AWS CloudFormation Benutzerhandbuch.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Fn::Sub

Mit der intrinsischen FunktionFn::Sub können Sie Variablen in einer Eingabezeichenfolge mit Werten ersetzen, die Sie angeben. In Ihren Vorlagen können Sie diese Funktion verwenden, um Befehle oder Ausgaben mit Werten zu erstellen, die erst verfügbar sind, wenn Sie einen Stack erstellen oder aktualisieren.

Deklaration

In den folgenden Abschnitten wird die Syntax der Funktion erläutert.

JSON

{ "Fn::Sub" : [ String, { Var1Name: Var1Value, Var2Name: Var2Value } ] }

Wenn Sie nur Vorlagenparameter, logische Ressourcen-IDs oder Ressourcenattribute im Parameter String ersetzen, müssen Sie keine Variablenzuweisung angeben.

{ "Fn::Sub" : String }

YAML

Syntax für den vollständigen Funktionsnamen:

Fn::Sub: - String - Var1Name: Var1Value Var2Name: Var2Value

Syntax für die Kurzform:

!Sub - String - Var1Name: Var1Value Var2Name: Var2Value

Wenn Sie nur Vorlagenparameter, logische Ressourcen-IDs oder Ressourcenattribute im Parameter String ersetzen, müssen Sie keine Variablenzuweisung angeben.

Syntax für den vollständigen Funktionsnamen:

Fn::Sub: String

Syntax für die Kurzform:

!Sub String

Parameters

String

Eine Zeichenfolge mit Variablen, die zur Laufzeit durch ihre zugehörigen Werte CloudFormation ersetzt werden. Schreibt Variablen als ${MyVarName}. Variablen können Vorlagenparameternamen, logische Ressourcen-IDs, Ressourcenattribute oder Variablen in einer Schlüssel-Wert-Zuweisung sein. Wenn Sie nur Vorlagenparameternamen, logische Ressourcen-IDs und Ressourcenattribute angeben, geben Sie keine Schlüssel-Wert-Zuweisung an.

Wenn Sie Vorlagenparameternamen oder logische Ressourcen-IDs angeben, werden dieselben Werte CloudFormation zurückgegeben${InstanceTypeParameter}, als ob Sie die Ref systeminterne Funktion verwendet hätten. Wenn Sie Ressourcenattribute angeben, z. B. werden dieselben Werte CloudFormation zurückgegeben${MyInstance.PublicIp}, als ob Sie die Fn::GetAtt systeminterne Funktion verwendet hätten.

Um ein Dollarzeichen und geschweifte Klammern (${}) wörtlich zu schreiben, fügen Sie hinter der geöffneten geschweiften Klammer ein Ausrufezeichen (!) ein, z. B. ${!Literal} CloudFormation ${Literal}löst diesen Text auf als.

Wenn Sie eine Startvorlage verwenden, fügen Sie einen Backslash \ vor dem Dollarzeichen ein, beispielsweise \${!Literal}, da das Literal sonst als leere Zeichenkette aufgelöst wird.

VarName

Der Name einer Variablen, die Sie im Parameter String eingefügt haben.

VarValue

Der Wert, der zur CloudFormation Laufzeit den zugehörigen Variablennamen ersetzt.

Rückgabewert

CloudFormation gibt die ursprüngliche Zeichenfolge zurück und ersetzt alle Variablen durch die Werte.

Beispiele

Das folgende Beispiele zeigt, wie die Fn::Sub-Funktion verwendet wird.

Verwenden Sie Fn: :Sub ohne eine Schlüssel-Wert-Map

In diesem einfachen Beispiel wird die Beschreibung der Ressource InstanceSecurityGroup dynamisch mit dem Pseudoparameter AWS::StackName erstellt. Wenn der Stapelname beispielsweise "VPC-EC2-ALB-Stack" lautet, ist die resultierende Beschreibung "SSH security group for VPC-EC2-ALB-Stack".

JSON

"InstanceSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : {"Fn::Sub": "SSH security group for ${AWS::StackName}"} }}

YAML

InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: !Sub "SSH security group for ${AWS::StackName}"

Verwenden Sie Fn: :Sub mit einer Schlüssel-Wert-Map

In diesem Beispiel wird der Name der Ressource WWWBucket dynamisch mit einer Key-Value-Map erstellt. Die Funktion Fn::Sub ersetzt ${Domain} in der Eingabezeichenfolge www.${Domain} durch den Wert einer Funktion Ref, die auf den Parameter RootDomainName verweist, der in derselben Stackvorlage definiert ist. Wenn der Stammdomainnname beispielsweise "mydomain.com" lautet, ist der resultierende Name für diese Ressource "www.mydomain.com".

JSON

"WWWBucket":{ "Type":"AWS::S3::Bucket", "Properties":{ "BucketName":{ "Fn::Sub":[ "www.${Domain}", { "Domain":{ "Ref":"RootDomainName" } } ] } } }

YAML

WWWBucket: Type: AWS::S3::Bucket Properties: BucketName: !Sub - 'www.${Domain}' - Domain: !Ref RootDomainName

Verwenden Sie mehrere Variablen, um ARNs zu konstruieren

Das folgende Beispiel verwendet Fn::Sub mit den Pseudo-Parametern AWS::Region und AWS::AccountId und der logischen Ressourcen-ID vpc, um einen Amazon Resource Name (ARN) für eine VPC zu erstellen.

JSON

{ "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" }

YAML

!Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}'

Parameterwerte in Skripten für Benutzerdaten übergeben

In dem folgenden Beispiel werden die Pseudoparameter Fn::Sub und AWS::StackName mit AWS::Region zur Laufzeit mit dem tatsächlichen Stack-Namen und der Region ersetzt.

JSON

Zur besseren Lesbarkeit werden die einzelnen Befehle im JSON-Beispiel mit der Fn::Join-Funktion voneinander getrennt, sodass nicht das gesamte Benutzerdaten-Skript in einem einzelnen Zeichenfolgewert angegeben ist.

"UserData": { "Fn::Base64": { "Fn::Join": ["\n", [ "#!/bin/bash -xe", "yum update -y aws-cfn-bootstrap", { "Fn::Sub": "/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}" }, { "Fn::Sub": "/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}" }]] }}

YAML

Im YAML-Beispiel wird ein Literal-Block verwendet, um ein Benutzerdaten-Skript anzugeben.

UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region} /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}

Bedingte Werte mit Hilfe von Mappings spezifizieren

In diesem Beispiel wird der Name der Ressource myLogGroup dynamisch erstellt, indem die Variable log_group_name durch den Ergebniswert der Funktion Fn::FindInMap ersetzt wird.

JSON

{ "Mappings": { "LogGroupMapping": { "Test": { "Name": "test_log_group" }, "Prod": { "Name": "prod_log_group" } } }, "Resources": { "myLogGroup": { "Type": "AWS::Logs::LogGroup", "Properties": { "LogGroupName": { "Fn::Sub": [ "cloud_watch_${log_group_name}", { "log_group_name": { "Fn::FindInMap": [ "LogGroupMapping", "Test", "Name" ] } } ] } } } } }

YAML

Mappings: LogGroupMapping: Test: Name: test_log_group Prod: Name: prod_log_group Resources: myLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub - 'cloud_watch_${log_group_name}' - log_group_name: !FindInMap - LogGroupMapping - Test - Name

Unterstützte Funktionen

Für den String-Parameter können Sie nicht jede beliebige Funktion verwenden. Sie müssen einen Zeichenfolgenwert angeben.

Für die Parameter VarName und VarValue stehen Ihnen die folgenden Funktionen zur Verfügung: