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_each
和 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 文件等中。
我正在尝试通过 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_each
和 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 文件等中。