

这是新的《CloudFormation 模板参考指南》**。请更新您的书签和链接。有关开始使用 CloudFormation 的帮助，请参阅《AWS CloudFormation 用户指南》[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

# `Fn::Select`
<a name="intrinsic-function-reference-select"></a>

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

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

## 声明
<a name="w2aac24c58b7"></a>

### JSON
<a name="intrinsic-function-reference-select-syntax.json"></a>

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

### YAML
<a name="intrinsic-function-reference-select-syntax.yaml"></a>

完整函数名称的语法：

```
Fn::Select: [ index, listOfObjects ] 
```

短格式的语法：

```
!Select [ index, listOfObjects ]
```

## 参数
<a name="w2aac24c58b9"></a>

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

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

## 返回值
<a name="w2aac24c58c11"></a>

选定的对象。

## 示例
<a name="w2aac24c58c13"></a>

### 基本示例
<a name="w2aac24c58c13b3"></a>

以下示例返回：`"grapes"`。

#### JSON
<a name="intrinsic-function-reference-select-example0.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-select-example0.yaml"></a>

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

 

### 逗号分隔列表参数类型
<a name="w2aac24c58c13b5"></a>

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

#### JSON
<a name="intrinsic-function-reference-select-example1.json"></a>

```
"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
<a name="intrinsic-function-reference-select-example1.yaml"></a>

```
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
<a name="intrinsic-function-reference-select-example2.json"></a>

```
"Subnet0": {
  "Type": "AWS::EC2::Subnet",
    "Properties": {
      "VpcId": { "Ref": "VPC" },
      "CidrBlock": { "Fn::Select" : [ "0", {"Ref": "DbSubnetIpBlocks"} ] }
    }
}
```

#### YAML
<a name="intrinsic-function-reference-select-example2.yaml"></a>

```
Subnet0: 
  Type: AWS::EC2::Subnet
  Properties: 
    VpcId: !Ref VPC
    CidrBlock: !Select [ 0, !Ref DbSubnetIpBlocks ]
```

 

### 具有短格式 YAML 的嵌套函数
<a name="w2aac24c58c13b7"></a>

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

#### YAML
<a name="intrinsic-function-reference-select-example3.yaml"></a>

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

#### YAML
<a name="intrinsic-function-reference-select-example4.yaml"></a>

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

## 支持的函数
<a name="w2aac24c58c15"></a>

对于 `Fn::Select` 索引值，您可以使用 `Ref` 和 `Fn::FindInMap` 函数。

对于对象的 `Fn::Select` 列表，您可以使用以下函数：
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::Split`
+ `Ref`