組み込み関数 Fn::Sub は、文字列内の変数を指定した値に置き換えます。
宣言
JSON
{ "Fn::Sub": [ "String", { "Var1Name": "Var1Value", "Var2Name": "Var2Value", ... } ] }YAML
完全な関数名の構文:
Fn::Sub: - String - Var1Name: Var1Value Var2Name: Var2Value ...短縮形の構文:
!Sub [String, {"Var1Name": "Var1Value", "Var2Name": "Var2Value"}]
パラメーター
String: 新しい値に置き換える変数が含まれる文字列。
${VarName} 形式で変数を指定する場合、変数はテンプレートパラメーター、擬似パラメーター、リソース名、リソースプロパティ、またはキーと値のマップ内の変数にすることができます。テンプレートパラメーター、擬似パラメーター、リソース名、およびリソースプロパティのみを指定する場合は、キーと値のマップを指定する必要はありません。詳細については、テンプレートのサンプル構文をご参照ください。
${VarName} 形式(${MyParameter} など)でテンプレートパラメーター、擬似パラメーター、またはリソース名を指定すると、Resource Orchestration Service (ROS) は組み込み関数 Ref を使用した場合と同じ値を返します。${VarName} 形式(${MyInstance.InstanceId} など)でリソースプロパティを指定すると、ROS は組み込み関数 Fn::GetAtt を使用した場合と同じ値を返します。
説明変数を置き換えない場合は、開始中括弧({)に感嘆符(!)を追加して、${!VarName} 形式を使用します。たとえば、${!Literal} を指定すると、ROS はテキストを ${Literal} として解決します。
VarName: 文字列に含まれる変数の名前。
VarValue: ROS が関連付けられた変数名に置き換える値。
戻り値
変数が新しい値に置き換えられた文字列。
テンプレートのサンプル構文
テンプレートパラメーター、擬似パラメーター、リソース名、およびリソース属性のみを参照する必要がある場合は、辞書型のデータを使用して変数を置き換える必要はありません。この場合、${} 形式を使用できます。詳細については、擬似パラメーターをご参照ください。
参照されるパラメーターの値を返します:
Fn::Sub: ${String}{"Fn::Sub": "${String}"}参照される文字列の値を返します:
Fn::Sub: String{"Fn::Sub": "String"}
サンプルコード:
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"
}
}
}
}次の結果が返されます。
StackId1: 0f848ecd-c6fb-47aa-add5-910799c2****
StackId2: ALIYUN::StackIdサンプルテンプレート
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}"
}
}
}
}次の結果が返されます。
Var1: Var1Value, Var2: Var2Value, StackName: SubTest, Region: cn-hangzhou
Return value of the resource: vpc-bp11eu7avmtvr37hl****. Resource ID: vpc-bp11eu7avmtvr37hl****