

這是新的 *CloudFormation 範本參考指南*。請更新您的書籤和連結。如需 CloudFormation 入門的說明，請參閱 [AWS CloudFormation 使用者指南](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 ]
```

## Parameters
<a name="w2aac24c58b9"></a>

index  
要擷取之物件的索引。這必須是從 0 至 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 區塊其中之一，請使用相同範本之 Resource (資源) 區段中的 `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`