Fn::Sub - AWS CloudFormation

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Fn::Sub

La funzione intrinseca Fn::Sub sostituisce le variabili in una stringa di input con valori che puoi specificare. Nei modelli, questa funzione è utilizzabile per costruire comandi o output che includono valori che non sono disponibili finché non crei o aggiorni uno stack.

Dichiarazione

Le seguenti sezioni mostrano la sintassi della funzione.

JSON

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

Se stai sostituendo solo parametri del modello, risorse logiche IDs o attributi di risorsa nel String parametro, non specificare una mappa variabile.

{ "Fn::Sub" : String }

YAML

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

!Sub - String - Var1Name: Var1Value Var2Name: Var2Value

Se state sostituendo solo parametri di modello, risorse logiche IDs o attributi di risorsa nel String parametro, non specificate una mappa variabile.

Sintassi per il nome completo della funzione:

Fn::Sub: String

Sintassi per la forma breve:

!Sub String

Parametri

String

Una stringa con variabili che AWS CloudFormation sostituisce con i valori associati in fase di esecuzione. Scrivi le variabili come ${MyVarName}. Le variabili possono essere i nomi dei parametri del modello, la logica delle risorseIDs, gli attributi delle risorse o una variabile in una mappa chiave-valore. Se specificate solo i nomi dei parametri del modello, la logica IDs delle risorse e gli attributi delle risorse, non specificate una mappa chiave-valore.

Se si specificano i nomi dei parametri del modello o la logica delle risorseIDs, ad esempio${InstanceTypeParameter}, CloudFormation restituisce gli stessi valori che si otterrebbero se si utilizzasse la funzione Ref intrinseca. Se si specificano gli attributi delle risorse, ad esempio${MyInstance.PublicIp}, CloudFormation restituisce gli stessi valori come se si utilizzasse la funzione Fn::GetAtt intrinseca.

Per scrivere letteralmente il simbolo del dollaro e le parentesi graffe (${}), aggiungete un punto esclamativo (!) dopo la parentesi riccia aperta, ad esempio. ${!Literal} CloudFormation risolve questo testo come. ${Literal}

VarName

Il nome di una variabile inclusa nel parametro String.

VarValue

Il valore che CloudFormation sostituisce il nome della variabile associata in fase di esecuzione.

Valore restituito

CloudFormation restituisce la stringa originale, sostituendo i valori per tutte le variabili.

Esempi

I seguenti esempi illustrano come utilizzare la funzione Fn::Sub.

Utilizzare Fn::Sub senza una mappa chiave-valore

In questo semplice esempio, la descrizione della InstanceSecurityGroup risorsa viene creata dinamicamente con lo pseudo parametro. AWS::StackName Ad esempio, se il nome dello stack è»VPC-EC2-ALB-Stack«, la descrizione risultante è»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}"

Utilizzare Fn::Sub con una mappa chiave-valore

In questo esempio, il nome della WWWBucket risorsa viene creato dinamicamente con una mappa chiave-valore. La Fn::Sub funzione sostituisce ${Domain} nella stringa di input il valore www.${Domain} di una Ref funzione che fa riferimento al RootDomainName parametro definito all'interno dello stesso modello di stack. Ad esempio, se il nome del dominio principale è»mydomain.com«, il nome risultante per questa risorsa è»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

Usa più variabili per costruire ARNs

L'esempio seguente utilizza Fn::Sub gli AWS::AccountId pseudo parametri AWS::Region and e l'ID logico della vpc risorsa per creare un Amazon Resource Name (ARN) per un. VPC

JSON

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

YAML

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

Passa i valori dei parametri negli script dei dati utente

L'esempio seguente utilizza Fn::Sub per sostituire gli pseudoparametri AWS::StackName e AWS::Region al nome dello stack e alla Regione effettivi in fase di runtime.

JSON

Per motivi di leggibilità, l'JSONesempio utilizza la Fn::Join funzione per separare ogni comando, anziché specificare l'intero script di dati utente in un unico valore di stringa.

"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

L'YAMLesempio utilizza un blocco letterale per specificare lo script dei dati utente.

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}

Specificare i valori condizionali utilizzando le mappature

In questo esempio, il nome della myLogGroup risorsa viene creato dinamicamente sostituendo la log_group_name variabile con il valore risultante dalla funzione. 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

Funzioni supportate

Per il parametro String, non è possibile utilizzare alcuna funzione. Devi specificare un valore di stringa.

Per i parametri VarName e VarValue, puoi utilizzare le seguenti funzioni: