【问题标题】:Terraform: retrieving a value from a list of objectsTerraform:从对象列表中检索值
【发布时间】:2021-09-20 00:22:42
【问题描述】:

星期五快乐,

使用以下数据集(从输出中查看)如何获取 CIDR 块列表以输入“aws_security_group”资源的“cidr_blocks”(列表)属性?

Changes to Outputs:
  + subnet_ids = {
      + subnet-<id_hidden> = {
          + arn                             = "<arn_hidden>"
          + assign_ipv6_address_on_creation = false
          + availability_zone               = "<az_hidden>"
          + availability_zone_id            = "<az_id_hidden>"
          + available_ip_address_count      = 1000
          + cidr_block                      = "<cidr_hidden>"    <== Want this
          + customer_owned_ipv4_pool        = ""
          + default_for_az                  = false
          + filter                          = null
          + id                              = "<id_hidden>"
          + ipv6_cidr_block                 = null
          + ipv6_cidr_block_association_id  = null
          + map_customer_owned_ip_on_launch = false
          + map_public_ip_on_launch         = false
          + outpost_arn                     = ""
          + owner_id                        = "<owner_hidden>"
          + state                           = "available"
          + tags                            = {
              + "Environment" = "dev"
            }
          + vpc_id                          = "<id_hidden>"
        }
      + subnet-<id_hidden> = {
            ...
            + cidr_block                      = "<cidr_hidden>"    <== Want this
            ...   
        ...many more subnets...

编辑(代码块生成输出):

data "aws_subnet" "management_vpc_private_subnets" {
  for_each = data.aws_subnet_ids.management_vpc_private_subnet_ids.ids
  id       = each.value
}

data "aws_subnet_ids" "management_vpc_private_subnet_ids" {
  vpc_id = <vpc_id_hidden>

  filter {
    name   = "tag:Subnet"
    values = ["private"]
  }
}

output "subnet_ids" {
  value = data.aws_subnet.management_vpc_private_subnets
}

谢谢!

【问题讨论】:

  • 您介意发布生成此输出的代码块吗?
  • 添加了块。谢谢。

标签: terraform terraform-provider-aws


【解决方案1】:

Terraform 文档中讨论了这个确切的例子。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnet_ids#example-usage

你应该可以做这样的事情。

data "aws_subnet_ids" "example" {
  vpc_id = <vpc_id_hidden>

  filter {
    name   = "tag:Subnet"
    values = ["private"]
  }
}

data "aws_subnet" "example" {
  for_each = data.aws_subnet_ids.example.ids
  id       = each.value
}

output "subnet_cidr_blocks" {
  value = [for s in data.aws_subnet.example : s.cidr_block]
}

结果输出如下

subnet_cidr_blocks = [
  "10.0.8.0/21",
  "10.0.136.0/21",
  "10.0.72.0/21",
  "10.0.104.0/21",
  "10.0.40.0/21",
]

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多