Fn::Select - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Fn::Select

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

重要

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

声明

JSON

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

YAML

完整函数名称的语法:

Fn::Select: [ index, listOfObjects ]

短格式的语法:

!Select [ index, listOfObjects ]

参数

index

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

listOfObjects

选择对象的列表。该列表不得为空,且不能包含空项目。

返回值

选定的对象。

示例

基本示例

以下示例返回:"grapes"

JSON

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

YAML

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

 

逗号分隔列表参数类型

您可以使用 Fn::SelectCommaDelimitedList 参数选择一个对象。您可以使用 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 索引值,您可以使用 RefFn::FindInMap 函数。

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

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::Split

  • Ref