首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform -基于可用性区域列表生成一个新的地图地图

Terraform -基于可用性区域列表生成一个新的地图地图
EN

Stack Overflow用户
提问于 2022-08-30 17:15:26
回答 2查看 63关注 0票数 0

问题

我有一个用于生成EC2启动模板的变量和一个用于使用可用区域列表的变量。我希望启动模板变量中的块指定有关实现的详细信息,并且我希望代码按照每个az创建一个启动模板(这样我就可以正确地配置网络接口块)。但是我不希望每个AZ都需要一个ec2配置块(我希望它是动态的)

是否有一种方法可以遍历可用性区域列表,为每个AZ生成一个新的映射(在启动模板配置中为每个映射生成一个映射),并将AZ作为所述映射中的一个键?

码块

代码语言:javascript
复制
# 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参数的期望输出(将其解析为本地):

代码语言:javascript
复制
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 = {}
    }
  }
EN

回答 2

Stack Overflow用户

发布于 2022-08-30 18:46:52

您可以使用一个简单的for表达式来完成这一任务:

代码语言:javascript
复制
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 = {}
    }
  }
}

这就产生了:

代码语言:javascript
复制
  + 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
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2022-08-31 16:58:52

最后,我使用https://www.terraform.io/language/functions/setproduct生成了一个实例列表,映射到az的实例列表中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73546265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档