Fn::Sub - AWS CloudFormation

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

Parameter

String

Eine Zeichenfolge mit Variablen, die AWS CloudFormation zur Laufzeit mit den zugehörigen Werten ersetzt. 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 die Vorlagenparameternamen oder logische Ressourcen-IDs wie z. B. ${InstanceTypeParameter} angeben, gibt CloudFormation die gleichen Werte zurück wie bei Verwendung der intrinsichen Funktion Ref. Wenn Sie die Ressourcenattribute wie z. B. ${MyInstance.PublicIp} angeben, gibt CloudFormation die gleichen Werte zurück wie bei Verwendung der intrinsichen Funktion Fn::GetAtt.

Um ein Dollarzeichen und geschweifte Klammern (${}) einzugeben, fügen Sie nach der öffnenden geschweiften Klammer ein Ausrufezeichen (!) ein. Beispiel: ${!Literal}. CloudFormation löst diesen Text als ${Literal} auf.

VarName

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

VarValue

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

Rückgabewert

CloudFormation gibt die ursprüngliche Zeichenfolge zurück, wobei die Werte für alle Variablen ersetzt werden.

Beispiele

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

Fn::Sub mit einer Zuweisung

In dem folgenden Beispiel wird eine Zuweisung verwendet, um die Variable ${Domain} mit dem resultierenden Wert aus der Ref-Funktion zu ersetzen.

JSON

{ "Fn::Sub": [ "www.${Domain}", { "Domain": {"Ref" : "RootDomainName" }} ]}

YAML

Name: !Sub - www.${Domain} - { Domain: !Ref RootDomainName }

 

Fn::Sub ohne eine Zuweisung

Im folgenden Beispiel wird Fn::Sub mit den Pseudoparametern AWS::Region und AWS::AccountId sowie der logischen Ressourcen-ID vpc zum Erstellen eines Amazon-Ressourcennamens (ARN) für einen VPC verwendet.

JSON

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

YAML

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

 

UserData-Befehle

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}

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:

  • Fn::Base64

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::ImportValue

  • Fn::Join

  • Fn::Select

  • Ref