

这是新的《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::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" : "区域" }
```

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

完整函数名称的语法：

```
Fn::GetAZs: 区域
```

短格式的语法：

```
!GetAZs 区域
```

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

区域  <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` 函数。