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

Resource Orchestration Service:テンプレートでマップから値をクエリする方法は?

最終更新日:Jan 16, 2025

マップデータ構造は、データをキーと値のペアのコレクションとして保存します。このトピックでは、テンプレートで定義されているマップから値をクエリする方法について説明します。

単一レベルのマップから値をクエリする

このセクションでは、単一レベルのマップから値をクエリするために呼び出すことができる関数について説明します。

説明

テンプレートの Mappings セクションに単一レベルのマップを定義しないことをお勧めします。Resource Orchestration Service (ROS) は、Mappings セクションの単一レベルのマップから値をクエリできません。詳細については、「Mappings」をご参照ください。

Fn::Select

説明

この関数を使用して、単一レベルのマップから値をクエリすることをお勧めします。

  • JSON オブジェクトを指定する場合、Fn::Select 関数を呼び出して、key_a に対応する value_a をクエリできます。詳細については、「Fn::Select」をご参照ください。

    ROSTemplateFormatVersion: '2015-09-01'
    Parameters:
    	InputMap:
      	Type: Json  
    Outputs:
    	value_a:
      	Value:
        	Fn::Select:
        	- key_a
        	- InputMap
  • この関数を呼び出して、ディクショナリから値をクエリすることもできます。

    ROSTemplateFormatVersion: '2015-09-01'
    Resources:
      Mock:
        Type: MockResource
        Properties:
          Prop1:
            Fn::Select:
            - key
            - key1: value1
              key2: value2

Fn::GetJsonValue

JSON 文字列を指定する場合、Fn::GetJsonValue 関数を呼び出して、第 1 層キーに対応する値をクエリできます。詳細については、「Fn::GetJsonValue」をご参照ください。

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
	InputMapJsonString:
  	Type: Json
Outputs:
	value_a:
  	Value:
    	Fn::GetJsonValue:
    	- key_a
    	- InputMapJsonString

2 レベルのマップから値をクエリする

このセクションでは、2 レベルのマップから値をクエリするために呼び出すことができる関数について説明します。

Fn::FindInMap

説明

この関数は、Mappings セクションで定義されている 2 レベルのマップから値をクエリする場合にのみ適しています。

Fn::FindInMap 関数を呼び出して、テンプレートの Mappings セクションで定義されている 2 レベルのマップから値をクエリできます。詳細については、「Mappings」および「Fn::FindInMap」をご参照ください。

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  regionParam:
    Description: Elastic Compute Service (ECS) インスタンスを作成するリージョン
    Type: String
    AllowedValues:
      - hangzhou
      - beijing
Mappings:
  RegionMap:
    hangzhou:
      '32': m-25l0rcfjo
      '64': m-25l0rcfj1
    beijing:
      '32': m-25l0rcfj2
      '64': m-25l0rcfj3
Resources:
  WebServer:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId:
        Fn::FindInMap:
          - RegionMap
          - Ref: regionParam
          - '32'

Fn::Select

説明

この関数は、Mappings セクションで定義されていない 2 レベルのマップから値をクエリする場合に適しています。

Fn::Select 関数をネストして、2 レベルのマップから値をクエリできます。詳細については、「Fn::Select」をご参照ください。

Fn::Select:
- key_1_1:
- Fn::Select:
	- key_1
	- key_1:
    	key_1_1: value_1_1
    	key_1_2: value_1_2
    key_2:
      key_2_1: value_2_1
      key_2_2: value_2_2

この例では、value_1_1 が返されます。

複数レベルのマップから値をクエリする

このセクションでは、複数レベルのマップから値をクエリするために呼び出すことができる関数について説明します。

Fn::Select

  • Fn::Select 関数と Fn::FindInMap 関数をネストして、Mappings セクションで定義されている複数レベルのマップから値をクエリできます。ROS では、Fn::FindInMap 関数のみを使用して Mappings セクションの値をクエリできます。Mappings セクションで 3 レベル以上のマップから値をクエリする場合は、Fn::FindInMap 関数を使用して、2 レベルのマップからマップコレクションをクエリできます。次に、Fn::Select 関数を使用して目的の値をクエリできます。

     Fn::Select:
       - key 
       - Fn::FindInMap:
            - MapName
            - TopLevelKey
            - SecondLevelKey
  • Fn::Select 関数を複数回ネストして、Mappings セクションで定義されていない複数レベルのマップから値をクエリすることもできます。詳細については、「Fn::Select」をご参照ください。

Fn::Jq

この関数を使用して、複数レベルのマップのクエリに関するビジネス要件を満たす複数のフィルターを指定できます。詳細については、「Fn::Jq」をご参照ください。

Fn::Jq:
  - All
  - '.parameters[] | {"param_name": .name, "param_type":.type}'
  - changeSet:
      items: []
      kind: git
    id: 2013-12-27_00-09-37
    parameters:
      - name: PKG_TAG_NAME
        value: trunk
      - name: GIT_COMMIT
        value: master
      - name: TRIGGERED_JOB
        value: trunk-buildall

この例では、次の結果が返されます。

- param_name: PKG_TAG_NAME
- param_name: GIT_COMMIT
- param_name: TRIGGERED_JOB