我试着用Terraform配置Analytics Hub
首先
这篇文章是2023年BigQuery Advent Calendar第13天的文章。
我个人在日常工作中,使用Analytics Hub。
关于Analytics Hub的文章也越来越多了,我个人也从中获得了很多参考。
然而,根据我的调查,我没有找到关于使用Terraform设置Analytics Hub的文章。
(可能会有人说有官方文档吧?请以温和的态度等待吧)
其实,我自己作为一名数据工程师还不到半年的时间。
在做很多调研的过程中,我通过阅读大家的文章并结合官方文档,为自己的学习带来了很大的帮助。
出于这样的想法,我希望只要能够稍微帮到某人,就会写下去。
前提 (Qian ti)
由于本文与主题偏离,部分基础知识将被省略。请查阅官方文档或已存在的许多易懂的文章。
只需要一种选项:稍微提到一下。
-
- Terraform とは、HashiCorp 社が提供する IaC (Infrastructure as Code) の一つです。
- Analytics Hubは、異なる組織間において、Bigqueryデータセットを効率よく安全に共有することができるサービスです。
此外,针对本次环境,以下部分在 Terraform 管理之外或被省略。
-
- 共有するデータセット
-
- 各プロジェクトの Analytics Hub API 有効化
- Google Cloud プロジェクトと Terraform の接続方法
這個問題
接下来,我们将使用Terraform 来进行Analytics Hub的配置。
Analytics Hub的配置步骤主要分为以下三个部分:
操作步骤
-
- 创建数据交换
-
- 创建清单
- 授予用户订阅者权限
创建数据交换平台
首先需要创建数据交换。
Terraform 代码如下所示。
resource "google_bigquery_analytics_hub_data_exchange" "test" {
#Required
location = "US"
data_exchange_id = "test_analytics_hub"
display_name = "test_analytics_hub"
#Optional
primary_contact = "XXXXX@gmail.com"
description = "テストデータです"
}
当在控制台上进行确认时,发现已创建了以下的数据交换。


primary_contact 指的是“主要联系人”, description 则是以“描述”设定。 如果没有特别设定,将显示为“无值”。
而且,由于代码中没有定义项目,所以提供者的项目自动指定为(在这种情况下,为publisher-XXXXXX)。
请查看官方文件以获取更多详细信息。
2. 制作收听材料
接下来,我们将创建一个清单。Terraform的代码如下所示。
resource "google_bigquery_analytics_hub_listing" "test" {
#Required
location = "US"
data_exchange_id = google_bigquery_analytics_hub_data_exchange.test.data_exchange_id
listing_id = "test_listing"
display_name = "test_listing"
bigquery_dataset {
dataset = "projects/publisher-XXXXXX/datasets/test_dataset"
}
#Optional
description = "テストデータです"
documentation = "このデータは、テストデータです"
}
由于需要将在此处创建的列表与先前创建的数据交换相关联,因此使用data_exchange_id进行引用。
当您在控制台上进行确认时,会创建以下样式的列表。

我认为您也可以确认描述和文档的位置。

填補缺陷
本次共享的数据集是指定以下不受Terraform管理的数据集。

在这种情况下,可以使用projects/项目ID/datasets/数据集ID来指定数据集。(由于官方文档是关于设置Terraform管理的数据集,因此采用了不同的模式)
给用户赋予订阅者权限。
最后,将数据集共享给订阅者并授予订阅者权限。
以下是Tearraform的代码。
data "google_iam_policy" "admin" {
binding {
role = "roles/analyticshub.subscriber"
members = [
"user:xxxxxx@gmail.com",
]
}
}
resource "google_bigquery_analytics_hub_data_exchange_iam_policy" "policy" {
project = google_bigquery_analytics_hub_data_exchange.test.project
location = google_bigquery_analytics_hub_data_exchange.test.location
data_exchange_id = google_bigquery_analytics_hub_data_exchange.test.data_exchange_id
policy_data = data.google_iam_policy.admin.policy_data
}
基本上,与授权无关的参数可以引用已经创建的数据交换信息,这样就不会出问题了。
在控制台上确认时,可以验证用户作为订阅者已被授予权限。

以上是Analytics Hub设置的完整步骤。
为了以防万一
我成功地将数据集注册到订阅者的项目中。

最后
这次,我们尝试使用Terraform配置Analytics Hub。
我想您可能已经感受到了,这并不是非常复杂的内容,相对容易实现。
通过Analytics Hub,我们可以轻松实现数据共享。
由于它支持数据隔离区,因此在今后选择它作为更有效的数据共享手段之一变得更加合适。
我真诚地希望大家都能尝试在各种场景中使用Analytics Hub。