Fn::GetAZs
内置函数 Fn::GetAZs
返回一个数组,该数组按字母顺序列出了指定区域的可用区。因为客户可访问不同的可用区,模板作者可通过内部函数 Fn::GetAZs
写出适用于调用用户访问的模板。这样,您就不必对指定区域的可用区的完整列表进行硬编码。
重要
Fn::GetAZs
函数仅返回有默认子网的可用区,除非所有可用区都没有默认子网,在后面这种情况下,将返回所有可用区。
与 describe-availability-zones
Amazon CLI 命令的响应类似,Fn::GetAZs
函数的结果顺序是不确定的,可能会在添加新的可用区时发生变化。
IAM 权限
使用 Fn::GetAZs
函数所需的权限取决于您用于启动 Amazon EC2 实例的平台。对于这两个平台,您需要对 Amazon EC2 DescribeAvailabilityZones
和 DescribeAccountAttributes
操作具有权限。对于 EC2-VPC,您还需要对 Amazon EC2 DescribeSubnets
操作具有权限。
声明
JSON
{ "Fn::GetAZs" : "
区域
" }
参数
- 区域
-
要获得其可用区的区域的名称。
您可以使用
AWS::Region
伪参数指定在其中创建堆栈的区域。指定空字符串与指定AWS::Region
是对等的。
返回值
区域的可用区列表。
示例
计算区域
对于这些示例,CloudFormation 根据以下数组计算 Fn::GetAZs
,假设用户已在 us-east-1
区域创建了堆栈:
[ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1e" ]
JSON
{ "Fn::GetAZs" : "" } { "Fn::GetAZs" : { "Ref" : "AWS::Region" } } { "Fn::GetAZs" : "us-east-1" }
YAML
Fn::GetAZs: "" Fn::GetAZs: Ref: "AWS::Region" Fn::GetAZs: us-east-1
指定子网的可用区
以下示例使用 Fn::GetAZs
来指定子网的可用区:
JSON
"mySubnet" : { "Type" : "AWS::EC2::Subnet", "Properties" : { "VpcId" : { "Ref" : "VPC" }, "CidrBlock" : "10.0.0.0/24", "AvailabilityZone" : { "Fn::Select" : [ 0, { "Fn::GetAZs" : "" } ] } } }
YAML
mySubnet: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref VPC CidrBlock: 10.0.0.0/24 AvailabilityZone: Fn::Select: - 0 - Fn::GetAZs: ""
具有短格式 YAML 的嵌套函数
以下示例显示使用具有短格式 YAML 的嵌套内部函数的有效模式。您不能连续嵌套短格式函数,因此 !GetAZs !Ref
之类的模式无效。
YAML
AvailabilityZone: !Select - 0 - !GetAZs Ref: 'AWS::Region'
YAML
AvailabilityZone: !Select - 0 - Fn::GetAZs: !Ref 'AWS::Region'
支持的函数
您可以在 Fn::GetAZs
函数中使用 Ref 函数。