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 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
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: