【问题标题】:Dynamic outputs from for_each loop in TerraformTerraform 中 for_each 循环的动态输出
【发布时间】:2021-05-25 20:29:00
【问题描述】:

我使用的是 0.14.2 Terraform 版本,我有一个任务是动态创建资源。任务是下一个:

resource "aws_db_instance" "api-mariaDB" {
  for_each             = local.ob

  identifier           = "api-mariadb-${each.key}"
  allocated_storage    = "20"
  storage_type         = "gp2"
  engine               = "mariadb"
  engine_version       = "10.4.8"
  allow_major_version_upgrade = true
  auto_minor_version_upgrade = false
  instance_class       = "db.t2.micro"
  name                 = "ssapi"
  username             = "admin"
  password             = "Temporal123"
  db_subnet_group_name = aws_db_subnet_group.subnet-mariadb[each.value].name
  skip_final_snapshot  = true
  vpc_security_group_ids = [aws_security_group.rds_SG.id]
  tags = {
    Name        = "api-db-${each.key}"
  }
}

使用这个本地变量:

locals {
    ob = toset([
     "es",
     "uk",
    ])
}

此资源创建 2 个 RDS 实例并具有下一个输出:

aws_db_instance.api-mariaDB["es"] will be created
  + resource "aws_db_instance" "api-mariaDB" {
      + address                               = (known after apply)
      + allocated_storage                     = 20
      + allow_major_version_upgrade           = true
      + apply_immediately                     = (known after apply)
      + arn                                   = (known after apply)
      .
      .
      .

我想在两次迭代中访问 arn 以在 helm 图表中使用 after.. 我尝试使用下一个语法但没有成功:

output "rds" {
   value = {
     endpoint = "aws_db_instance.api-mariaDB[each.value].arn"
}

有什么想法吗?

谢谢!

编辑

我也试过这个选项:

output "rds" {
  value = {
    endpoint = aws_db_instance.api-mariaDB[*].arn
  }
}

但是我收到了这个错误:

Error: Unsupported attribute

  on rds.tf line 49, in output "rds":
  49:     endpoint = aws_db_instance.api-mariaDB[*].arn

This object does not have an attribute named "arn".

【问题讨论】:

    标签: amazon-web-services loops terraform amazon-rds


    【解决方案1】:
    `*` 运算符将让您从列表中的每个项目中获取一个值。

    为每个创建一个映射,因此您需要遍历键:

    output "rds" {
      value = {
        endpoint = [for o in local.ob: aws_db_instance.api-mariaDB[o]].arn
      }
    }
    

    【讨论】:

    • 感谢您的回答。我也尝试了此选项,但出现此错误:错误:rds.tf 第 49 行不支持属性,输出“rds”:49:端点 = aws_db_instance.api-mariaDB [*].arn 此对象没有名为“arn”的属性。
    • 啊,这是地图,不是列表。我已经更新了一个修复程序。
    猜你喜欢
    • 2021-09-24
    • 2021-01-17
    • 2022-01-11
    • 2020-11-01
    • 2021-10-04
    • 2021-11-25
    • 2021-03-07
    • 2021-12-08
    • 2022-07-21
    相关资源
    最近更新 更多