Questa è la nuova guida CloudFormation di riferimento per i modelli. Aggiorna i segnalibri e i link. Per informazioni su come iniziare CloudFormation, consulta la Guida per l'AWS CloudFormation utente.
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 parametro, non specificare una mappa variabile.String
{ "Fn::Sub" :String}
YAML
Sintassi per il nome completo della funzione:
Fn::Sub: -String-Var1Name:Var1ValueVar2Name:Var2Value
Sintassi per la forma breve:
!Sub -String-Var1Name:Var1ValueVar2Name:Var2Value
Se state sostituendo solo parametri di modello, risorse logiche IDs o attributi di risorsa nel parametro, non specificate una mappa variabile.String
Sintassi per il nome completo della funzione:
Fn::Sub:String
Sintassi per la forma breve:
!SubString
Parametri
String-
Una stringa con variabili che CloudFormation sostituisce con i valori associati in fase di esecuzione. Scrivi le variabili come
${. Le variabili possono essere i nomi dei parametri del modello, la logica delle risorse IDs, 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.MyVarName}Se si specificano i nomi dei parametri del modello o la logica delle risorse IDs, ad esempio
${InstanceTypeParameter}, CloudFormation restituisce gli stessi valori che si otterrebbero se si utilizzasse la funzioneRefintrinseca. Se si specificano gli attributi delle risorse, ad esempio${MyInstance.PublicIp}, CloudFormation restituisce gli stessi valori come se si utilizzasse la funzioneFn::GetAttintrinseca.Per scrivere letteralmente il simbolo del dollaro e le parentesi graffe (
${}), aggiungete un punto esclamativo (!) dopo la parentesi riccia aperta, ad esempio.${!CloudFormation risolve questo testo come.Literal}${Literal}Se utilizzi un modello di avvio, aggiungi una barra rovesciata
\prima del simbolo del dollaro, ad esempio\${!Literal}, altrimenti il valore letterale si risolverà in una stringa vuota. 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 di 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 e 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 maggiore leggibilità, l'esempio JSON impiega la funzione Fn::Join per separare ogni comando, invece di specificare l'intero script dei dati utente in un singolo valore 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'esempio YAML 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: