Fn::Sub
La fonction intrinsèque Fn::Sub
permet de remplacer les variables contenues dans une chaîne d'entrée par des valeurs que vous spécifiez. Dans vos modèles, vous pouvez utiliser cette fonction pour construire des commandes ou des sorties qui incluent des valeurs qui ne sont pas disponibles tant que vous ne créez ou ne mettez à jour une pile.
Déclaration
Les sections suivantes présentent la syntaxe de la fonction.
JSON
{ "Fn::Sub" : [
String
, {Var1Name
:Var1Value
,Var2Name
:Var2Value
} ] }
Si vous remplacez uniquement des paramètres de modèle, des ID logiques de ressources ou des attributs de ressource dans le paramètre
, ne spécifiez pas de mappage de variable.String
{ "Fn::Sub" :
String
}
YAML
Syntaxe pour le nom complet de la fonction :
Fn::Sub: -
String
-Var1Name
:Var1Value
Var2Name
:Var2Value
Syntaxe pour la forme courte :
!Sub -
String
-Var1Name
:Var1Value
Var2Name
:Var2Value
Si vous remplacez uniquement des paramètres de modèle, des ID logiques de ressources ou des attributs de ressource dans le paramètre
, ne spécifiez pas de mappage de variable.String
Syntaxe pour le nom complet de la fonction :
Fn::Sub:
String
Syntaxe pour la forme courte :
!Sub
String
Paramètres
String
-
Chaîne contenant des variables que AWS CloudFormation remplace par les valeurs qui leur sont associées lors de l'exécution. Les variables s'écrivent sous la forme
${
. Il peut s'agir de noms de paramètres de modèle, des ID logiques de ressources, des attributs de ressource ou une variable dans un mappage clé-valeur. Si vous spécifiez uniquement des noms de paramètres de modèle, des ID logiques de ressources et des attributs de ressource, ne spécifiez pas de mappage clé-valeur.MyVarName
}Si vous spécifiez des noms de paramètres de modèle ou des ID logiques de ressources, tels que
${InstanceTypeParameter}
, CloudFormation retourne les mêmes valeurs que si vous utilisiez la fonction intrinsèqueRef
. Si vous spécifiez des attributs de ressource, tels que${MyInstance.PublicIp}
, CloudFormation retourne les mêmes valeurs que si vous utilisiez la fonction intrinsèqueFn::GetAtt
.Pour écrire un signe dollar et des accolades (
${}
) de façon littérale, ajoutez un point d'exclamation (!
) après l'accolade ouvrante, par exemple,${!
. CloudFormation résout ce texte enLiteral
}${
.Literal
} VarName
-
Nom d'une variable que vous avez incluse dans le paramètre
String
. VarValue
-
Valeur que CloudFormation remplace par le nom de variable associé lors de l'exécution.
Valeur renvoyée
CloudFormation retourne la chaîne d'origine en remplaçant les valeurs de toutes les variables.
Exemples
Les exemples suivants montrent comment utiliser la fonction Fn::Sub
.
Fn::Sub
avec un mappage
L'exemple suivant utilise un mappage pour remplacer la variable ${Domain}
par la valeur résultant de la fonction Ref
.
JSON
{ "Name": { "Fn::Sub": [ "www.${Domain}", { "Domain": { "Ref": "RootDomainName" } } ] } }
YAML
Name: !Sub - 'www.${Domain}' - Domain: !Ref RootDomainName
Fn::Sub
sans mappage
L'exemple suivant utilise Fn::Sub avec les pseudos-paramètres AWS::Region
et AWS::AccountId
et l'ID logique de ressource vpc
pour créer l'ARN (Amazon Resource Name) pour 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}'
Commandes UserData
L'exemple suivant utilise Fn::Sub
pour remplacer les pseudo-paramètres AWS::StackName
et AWS::Region
pour le nom et la région de pile réels à l'exécution.
JSON
Pour plus de lisibilité, l'exemple JSON utilise la fonction Fn::Join
pour séparer chaque commande, au lieu de spécifier l'intégralité du script de données utilisateur dans une même valeur de chaîne.
"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'exemple YAML utilise un bloc littéral pour spécifier le script de données utilisateur.
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}
Fonctions prises en charge
Pour le paramètre String
, vous ne pouvez pas utiliser de fonction. Vous devez spécifier une valeur de type chaîne.
Pour les paramètres VarName
et VarValue
, vous pouvez utiliser les fonctions suivantes :
-
Fn::Base64
-
Fn::FindInMap
-
Fn::GetAtt
-
Fn::GetAZs
-
Fn::If
-
Fn::ImportValue
-
Fn::Join
-
Fn::Select
-
Ref