【发布时间】:2021-12-27 18:58:07
【问题描述】:
我是 Terraform 的新手,并希望使用“chanzuckerberg/snowflake”的提供者来利用它来管理雪花环境。我特别希望利用它来管理 Snowflake 中角色的 RBAC 模型。
场景是我在 Snowflake 中有大约 60 个数据库,这相当于 Terraform 中每个数据库的资源。然后,我们将为每个数据库创建 3 个角色(读者、作者、所有权限)。我们将从那里扩展我们的角色。
第一个问题是,我可以利用映射或对象变量来定义所有数据库名称及其属性,并在单个资源中使用 for_each 导入它们,还是需要为每个数据库创建一个资源,然后单独导入它们?
第二个问题是,为每个数据库创建 3 个角色的最佳方法是什么?有没有办法遍历所有雪花数据库类型的资源并创建 3 个角色?根据我所做的研究,我正在想象如何使用模块、变量和资源。
任何有助于理解如何实现这一点都会非常有帮助。我了解 Terraform 的基础知识,但是对于像我这样的新手来说,要想实现它,这有点复杂。谢谢大家!
更新: 这是我的项目的样子,我收到的错误在它下面。
变量.tf:
variable "databases" {
type = list(object(
{
name = string
comment = string
retention_days = number
}))
}
databases.auto.tfvars:
databases = [
{
name = "TEST_DB1"
comment = "Testing state."
retention_days = 90
},
{
name = "TEST_DB2"
comment = ""
retention_days = 1
}
]
main.tf:
terraform {
required_providers {
snowflake = {
source = "chanzuckerberg/snowflake"
version = "0.25.25"
}
}
}
provider "snowflake" {
username = "user"
account = "my_account"
region = "my_region"
password = "pwd"
role = "some_role"
}
resource "snowflake_database" "sf_database" {
for_each = { for idx, db in var.databases: idx => db }
name = each.value.name
comment = each.value.comment
data_retention_time_in_days = each.value.retention_days
}
导入我运行的资源:
terraform import snowflake_database.sf_databases["TEST_DB1"] db_test_db1
我留下了这个错误:
错误:资源地址 "snowflake_database.sf_databases["TEST_DB1"]" 中不存在 配置。
在导入此资源之前,请在 根模块。例如:
resource "snowflake_database" "sf_databases" { # (resource 论据)}
【问题讨论】:
标签: terraform snowflake-cloud-data-platform