AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Fn::Select

内部函数Fn::Select通过索引返回数据元列表中的单个数据元。

重要

Fn::Select 不会检查空值,或检查索引是否超出数组边界。两种条件都可导致堆栈错误,所以您应该确保您选择的索引有效且列表中包含非空值。

声明

JSON

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

YAML

完整函数名称的语法:

Copy
Fn::Select: [ index, listOfObjects ]

短格式的语法:

Copy
!Select [ index, listOfObjects ]

参数

索引

待检索数据元的索引。索引必须是零到 N-1 之间的某个值,其中 N 代表数组中元素的数量。

listOfObjects

选择数据元的列表。该列表不得为空,且不能包含空项目。

返回值

选定的数据元。

示例

基本示例

下面的示例返回:"grapes"

JSON

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

YAML

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

逗号分隔列表参数类型

您可以使用 Fn::SelectCommaDelimitedList 参数选择一个对象。您可以使用 CommaDelimitedList 参数合并相关参数的值,这样可减少模板中的参数总数。例如,以下参数指定包含三个 CIDR 块的逗号分隔列表:

JSON
Copy
"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
Copy
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
Copy
"Subnet0": { "Type": "AWS::EC2::Subnet", "Properties": { "VpcId": { "Ref": "VPC" }, "CidrBlock": { "Fn::Select" : [ "0", {"Ref": "DbSubnetIpBlocks"} ] } } }
YAML
Copy
Subnet0: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref VPC CidrBlock: !Select [ 0, !Ref DbSubnetIpBlocks ]

具有短格式 YAML 的嵌套函数

以下示例显示了使用具有 !Select 短格式的嵌套内部函数的有效模式。您不能连续嵌套短格式函数,因此 !GetAZs !Ref 之类的模式无效。

YAML

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

YAML

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

支持的函数

对于 Fn::Select 索引值,您可以使用 RefFn::FindInMap 函数。

对于对象的 Fn::Select 列表,您可以使用以下函数:

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::Split

  • Ref