【问题标题】:How to extract particular indexes from within a list in terraform?如何从 terraform 的列表中提取特定索引?
【发布时间】:2021-03-13 20:31:54
【问题描述】:

我正在尝试仅从列表中提取特定索引。

模块块

module "app_sg" {
  source        = "../modules/sg/sg_rules"
  ingress_rules = var.app_ingress_rules
  egress_rules  = var.app_egress_rules
  ingress_sg    = var.app_ingress_sg
  egress_sg     = var.app_egress_sg
  src_sg_id     = ["module.app_sgs.sg_id[0]", "module.app_sgs.sg_id[2]"]
  sg_id         = module.app_sgs.sg_id[0]
  depends_on    = [module.app_sgs]
}

资源块

# Application security group rules creation
resource "aws_security_group_rule" "ingress_cidr" {
  for_each          = var.ingress_rules != "" ? var.ingress_rules : {}
  type              = "ingress"
  from_port         = each.key
  to_port           = each.key
  protocol          = "tcp"
  security_group_id = var.sg_id
  cidr_blocks       = each.value
}

resource "aws_security_group_rule" "egress_cidr" {
  for_each          = var.egress_rules != "" ? var.egress_rules : {}
  type              = "egress"
  from_port         = each.key
  to_port           = each.key
  protocol          = "tcp"
  security_group_id = var.sg_id
  cidr_blocks       = each.value
}

resource "aws_security_group_rule" "ingress_sg" {
  for_each                 = var.ingress_sg != "" ? var.ingress_sg : {}
  type                     = "ingress"
  from_port                = each.key
  to_port                  = each.key
  protocol                 = "tcp"
  security_group_id        = var.sg_id
  source_security_group_id = var.src_sg_id
}

resource "aws_security_group_rule" "egress_sg" {
  for_each                 = var.egress_sg != "" ? var.egress_sg : {}
  type                     = "egress"
  from_port                = each.key
  to_port                  = each.key
  protocol                 = "tcp"
  security_group_id        = var.sg_id
  source_security_group_id = var.src_sg_id
}

在运行 terraform apply 时会抛出如下错误

Error: Incorrect attribute value type

  on ../modules/sg/sg_rules/main.tf line 29, in resource "aws_security_group_rule" "ingress_sg":
  29:   source_security_group_id = var.src_sg_id
    |----------------
    | var.src_sg_id is tuple with 2 elements

Inappropriate value for attribute "source_security_group_id": string required.

有人可以为我提供这种情况的解决方案吗?最终我需要在安全组规则中传递多个source_security_group_id。我试过slice函数,但它只能提取startend索引。

【问题讨论】:

  • 什么是var.src_sg_id
  • 它是source_security_group_id
  • 我的意思是var.src_sg_id的实际值。
  • @Marcin 变量src_sg_id 的值将是["sg-054d0adc1ad49f042" "sg-06368b6a1aebb0e13"]

标签: amazon-web-services syntax terraform interpolation


【解决方案1】:

您的source_security_group_id 应该只是一个string,但您传递给它的是一个带有两个元素的list of strings。所以不是

source_security_group_id = var.src_sg_id

你应该有

source_security_group_id = var.src_sg_id[0]

或者如果你想使用第二组

source_security_group_id = var.src_sg_id[1]

【讨论】:

  • 是的,这很好。但是,如果您查看资源块,我会根据ingress_sg 中的值数量创建多个规则。就我而言,最初我正在创建 3 个安全组。然后我正在创建多个规则。第一条规则应该消耗 1st sg 的 id。第二条规则应该使用 3rd sg 的 id。
  • 仍在寻找准确的解决方案。有人可以帮忙吗?
猜你喜欢
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2022-06-23
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多