Rtm*_*tmY 6 amazon-web-services terraform
要求:
我想旋转 AWS ALB - 为此,我需要在两个不同的可用区中至少有两个子网。
(Terraform 显示了一个非常明确的错误,以防我们忘记 - 请参阅下面的错误 #1)。
我想检查相关 VPC 中当前拥有的公有子网数量,并确保其至少为 2。
我的尝试:
为此我将计算:
number_of_public_subnets_to_create = "${2 - length(data.aws_subnet_ids.customer_a_public_subnets.ids)}"
Run Code Online (Sandbox Code Playgroud)
对于上面的计算 - Terraform 有 2 种数据源类型: aws_subnet和aws_subnet_ids。
如果子网被标记 - 我们可以使用aws_subnet_ids数据源并添加一个简单的过滤器,如下所示:
data "aws_subnet_ids" "customer_a_public_subnets" {
vpc_id = "${data.aws_vpc.my-customer_a-vpc.id}"
tags {
Tier = "Public"
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
但是如果子网不包含“公共/私有”标签怎么办?
有没有简单的解决方案(也许是aws_subnet数据源上的通用过滤器)?
错误#1:
创建应用程序负载均衡器时出错:ValidationError:必须指定两个不同可用区中的至少两个子网。
小智 1
是的,我知道您可能花了很多时间根据公共/私有过滤子网。根据文档,有一个过滤器 -map-public-ip-on-launch检查启动时是否分配了公共 IPv4。
所以我们可以得到公共/私有子网,如下所示。
data "aws_subnets" "private" {
filter {
name = "vpc-id"
values = [
data.aws_vpc.shared.id
]
}
filter {
name = "map-public-ip-on-launch"
values = [false]
}
}
data "aws_subnets" "public" {
filter {
name = "vpc-id"
values = [
data.aws_vpc.shared.id
]
}
filter {
name = "map-public-ip-on-launch"
values = [true]
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以使用private和public来检索子网 ID。
| 归档时间: |
|
| 查看次数: |
2340 次 |
| 最近记录: |