Database 数字海洋数据库防火墙平台

Database 数字海洋数据库防火墙平台,database,terraform,digital-ocean,firewall,Database,Terraform,Digital Ocean,Firewall,我一直在尝试为我拥有的数字海洋数据库动态创建地形代码。我试图实现我有一些FW条目列表,如: locals { #################################################################################### ## DO object ids (the different ID's for the Postgres databases in Digital Ocean #######################

我一直在尝试为我拥有的数字海洋数据库动态创建地形代码。我试图实现我有一些FW条目列表,如:

locals {
  ####################################################################################
  ## DO object ids (the different ID's for the Postgres databases in Digital Ocean
  ####################################################################################
  id_postgres_application_dev = "12345"
  id_postgres_application_stg = "23456"
  id_postgres_application_prd = "34567"

  # Map to fw for Postgres
  pg-application_id = {
    "dev" = id_postgres_application_dev
    "stg" = id_postgres_application_stg
    "prd" = id_postgres_application_prd
  }

  ####################################################################################
  ## Outside IP addresses
  ####################################################################################
  fw_ip_peter = "4.100.123.140"
  fw_ip_sunshine = "152.120.106.102"

 ####################################################################################
  ## Postgres Application
  ####################################################################################
  # Map to fw for Postgres
  pg-application_fw_rules_ip = {
    "dev" = [
      local.fw_ip_peter,
      local.fw_ip_sunshine]
    "stg" = [
      local.fw_ip_peter]
    "prd" = [
      local.fw_ip_peter]
  }

  long_key = {
    type = "string"
    default = <<EOF
    rule = {
      type = "KEY"
      value = "VALUE"
    }
    EOF
  }

  fw_rules = toset(lookup(local.pg-application_fw_rules_ip, var.environment))
}
所以问题在于规则部分——在fw_rules变量中每个条目重复这些

有人对如何做到这一点有具体的建议吗?我已经尝试了许多不同的解决方案,我认为我的基本问题是理解应用哪种方法?

通常,您会使用这种方法。因此,您的代码可能如下所示:

resource "digitalocean_database_firewall" "example-fw" {

  cluster_id = id_postgres_application

  dynamic "rule" {

    for_each = local.application_fw_rules_ip[var.environment]

    content {
        type  = "ip_addr"
        value = rule.key
    }

  }
}
以代码为例,因为可能需要针对您的设置进行进一步调整。

Thanx@Macin:O)这似乎在快速测试后完成了工作。你的例子正是我需要的。
resource "digitalocean_database_firewall" "example-fw" {

  cluster_id = id_postgres_application

  dynamic "rule" {

    for_each = local.application_fw_rules_ip[var.environment]

    content {
        type  = "ip_addr"
        value = rule.key
    }

  }
}