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