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
: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
parametro, non specificate una mappa variabile.String
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
${
. 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.MyVarName
}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 funzioneRef
intrinseca. Se si specificano gli attributi delle risorse, ad esempio${MyInstance.PublicIp}
, CloudFormation restituisce gli stessi valori come se si utilizzasse la funzioneFn::GetAtt
intrinseca.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
} 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: