マップデータ構造は、データをキーと値のペアのコレクションとして保存します。このトピックでは、テンプレートで定義されているマップから値をクエリする方法について説明します。
単一レベルのマップから値をクエリする
このセクションでは、単一レベルのマップから値をクエリするために呼び出すことができる関数について説明します。
テンプレートの 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
- InputMapJsonString2 レベルのマップから値をクエリする
このセクションでは、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 - SecondLevelKeyFn::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