AWS CloudFormation
ユーザーガイド (API バージョン 2010-05-15)

Fn::Select

組み込み関数 Fn::Select は、インデックスによってオブジェクトのリストから 1 つのオブジェクトを返します。

重要

Fn::Select では、null 値のチェックや、インデックスが配列の範囲外であるかどうかのチェックは行われません。どちらの条件でもスタックエラーが発生するため、有効なインデックスを選択し、リストに null 以外の値が含まれるようにする必要があります。

宣言

JSON

{ "Fn::Select" : [ index, listOfObjects ] }

YAML

完全名関数の構文:

Fn::Select: [ index, listOfObjects ]

短縮形の構文:

!Select [ index, listOfObjects ]

パラメータ

index

取得するオブジェクトのインデックスです。これは、ゼロから N-1 の値である必要があります。N は、配列内の要素の数を表します。

listOfObjects

選択するオブジェクトが含まれているリストです。このリストは null であってはならず、null エントリを含めることもできません。

戻り値

選択されたオブジェクトです。

基本的な例

次の例は、"grapes" を返します。

JSON

{ "Fn::Select" : [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ] }

YAML

!Select [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ]

 

カンマ区切りリストのパラメーター型

Fn::Select を使用して、CommaDelimitedList パラメーターからオブジェクトを選択することもできます。CommaDelimitedList パラメーターは、関連するパラメーターの値を結合するために使用できます。そうすることで、テンプレート内のパラメーターの総数を減らすことができます。たとえば、次のパラメーターは、3 つの CIDR ブロックのカンマ区切りリストを指定します。

JSON

"Parameters" : { "DbSubnetIpBlocks": { "Description": "Comma-delimited list of three CIDR blocks", "Type": "CommaDelimitedList", "Default": "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24" } }

YAML

Parameters: DbSubnetIpBlocks: Description: "Comma-delimited list of three CIDR blocks" Type: CommaDelimitedList Default: "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"

3 つの CIDR ブロックのうちの 1 つを指定するには、次のサンプルスニペットで示されているように、同じテンプレートの Resources セクションで Fn::Select を使用します。

JSON

"Subnet0": { "Type": "AWS::EC2::Subnet", "Properties": { "VpcId": { "Ref": "VPC" }, "CidrBlock": { "Fn::Select" : [ "0", {"Ref": "DbSubnetIpBlocks"} ] } } }

YAML

Subnet0: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref VPC CidrBlock: !Select [ 0, !Ref DbSubnetIpBlocks ]

 

ネストされた関数と短い形式の YAML

次の例では、ネストされた組み込み関数と !Select の短い形式を使用して有効なパターンを示します。短い形式の関数を連続してネストすることはできないため、!GetAZs !Ref のようなパターンは無効です。

YAML

AvailabilityZone: !Select - 0 - !GetAZs Ref: 'AWS::Region'

YAML

AvailabilityZone: !Select - 0 - Fn::GetAZs: !Ref 'AWS::Region'

サポートされている関数

Fn::Select インデックス値では、Ref 関数と Fn::FindInMap 関数を使用できます。

オブジェクトの Fn::Select リストでは、次の関数を使用できます。

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::Split

  • Ref