Fn::Select
内部函数Fn::Select
通过索引返回对象列表中的单个对象。
重要
Fn::Select
不会检查空值,或检查索引是否超出数组边界。两种条件都可导致堆栈错误,所以您应该确保您选择的索引有效且列表中包含非空值。
声明
JSON
{ "Fn::Select" : [
index
,listOfObjects
] }
YAML
完整函数名称的语法:
Fn::Select: [
index
,listOfObjects
]
短格式的语法:
!Select [
index
,listOfObjects
]
参数
- 索引
-
待检索对象的索引。索引必须是零到 N-1 之间的某个值,其中 N 代表数组中元素的数量。
- listOfObjects
-
选择对象的列表。该列表不得为空,且不能包含空项目。
返回值
选定的对象。
示例
基本示例
以下示例返回:"grapes"
。
JSON
{ "Fn::Select" : [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ] }
YAML
!Select [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ]
逗号分隔列表参数类型
您可以使用 Fn::Select
从 CommaDelimitedList
参数选择一个对象。您可以使用 CommaDelimitedList
参数合并相关参数的值,这样可减少模板中的参数总数。例如,以下参数指定包含三个 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"
要指定三个 CIDR 块之一,请在同一模板的 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