我正在处理的 VPC 有 3 个逻辑层:Web、App 和 DB。对于每一层,每个可用区内都有一个子网。我正在使用的区域中共有 6 个子网。
我正在尝试使用模块和count
参数创建 EC2 实例,但我不知道如何告诉 terraform 使用 App 层的两个子网。我有一个额外的限制是使用静态 IP 地址(或具有确定性私有名称的方法)
我在玩资源
resource "aws_instance" "app_server" {
...
count = "${var.app_servers_count}"
# Not all at the same time, though!
availability_zone = ...
subnet_id = ...
private_ip = ...
}
到目前为止我尝试过/想到的事情:
- 使用
data "aws_subnet" "all_app_subnets" {...}
,按名称过滤,获取所有匹配的子网并将它们用作列表。但aws_subnet
不能返回列表; - 用于
data "aws_availability_zones" {...}
查找所有区域。但是我仍然有分配正确子网的问题; - 使用
data "aws_subnet_ids" {...}
看起来是最好的选择。但显然它没有过滤选项来匹配网络名称 - 将子网 ID 作为字符串列表传递给模块。但我不想对 ID 进行硬编码,这不是自动化;
- 将子网硬编码为
data "aws_subnet" "app_subnet_1" {...}
,data "aws_subnet" "app_subnet_2" {...}
但是我必须为每个我不喜欢的子网使用单独的变量集; - 像上面一样获取每个子网的信息,然后创建一个
map
以列表形式访问它。但是在变量定义中使用插值是不可能的; - 不使用模块并对每个环境的每个实例进行硬编码。嗯……真的吗?
我真的没有主意了。似乎没有人必须在特定的子网中部署实例并保持良好的抽象程度。我只看到未指定子网或人们只对所有内容使用默认值的示例。这真的很不寻常吗?
在此先感谢大家。