La fonction Fn::Sub remplace les variables d'une chaîne par les valeurs que vous spécifiez.
Déclaration
-
JSON
{ "Fn::Sub": [ "String", { "Var1Name": "Var1Value", "Var2Name": "Var2Value", ... } ] } -
YAML
-
Syntaxe du nom complet de la fonction :
Fn::Sub: - String - Var1Name: Var1Value Var2Name: Var2Value ... -
Syntaxe de la forme courte :
!Sub [String, {"Var1Name": "Var1Value", "Var2Name": "Var2Value"}]
-
Paramètres
-
String : la chaîne contenant les variables à substituer.
Les variables utilisent le format ${VarName} et peuvent faire référence aux paramètres du modèle, aux pseudo-paramètres, aux noms de ressources, aux propriétés de ressources ou aux entrées d'un mappage clé-valeur. Si vous faites uniquement référence aux paramètres du modèle, aux pseudo-paramètres, aux noms de ressources et aux propriétés de ressources, le mappage clé-valeur est facultatif. Pour plus d'informations, consultez la section Exemple de syntaxe dans un modèle.
Lorsque vous faites référence aux paramètres du modèle, aux pseudo-paramètres ou aux noms de ressources tels que ${MyParameter}, Resource Orchestration Service (ROS) les résout de la même manière que la fonction Ref. Lorsque vous faites référence aux propriétés de ressources telles que ${MyInstance.InstanceId}, ROS les résout de la même manière que la fonction Fn::GetAtt.
RemarquePour empêcher la substitution d'une variable, ajoutez un point d'exclamation (!) après l'accolade ouvrante, comme dans ${!VarName}. Par exemple, ${!Literal} est résolu en texte littéral ${Literal}.
VarName : le nom d'une variable dans la chaîne.
VarValue : la valeur qui remplace la variable associée.
Valeur renvoyée
La chaîne avec toutes les variables remplacées par leurs valeurs correspondantes.
Exemple de syntaxe dans un modèle
Lorsque vous faites uniquement référence aux paramètres du modèle, aux pseudo-paramètres, aux noms de ressources ou aux attributs de ressources, vous pouvez utiliser directement le format ${} sans mappage clé-valeur. Pour plus d'informations, consultez la section Pseudo-paramètres.
-
Renvoyer la valeur d'un paramètre référencé :
Fn::Sub: ${String}{"Fn::Sub": "${String}"} -
Renvoyer la valeur d'une chaîne référencée :
Fn::Sub: String{"Fn::Sub": "String"}
Exemple de code :
ROSTemplateFormatVersion: '2015-09-01'
Outputs:
StackId1:
Value:
Fn::Sub: ${ALIYUN::StackId}
StackId2:
Value:
Fn::Sub: ALIYUN::StackId{
"ROSTemplateFormatVersion": "2015-09-01",
"Outputs": {
"StackId1": {
"Value": {
"Fn::Sub": "${ALIYUN::StackId}"
}
},
"StackId2": {
"Value": {
"Fn::Sub": "ALIYUN::StackId"
}
}
}
}Le résultat suivant est renvoyé :
StackId1: 0f848ecd-c6fb-47aa-add5-910799c2****
StackId2: ALIYUN::StackId
Exemple de modèle
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
VpcName:
Type: String
Default: vpc
Resources:
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
VpcName:
Ref: VpcName
CidrBlock: 10.0.XX.XX
Outputs:
Pseudo:
Value:
!Sub
- 'Var1: ${Var1}, Var2: ${Var2}, StackName: ${ALIYUN::StackName}, Region: ${ALIYUN::Region}'
- Var1: Var1Value
Var2: Var2Value
VpcId:
Value:
!Sub 'Return value of the resource: ${Vpc.VpcId}. Resource ID: ${Vpc}'{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"VpcName": {
"Type": "String",
"Default": "vpc"
}
},
"Resources": {
"Vpc": {
"Type": "ALIYUN::ECS::VPC",
"Properties": {
"VpcName": {
"Ref": "VpcName"
},
"CidrBlock": "10.0.XX.XX"
}
}
},
"Outputs": {
"Pseudo": {
"Value": {
"Fn::Sub": [
"Var1: ${Var1}, Var2: ${Var2}, StackName: ${ALIYUN::StackName}, Region: ${ALIYUN::Region}",
{
"Var1": "Var1Value",
"Var2": "Var2Value"
}
]
}
},
"VpcId": {
"Value": {
"Fn::Sub": "Return value of the resource: ${Vpc.VpcId}. Resource ID: ${Vpc}"
}
}
}
}Le résultat suivant est renvoyé :
Var1: Var1Value, Var2: Var2Value, StackName: SubTest, Region: cn-hangzhou
Return value of the resource: vpc-bp11eu7avmtvr37hl****. Resource ID: vpc-bp11eu7avmtvr37hl****