A função Fn::Sub substitui variáveis em uma string pelos valores especificados.
Declaração
-
JSON
{ "Fn::Sub": [ "String", { "Var1Name": "Var1Value", "Var2Name": "Var2Value", ... } ] } -
YAML
-
Sintaxe do nome completo da função:
Fn::Sub: - String - Var1Name: Var1Value Var2Name: Var2Value ... -
Sintaxe da forma abreviada:
!Sub [String, {"Var1Name": "Var1Value", "Var2Name": "Var2Value"}]
-
Parâmetros
-
String: a string que contém as variáveis a substituir.
As variáveis usam o formato ${VarName} e podem referenciar parâmetros de modelo, pseudoparâmetros, nomes de recursos, propriedades de recursos ou entradas de mapa chave-valor. O mapa chave-valor é opcional se você referenciar apenas parâmetros de modelo, pseudoparâmetros, nomes de recursos e propriedades de recursos. Para mais informações, consulte Exemplo de sintaxe em um modelo.
Ao referenciar parâmetros de modelo, pseudoparâmetros ou nomes de recursos como ${MyParameter}, o Resource Orchestration Service (ROS) os resolve da mesma forma que a função Ref. Para propriedades de recursos como ${MyInstance.InstanceId}, o ROS as resolve da mesma maneira que a função Fn::GetAtt.
NotaPara impedir a substituição de uma variável, adicione um ponto de exclamação (!) após a chave de abertura, como em ${!VarName}. Por exemplo, ${!Literal} resulta no texto literal ${Literal}.
VarName: o nome de uma variável na string.
VarValue: o valor que substitui a variável associada.
Valor retornado
A string com todas as variáveis substituídas pelos valores correspondentes.
Exemplo de sintaxe em um modelo
Se você referenciar apenas parâmetros de modelo, pseudoparâmetros, nomes de recursos ou atributos de recursos, use diretamente o formato ${} sem um mapa chave-valor. Para mais informações, consulte Pseudoparâmetros.
-
Retorna o valor de um parâmetro referenciado:
Fn::Sub: ${String}{"Fn::Sub": "${String}"} -
Retorna o valor de uma string referenciada:
Fn::Sub: String{"Fn::Sub": "String"}
Código de exemplo:
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"
}
}
}
}
Resultado retornado:
StackId1: 0f848ecd-c6fb-47aa-add5-910799c2****
StackId2: ALIYUN::StackId
Modelo de exemplo
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}"
}
}
}
}
Resultado retornado:
Var1: Var1Value, Var2: Var2Value, StackName: SubTest, Region: cn-hangzhou
Return value of the resource: vpc-bp11eu7avmtvr37hl****. Resource ID: vpc-bp11eu7avmtvr37hl****