繁体   English   中英

如何在 BigQuery 中创建多个数据集并设置访问权限

[英]How to create a multiple datasets and set acess in BigQuery

我需要创建多个数据集并为每个数据集分配一个服务帐户,以授予 BigQuery Admin 角色的访问权限。

变量.tf

variable "project_id" {
  type = string
  default = "<projectid>"
}

variable "set_location" {
  type = string
  default = "southamerica-east1"
}

variable "dataset_name" {
  type = list
  default = ["firs-dataset",
              "second-dataset"]
}

主程序

resource "google_bigquery_dataset" "dataset" {
  dataset_id = "${var.dataset_name[count.index]}"
  count = length("${var.dataset_name}")
  location = "${var.set_location}"

  access {
    role = "roles/bigquery.admin"
    user_by_email = "<service-account>"
  }
}

这样我就可以创建多个数据集,但这样我就可以只对一个服务帐户授予所有数据集的权限。

我需要每个数据集都有一个具有 BigQueryAdmin 角色的特定服务帐户。

您可以在json文件中配置datasets

本例中使用的Terraform模块结构为:

datasets
  resource/datasets.json
  main.tf
  locals.tf

datasets.json文件:

{
  "datasets": {
    "dataset1": {
      "dataset_id": "dataset1",
      "location" : "EU",
      "friendly_name" : "Name",
      "description" : "Description",
      "role": "roles/bigquery.admin",
      "service_account": "account1@<project>.iam.gserviceaccount.com"
    },
    "dataset2": {
      "dataset_id": "dataset2",
      "location" : "EU",
      "friendly_name" : "Name",
      "description" : "Description",
      "role": "roles/bigquery.admin",
      "service_account": "account2@<project>.iam.gserviceaccount.com"
    }
  }
}

然后,您可以在locals.tf文件中检索此列表:

locals {
  datasets = jsondecode(file("${path.module}/resource/datasets.json"))["datasets"]
}

main.tf文件中,我们循环之前的datasets配置列表:

resource "google_bigquery_dataset" "datasets" {
  for_each = local.datasets

  project                     = var.project_id
  dataset_id                  = each.value["dataset_id"]
  friendly_name               = each.value["friendly_name"]
  description                 = each.value["description"]
  location                    = each.value["location"]

  access {
    role = each.value["role"]
    user_by_email = each.value["service_account"]
  }
}

这段代码工作得很好。 我创建了具有特定角色的所有数据集。 但是现在我有一个问题,当尝试运行另一个“terraform apply”时,他试图更改所有数据集覆盖权限然后已经设置..

看图片,当尝试添加另一个数据集时,他想改变一切

你知道解决这个问题的方法吗? 当在 json 中添加另一个数据集时,其他数据集没有改变吗? 因为 json 文件的内容还是一样的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM