[英]Who pays query costs on datasets across multiple users in 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.