首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用aws_rds_cluster_instance的多个for_each

问使用aws_rds_cluster_instance的多个for_each
EN

Stack Overflow用户
提问于 2021-11-05 16:49:13
回答 1查看 398关注 0票数 1

我想创建一个模块

在我的路由variable.tfvars文件中,我正在传递下面的输入。

代码语言:javascript
复制
rds_aurora = [
  {
    cluster_identifier               = "aurora-cluster-mysql-qa"
    cluster_instance_count           = 2
    engine                           = "aurora-mysql"
    engine_version                   = "5.7.mysql_aurora.2.07.1"
  },
  {
    cluster_identifier               = "aurora-cluster-mysql-dev"
    cluster_instance_count           = 1
    engine                           = "aurora-mysql"
    engine_version                   = "5.7.mysql_aurora.2.07.1"
  } 
}

Module.tf文件

代码语言:javascript
复制
 resource "aws_rds_cluster_instance" "cluster_instances" {
  for_each                            = { for rds_aurora_instance in var.rds_aurora : "${rds_aurora_instance.cluster_identifier}-{cluster_instance_count}" => rds_aurora_instance }
  identifier                          = each.value.key
  cluster_identifier                  = each.value.cluster_identifier
  engine                              = each.value.engine
  engine_version                      = each.value.engine_version
}

我试图在下面的形式转换变量,以便in可以在模块中使用它。

代码语言:javascript
复制
aurora-cluster-mysql-qa-0  => {
    cluster_identifier               = "aurora-cluster-mysql-qa"
    cluster_instance_count           = 2
    engine                           = "aurora-mysql"
    engine_version                   = "5.7.mysql_aurora.2.07.1"
  }
aurora-cluster-mysql-qa-1  => {
    cluster_identifier               = "aurora-cluster-mysql-qa"
    cluster_instance_count           = 2
    engine                           = "aurora-mysql"
    engine_version                   = "5.7.mysql_aurora.2.07.1"
  }
 
aurora-cluster-mysql-dev-0 => {
    cluster_identifier               = "aurora-cluster-mysql-dev"
    cluster_instance_count           = 2
    engine                           = "aurora-mysql"
    engine_version                   = "5.7.mysql_aurora.2.07.1"
  }

下面的表达式似乎不适用于.Please帮助。我想使用-每个只在修改/删除任何块时,我不面临可变块顺序问题。

代码语言:javascript
复制
 for_each                            = { for rds_aurora_instance in var.rds_aurora : "${rds_aurora_instance.cluster_identifier}-{cluster_instance_count}" => rds_aurora_instance }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-07 21:27:23

这不是一个简单的转换,您的rds_aurora是一个对象数组,我们在该对象的一个属性中有一个计数,我们需要一个中间变量来转换它,这需要几个循环.

以下是我要做的事:

代码语言:javascript
复制
provider "aws" {
  region = "us-east-2"
}

locals {
  rds_aurora = [
    {
      cluster_identifier     = "aurora-cluster-mysql-qa"
      cluster_instance_count = 2
      engine                 = "aurora-mysql"
      engine_version         = "5.7.mysql_aurora.2.07.1"
    },
    {
      cluster_identifier     = "aurora-cluster-mysql-dev"
      cluster_instance_count = 1
      engine                 = "aurora-mysql"
      engine_version         = "5.7.mysql_aurora.2.07.1"
    }
  ]

  data = { for i in flatten([
    for x in local.rds_aurora :
    [
      for y in range(x.cluster_instance_count) :
      {
        "id"                     = y
        "cluster_identifier"     = x.cluster_identifier
        "cluster_instance_count" = 2
        "engine"                 = x.engine
        "engine_version"         = x.engine_version
      }
    ]
    ]) : "${i.cluster_identifier}_${i.id}" => i
  }
}

output "new_data" {
  value = local.data
}

让我们分解一下正在发生的事情,我们有3个循环

  • for i in flatten([

这个我们把最后一个对象together

  • for x in local.rds_aurora

只需对rds_aurora

  • for y in range(x.cluster_instance_count)中的元素进行循环

这是一个获得id (0,1)的方法,我们将后者连接到最终对象。

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

https://stackoverflow.com/questions/69856630

复制
相关文章

相似问题

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