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 im Parameter nur Vorlagenparameter, ressourcenlogische IDs Attribute oder Ressourcenattribute ersetzen, geben Sie keine Variablenzuordnung an. String
{ "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 im Parameter nur Vorlagenparameter, ressourcenlogische Attribute oder Ressourcenattribute ersetzenIDs, geben Sie keine
Variablenzuordnung an.String
Syntax für den vollständigen Funktionsnamen:
Fn::Sub:
String
Syntax für die Kurzform:
!Sub
String
Parameter
String
-
Eine Zeichenfolge mit Variablen, die zur Laufzeit durch ihre zugehörigen Werte AWS CloudFormation ersetzt werden. Schreibt Variablen als
${
. Bei Variablen kann es sich um Namen von Vorlagenparametern, um logische RessourcenIDs, Ressourcenattribute oder um eine Variable in einer Key-Value-Map handeln. Wenn Sie nur Vorlagenparameternamen, logische Ressourcenattribute und Ressourcenattribute angebenIDs, geben Sie keine Schlüssel-Wert-Zuordnung an.MyVarName
}Wenn Sie Vorlagenparameternamen oder ressourcenlogische Parameter angebenIDs, werden dieselben Werte CloudFormation zurückgegeben
${InstanceTypeParameter}
, als ob Sie dieRef
systeminterne Funktion verwenden würden. Wenn Sie Ressourcenattribute angeben, z. B. werden dieselben Werte CloudFormation zurückgegeben${MyInstance.PublicIp}
, als ob Sie dieFn::GetAtt
systeminterne Funktion verwendet hätten.Um ein Dollarzeichen und geschweifte Klammern (
${}
) wörtlich zu schreiben, fügen Sie nach der geöffneten geschweiften Klammer ein Ausrufezeichen (!
) hinzu, z. B.${!
CloudFormationLiteral
}${
löst diesen Text auf als.Literal
} 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.
Fn::Sub
Ohne eine Schlüssel-Wert-Map verwenden
In diesem einfachen Beispiel wird die Beschreibung der InstanceSecurityGroup
Ressource dynamisch mit dem AWS::StackName
Pseudo-Parameter erstellt. Zum Beispiel, wenn der Stack-Name“ lautetVPC-EC2-ALB-Stack„, die resultierende Beschreibung lautet“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}"
Wird Fn::Sub
zusammen mit einer Key-Value-Map verwendet
In diesem Beispiel wird der Name der WWWBucket
Ressource dynamisch mit einer Key-Value-Map erstellt. Die Fn::Sub
Funktion ersetzt ${Domain}
die Eingabezeichenfolge www.${Domain}
durch den Wert einer Ref
Funktion, die auf den RootDomainName
Parameter verweist, der in derselben Stack-Vorlage definiert ist. Zum Beispiel, wenn der Name der Root-Domain“ lautetmydomain.com„, der resultierende Name für diese Ressource ist“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 zum Konstruieren ARNs
Im folgenden Beispiel wird Fn::Sub
mit den AWS::Region
AWS::AccountId
Pseudo-Parametern und der logischen vpc
Ressourcen-ID ein Amazon-Ressourcenname (ARN) für a VPC erstellt.
JSON
{ "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" }
YAML
!Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}'
Übergeben Sie Parameterwerte in Benutzerdatenskripten
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
Aus Gründen der Lesbarkeit verwendet das JSON Beispiel die Fn::Join
Funktion, um die einzelnen Befehle voneinander zu trennen, anstatt das gesamte Benutzerdatenskript in einem einzigen Zeichenkettenwert anzugeben.
"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
Das YAML Beispiel verwendet einen Literalblock, um das Benutzerdatenskript zu spezifizieren.
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}
Geben Sie bedingte Werte mithilfe von Zuordnungen an
In diesem Beispiel wird der Name der myLogGroup
Ressource dynamisch erstellt, indem die log_group_name
Variable durch den sich aus der Funktion ergebenden Wert ersetzt wird. Fn::FindInMap
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: