多个 aws_rds_cluster_instance 使用 for_each
Multiple aws_rds_cluster_instance using for_each
我想创建一个模块
在我的路径 variable.tfvars 文件中,我正在传递下面的输入。
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 文件
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
}
我正在尝试以下面的形式转换变量,以便可以在模块中使用它。
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"
}
以下表达式似乎无效。请帮忙。
我只想在 modification/removing 任何块期间使用 for-each,我不会遇到可变块顺序问题。
for_each = { for rds_aurora_instance in var.rds_aurora : "${rds_aurora_instance.cluster_identifier}-{cluster_instance_count}" => rds_aurora_instance }
这不是一个简单的转换,您的 rds_aurora
是一个对象数组,我们在该对象的一个属性中有一个计数,我们将需要一个中间变量来转换它这将需要几个循环...
这是我会做的:
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([
这个我们把最终的对象放在一起
for x in local.rds_aurora
只是循环遍历 rds_aurora 中的元素
for y in range(x.cluster_instance_count)
这是获取我们稍后将要获取的 id (0, 1) 的那个
连接最终对象
我想创建一个模块
在我的路径 variable.tfvars 文件中,我正在传递下面的输入。
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 文件
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
}
我正在尝试以下面的形式转换变量,以便可以在模块中使用它。
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"
}
以下表达式似乎无效。请帮忙。 我只想在 modification/removing 任何块期间使用 for-each,我不会遇到可变块顺序问题。
for_each = { for rds_aurora_instance in var.rds_aurora : "${rds_aurora_instance.cluster_identifier}-{cluster_instance_count}" => rds_aurora_instance }
这不是一个简单的转换,您的 rds_aurora
是一个对象数组,我们在该对象的一个属性中有一个计数,我们将需要一个中间变量来转换它这将需要几个循环...
这是我会做的:
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([
这个我们把最终的对象放在一起for x in local.rds_aurora
只是循环遍历 rds_aurora 中的元素
for y in range(x.cluster_instance_count)
这是获取我们稍后将要获取的 id (0, 1) 的那个 连接最终对象