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



我需要创建多个数据集,并为每个数据集分配一个服务帐户,使用BigQuery Admin角色访问。

variables.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"]
}

main.tf

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.jsonfile:

{
"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"]
}
}

这段代码运行得很好。我创建了所有具有特定角色的数据集。但现在我有一个问题,当我试图运行另一个"地形应用程序"时。他试图更改所有数据集覆盖权限,然后已经设置。

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

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

最新更新