这是新的《Amazon CloudFormation 模板参考指南》。请更新您的书签和链接。有关开始使用 CloudFormation 的帮助,请参阅《Amazon CloudFormation 用户指南》https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/Welcome.html。
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