【问题标题】:Terraform Import Resources and Looping Over Those ResourcesTerraform 导入资源并循环这些资源
【发布时间】: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


    【解决方案1】:

    您应该能够使用 for_each 定义数据库,并在导入命令中使用括号引用实际资源。比如:

    terraform import snowflake_database.resource_id_using_for_each[foreachkey]
    

    然后,您可以使用 for_each 在用于数据库定义的同一数据库映射上创建三个 snowflake_role 和三个 snowflake_database_grant 定义。

    【讨论】:

    • 感谢@restlessmodem 的信息。我已经用我的项目示例更新了我的帖子,以及基于我尝试实施您所解释的内容而面临的错误。我是否遗漏了什么,或者可能是提供者不允许在导入时进行这种类型的循环?
    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 2020-01-21
    • 2017-09-17
    • 2020-04-29
    • 2021-10-04
    • 2021-12-06
    • 2020-08-27
    • 2019-06-16
    相关资源
    最近更新 更多