snowflake terraform 在一个 tf 文件中创建多个 table

snowflake terraform create multiple table in one tf files

我正在尝试通过 tf 在雪花中创建多个 table。 下面是示例代码。

resource "snowflake_table" "table" {
  database            = "AMAYA"
  schema              = "public"
  name                = "info"
  comment             = "A table."

  column {
    name     = "id"
    type     = "int"
    nullable = true

    default {
      sequence = snowflake_sequence.sequence.fully_qualified_name
    }
  }

  column {
    name     = "identity"
    type     = "NUMBER(38,0)"
    nullable = true

    identity {
      start_num = 1
      step_num  = 3
    }
  }

resource "snowflake_table" "table" {
  database            = "AMAYA"
  schema              = "public"
  name                = "arch_info"
  comment             = "A table."

  column {
    name     = "id"
    type     = "int"
    nullable = true

    default {
      sequence = snowflake_sequence.sequence.fully_qualified_name
    }
  }

  column {
    name     = "identity"
    type     = "NUMBER(38,0)"
    nullable = true

    identity {
      start_num = 1
      step_num  = 3
    }
  }
}

当我 运行 这个脚本时,我得到了错误。

 A snowflake_procedure resource named "table" was already declared at str.tf:16,1-38. Resource names must be unique per type in each module.

我尝试过的唯一解决方案是为不同的 table 创建不同的文件。但是我有 100 个 table 要创建,我想知道是否有更简单的方法将所有内容放在一个文件中,运行 脚本

同一个资源不能多次使用,例如table下面:

resource "snowflake_table" "table" {

使用不同的名称:

resource "snowflake_table" "table_1" {

当需要创建大量具有不同参数的相同资源时,您应该查看 for_eachdynamic 函数:

Terraform for_each

Terraform dynamic

有了这些,您可以创建在输入中定义的复杂地图,并自动创建所需数量的资源,如下所示(只是一个带有几个参数的示例):

locals {

  snowflake_tables = {
    
    info = {
      database = "AMAYA"
      ...

      columns = {
        
        identity = {
          type     = "NUMBER(38,0)"
          nullable = true
          ...
        }
      }
    }
  }
}

resource "snowflake_table" "table" {
  
  for_each = local.snowflake_tables
  
  name     = each.key            # info
  database = each.value.database # AMAYA
  ...

  dynamic "column" {
    for_each = each.value.columns
    content {
      name     = setting.key
      type     = setting.value["type"]
      nullable = setting.value["nullable"]
      ...
    }
  }
}

使用此技术,您只需将更多对象添加到表和列的映射中。我已经在 locals 中设置了示例,但您可以将其作为变量输入,而不是在 .tfvars 文件等中。