すべてのプロダクト
Search
ドキュメントセンター

Resource Orchestration Service:Fn::Sub

最終更新日:Jan 16, 2025

組み込み関数 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****

サポートされている関数

Fn::Indent