问题
我有一个用于生成EC2启动模板的变量和一个用于使用可用区域列表的变量。我希望启动模板变量中的块指定有关实现的详细信息,并且我希望代码按照每个az创建一个启动模板(这样我就可以正确地配置网络接口块)。但是我不希望每个AZ都需要一个ec2配置块(我希望它是动态的)
是否有一种方法可以遍历可用性区域列表,为每个AZ生成一个新的映射(在启动模板配置中为每个映射生成一个映射),并将AZ作为所述映射中的一个键?
码块
# Some code redacted for brevity
module "env_spinup" {
availability_zones = ["az-1", "az-2"]
ec2_groups = {
main_ec2_group = {
instance_count = 1
extra_security_groups = []
root_volume_size = 200
extra_tags = {}
management_allow_list = {}
}
}
}ec2_groups参数的期望输出(将其解析为本地):
ec2_groups = {
main_ec2_group_az1 = {
az = "az-1"
instance_count = 1
extra_security_groups = []
root_volume_size = 200
extra_tags = {}
management_allow_list = {}
}
main_ec2_group_az2 = {
az = "az-2"
instance_count = 1
extra_security_groups = []
root_volume_size = 200
extra_tags = {}
management_allow_list = {}
}
}发布于 2022-08-30 18:46:52
您可以使用一个简单的for表达式来完成这一任务:
locals {
availability_zones = ["az-1", "az-2"]
ec2_groups = {
for az in local.availability_zones : "main_ec2_group_${az}" => {
az = az
instance_count = 1
extra_security_groups = []
root_volume_size = 200
extra_tags = {}
management_allow_list = {}
}
}
}这就产生了:
+ ec2_groups = {
+ main_ec2_group_az-1 = {
+ az = "az-1"
+ extra_security_groups = []
+ extra_tags = {}
+ instance_count = 1
+ management_allow_list = {}
+ root_volume_size = 200
}
+ main_ec2_group_az-2 = {
+ az = "az-2"
+ extra_security_groups = []
+ extra_tags = {}
+ instance_count = 1
+ management_allow_list = {}
+ root_volume_size = 200
}
}发布于 2022-08-31 16:58:52
最后,我使用https://www.terraform.io/language/functions/setproduct生成了一个实例列表,映射到az的实例列表中。
https://stackoverflow.com/questions/73546265
复制相似问题