我试着用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的配置步骤主要分为以下三个部分:

操作步骤

    1. 创建数据交换

 

    1. 创建清单

 

    授予用户订阅者权限

创建数据交换平台

首先需要创建数据交换。
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      = "テストデータです"
    
}

当在控制台上进行确认时,发现已创建了以下的数据交换。

image.png
image.png

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进行引用。

当您在控制台上进行确认时,会创建以下样式的列表。

image.png

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

image.png

填補缺陷

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

image.png

在这种情况下,可以使用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
}

基本上,与授权无关的参数可以引用已经创建的数据交换信息,这样就不会出问题了。

在控制台上确认时,可以验证用户作为订阅者已被授予权限。

image.png
本次,我們使用電子郵件地址對特定的使用者進行權限授予。但是,也可以按照群組進行權限授予或者進行公開設定。請務必查閱官方文件。

以上是Analytics Hub设置的完整步骤。

为了以防万一

我成功地将数据集注册到订阅者的项目中。

image.png

最后

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

bannerAds