

這是新的 *CloudFormation 範本參考指南*。請更新您的書籤和連結。如需 CloudFormation 入門的說明，請參閱 [AWS CloudFormation 使用者指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `Fn::GetAZs`
<a name="intrinsic-function-reference-getavailabilityzones"></a>

`Fn::GetAZs` 內部函數會傳回陣列，以按字母順序列出指定區域的可用區域。由於客戶可以存取不同可用區域，因此 `Fn::GetAZs` 內部函數可讓範本作者撰寫範本來因應呼叫使用者的存取。如此一來，您就不需要將特定區域的可用區域完整清單寫死。

**重要**  
`Fn::GetAZs` 函數只會傳回具有預設子網路的可用區域；在沒有任何可用區域具備預設子網路的情況下，則會傳回所有可用區域。  
與 `describe-availability-zones` AWS CLI 命令的回應類似，不保證`Fn::GetAZs`函數的結果順序，並且可能會在新增新的可用區域時變更。

IAM 許可

為了使用 `Fn::GetAZs` 函數，您需要具備的許可取決於 Amazon EC2 執行個體的啟動平台而定。針對這兩種平台，您需要 Amazon EC2 `DescribeAvailabilityZones` 和 `DescribeAccountAttributes` 動作的許可。針對 EC2-VPC，您也需要 Amazon EC2 `DescribeSubnets` 動作的許可。

## 宣告
<a name="intrinsic-function-reference-getazs-declaration"></a>

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

```
{ "Fn::GetAZs" : "{{region}}" }
```

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

完整函式名稱的語法：

```
Fn::GetAZs: {{region}}
```

短格式的語法：

```
!GetAZs {{region}}
```

## Parameters
<a name="intrinsic-function-reference-getazs-parameters"></a>

region  <a name="region"></a>
您想要取得其可用區域的區域名稱。  
您可以使用 `AWS::Region` 虛擬參數來指定建立堆疊的區域。指定空白字串就相當於指定 `AWS::Region`。

## 傳回值
<a name="intrinsic-function-reference-getazs-return-value"></a>

區域的可用區域清單。

## 範例
<a name="intrinsic-function-reference-getazs-examples"></a>

### 評估區域
<a name="intrinsic-function-reference-getazs-examples-evaluate-region"></a>

針對這些範例，CloudFormation 會依據下列陣列評估 `Fn::GetAZs` — 假設使用者已在 `us-east-1` 區域中建立堆疊：

`[ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1e" ]`

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

```
1. { "Fn::GetAZs" : "" }
2. { "Fn::GetAZs" : { "Ref" : "AWS::Region" } }
3. { "Fn::GetAZs" : "us-east-1" }
```

#### YAML
<a name="intrinsic-function-reference-getazs-example1.yaml"></a>

```
1. Fn::GetAZs: ""
2. Fn::GetAZs:
3.   Ref: "AWS::Region"
4. Fn::GetAZs: us-east-1
```

 

### 指定子網路的可用區域
<a name="intrinsic-function-reference-getazs-examples-subnet-az"></a>

下列範例使用 `Fn::GetAZs` 指定子網路的可用區域：

#### JSON
<a name="intrinsic-function-reference-getazs-example.json"></a>

```
"mySubnet" : {
  "Type" : "AWS::EC2::Subnet",
  "Properties" : {
    "VpcId" : { 
      "Ref" : "VPC"   
    },
    "CidrBlock" : "10.0.0.0/24",
    "AvailabilityZone" : {
      "Fn::Select" : [ 
        0, 
        { 
          "Fn::GetAZs" : "" 
        } 
      ]
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getazs-example.yaml"></a>

```
mySubnet: 
  Type: AWS::EC2::Subnet
  Properties: 
    VpcId: 
      !Ref VPC
    CidrBlock: 10.0.0.0/24
    AvailabilityZone: 
      Fn::Select: 
        - 0
        - Fn::GetAZs: ""
```

 

### 使用簡短格式 YAML 的巢狀函數
<a name="intrinsic-function-reference-getazs-examples-nested-functions"></a>

下列範例說明以簡短格式 YAML 使用巢狀內部函數的有效模式。您不可以連續巢狀短格式函數，因此類似 `!GetAZs !Ref` 的模式是無效的。

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

```
1. AvailabilityZone: !Select
2.   - 0
3.   - !GetAZs
4.     Ref: 'AWS::Region'
```

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

```
1. AvailabilityZone: !Select
2.   - 0
3.   - Fn::GetAZs: !Ref 'AWS::Region'
```

## 支援的函數
<a name="intrinsic-function-reference-getazs-supported-functions"></a>

您可以在 `Ref` 函數中使用 `Fn::GetAZs` 函數。