Fivetran の Managed Data Lakes Service を Azure Data Lake Storage Gen2 で構築する手順

## 概要

Fivetran の Managed Data Lakes Service を Azure Data Lake Storage Gen2 で構築する手順を紹介します。Azure Databricks のカタログにテーブルを登録する手順も含めております。

Fivetran のドキュメントに記載されている`Setup instructions for ADLS`の手順をベースにしているため合わせてご確認ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4a0d5b26-9665-47f8-8a6d-df9fb9e0531d.png)


出所：[Fivetran for Managed Data Lakes Service | Setup Guide](https://fivetran.com/docs/destinations/managed-data-lakes-service/setup-guide#setupinstructionsforadls)

本記事は下記記事の一部です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d5372a04-4384-4eb1-8120-075f8cbbb7e6.png)

出所：[フルマネージドなデータ連携：データ統合の自動化を実現する Fivetran の全貌 #fivetran - Qiita](https://qiita.com/manabian/items/2a760238d3fc1021aae7)


## 事前準備

- Azure テナントの準備
- Azure Databricks 環境の構築
- Fivetran 環境の構築

## 手順

### 1. Create storage account

Azure Portal で Azure Data Lake Storage Gen2 用のストレージ アカウントを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/74235d59-6e4b-4ee2-b47a-a654c9b469bf.png)

### 2. Create ADLS container

先ほど作成したストレージ アカウント内にコンテナー（例：`adls-container`）を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2070b040-832e-4775-827f-04706a1a791f.png)

### 3. Register an application and add a service principal

`Microsoft Entra ID` -> `アプリの登録` -> `+ 新規登録`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/b11e510b-4fb2-42ef-bddc-0666568e0c27.png)

名称（例：`fivetran-service-principal`）を入力し、`登録`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d87be4bf-338b-4204-b562-bcffbcf30467.png)

作成したアプリの`ディレクトリ (テナント) ID`と`アプリケーション (クライアント) ID`を控えておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8e06ccad-6a11-4cd7-87be-6e59939542e3.png)

### 4. Create client secret

`証明書とシークレット` -> `+ 新しいクライアント シークレット`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/20d62aa4-4a2e-4de8-976c-57b318391a2e.png)

`説明`に任意の値（例：`adls_secret`）を入力し、`追加`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c535d9e9-1273-4d1e-86a5-1f867bc37b89.png)

表示される`値`を必ず控えておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/840fba8c-0475-4770-8898-76c3f1cf3f94.png)

### 5. Assign role to container

ストレージ アカウントに移動し、`アクセス制御（IAM）` -> `ロールの割り当ての追加`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1ae8ffe8-e077-4efe-b36c-e6b136f72dda.png)

`ロール`タブで`ストレージ BLOB データ共同作成者`を選択し、`次へ`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a8699f36-0924-4ca4-b783-4ecec5141d65.png)

`メンバー`タブで先ほど作成したサービス プリンシパルを選択し、`レビューと割り当て`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/04f92d66-9659-4273-b0c4-0cd97be759b0.png)

そのまま`レビューと割り当て`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0ff6a150-0518-4bdb-873e-7c10394a45ef.png)

`Role assignments`にサービス プリンシパルが追加されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/fae5f8b6-21b3-4410-b895-79fe3b939e41.png)

### 6. (Optional) Set up Unity Catalog

Databricks で作成したストレージを外部ロケーションとして登録します。認証方法には Databricks アクセス コネクターを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2d5bdb76-21d7-48c4-bc21-b9ecf2fb996b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7240d735-edba-457b-907a-3d9428dd3913.png)

Databricks で SQL Warehouse を作成し、その情報を控えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2f2e6269-34a7-4026-bbc6-fa4279fb4037.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/216e85d6-0282-4782-bf68-47640383fea3.png)

Databricks アクセス トークンを取得し、その値を控えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/de443400-45ed-46fa-ae69-fd93e51ce172.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8deda517-b0cd-47e2-874b-6104fd8fb65c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d2749ea3-2075-4de1-a057-9b0a5776a4ac.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c424c400-82d1-42fd-9504-fee8429ba786.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/21d46bd8-d216-4969-972f-01da342fa11e.png)

カタログ（例：`fivetran_catalog`）を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bf6fc570-a23f-48bb-a5f0-e62942b402ba.png)

### 7. Complete Fivetran configuration 

Fivetran で `Destinations` -> `Add destination` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1a3c9b60-add2-4378-a764-c25bf593a7e2.png)

`Managed data lakes` -> `Azure Data Lake Storage` の `Set up` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8b8e6f09-f954-40ac-9bf7-6357e2b1b334.png)

`Destination name` に任意の名称を入力し、`Add` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/405c3242-a699-4db7-8d8d-d5efa456d1a5.png)

Destination のセットアップ画面が表示されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7499f5de-5e85-4cda-9be2-e20ae6747df2.png)

セットアップ画面でストレージに関する情報を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e38afc16-b91a-48e8-9b3f-56d3ff3a19fb.png)

続けてサービス プリンシパルに関する情報を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bb2cd487-e17c-4b04-904b-ff23ce7c2df0.png)

`Consent URL` 欄に記載されている `URL` をコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bf709aba-4ba3-4e20-90d0-cf9ed1f59fc9.png)

上記の URL を Azure にログインしているブラウザで開くとアクセス許可画面が表示されるようですが、環境によっては想定通りに動作しない場合があります。その際はコマンドラインで登録可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/59f8bc5e-4141-4040-9bd0-27f6d59b9dad.png)

コマンドラインでの登録手順は、以下の記事で整理されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e090dafc-dd61-46eb-8bb5-172b6d31dbcf.png)

出所：[Fivetran の Managed Data Lakes Service 構築時に Azure に Fivetran-TenantBridge を作成できない場合の暫定対応方法 #fivetran - Qiita](https://qiita.com/manabian/items/4c3714805b5cd9759028)

上記の手順で登録したサービス プリンシパルに対して、ストレージへの`ストレージ BLOB データ共同作成者`権限を付与します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/14e874dc-5cab-49fd-8b52-fe4b761ec681.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/176d156f-2db0-4c97-98c5-77213e24a9b1.png)

Destination のセットアップ画面で `Update Databricks Unity Catalog` のトグルをオンにし、Databricks の情報を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ff574eb8-d7e6-46a3-9d82-3c676b04bf38.png)

最後に `Save for later` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0e5701e2-2d7b-439b-b64e-441c6034d6ac.png)

### 8. Setup tests

作成した Destination を開き、`Actions` -> `Test connection` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/16ade0f5-4a14-4dbf-921e-21352c40540e.png)

テストがパスすることを確認します。`Fivetran Catalog Access Test` が権限不足エラーとなる場合は、数分待ってから再度テストするとパスすることがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e26b9210-1c3e-4d03-8bb0-9f951dc209c2.png)

## データの同期確認

### Fivetran に Sync の実施

`Connections` へ移動し、ソースタイプが `Fivetran Platform` のコネクションを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3b847daa-a0e1-490f-becd-b7db0e683179.png)

`Start Initial Sync` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0b76f665-799a-4ab7-bfd9-21a219f7c2aa.png)

Initial sync が成功することを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f07451dc-0a9e-4c0b-b8c3-fe5d9ab48419.png)

### Databricks にてデータを確認

指定したカタログ（例：`fivetran_catalog`）にデータが同期されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/da32ead5-180e-475d-8eeb-2077c97428e0.png)