Amazon S3 バケットのデータを Azure Data Explorer へ取り込む (Azure Data Factory 編)

2022.08.29

いわさです。

前回は Azure Data Explorer へ Amazon S3 バケットのデータを直接取り込めるようになったので使ってみました。

一方でこのコマンドが使える様になる前はパイプラインを構築していたようなのですが、私がそれを把握出来てないので整理してみることにしました。
いくつか方法があるようなのですが、代表的な方法のひとつである Azure Data Factory を使って試してみます。

Azure Data Factory とは

Azure Data Factory は Azure における ETL/ELT・データ統合の基盤です。

サーバーレスな ETL サービスということで、AWS でいうと AWS Glue が近いでしょうか。
Glue Studio のようなビジュアルインターフェースも備えていたり共通点が多い印象です。

事前準備: ソースとターゲットを用意

前回と同様にソースのデータストアは Amazon S3 を使用します。
データも同じものを使います。

ターゲットデータストアは Azure Data Explorer です。
事前にクラスターとデータベース・テーブルを作成しておきます。

Azure Data Factory 作成

Azure Data Factory のリソース作成自体は特に選択肢もないので割愛します。
作成後に Azure Data Factory Studio を開きます。

取り込みから組み込みコピータスクを作成します。

ソースデータストアの構成

まずはソースデータストアに関する構成を行います。
ソースの種類にはたくさんの組み込みのタスク定義が用意されています。

Amazon S3 を選択します。

続いて Amazon S3 への接続設定です。
認証の種類としては、アクセスキーと一時的なセキュリティ資格情報の 2 つから選択が可能です。
後者の場合はアクセスキーとシークレットアクセスキーに加えてセッショントークンを使うことが出来るので、短命な資格情報を使うことが出来ます。

ただ今回はアクセスキーとシークレットを扱いたいと思います。
一時的な資格情報を使えたとして更新の仕組みまで今回は考える予定はなかったのと、Azure Key Vault からの秘匿情報の引き渡しが可能なので、前回のようにコマンドに直接埋め込むよりは抵抗感がなかったためです。

接続構成を行うことが出来たら、取り込み対象のフォルダーパスを指定します。
この時点でテキスト形式が検出されるので、プレビューでどのように取り込まれるかイメージすることが出来ました。

コピー先データストアの構成

続いてコピー先データストアである Azure Data Explorer 関係の部分を構成していきます。
Azure Data Explorer に対する権限が必要になります。

様々な設定オプションが用意されていますが、今回は Azure Data Factory のマネージド ID を作成し、マネージド ID へアクセス権を付与させました。
下記画面でシステム割り当てマネージド ID を選択すると自動で作成されます。

Azure Data Explorer 側ではデータベースに対して作成されたマネージド ID へのロールを割り当てします。
これで Azure Data Factory から Azure Data Explorer へ接続・操作が出来るようになりました。

今回はデフォルトの構成で取り込みを行いましたが、ここでソースとターゲットでの列マッピングも行うことが出来ます。

コピー

構成が完了したら、実際にコピーを実行し Azure Data Explorer でクエリを実行してみましょう。

取得することが出来ました。

今回 Azure Data Factory にて作成したタスクは一時的なコピータスクとして実行しましたが、パイプラインとしてそのまま利用することも可能です。

さいごに

本日は Amazon S3 バケットのデータを Azure Data Factory を使って Azure Data Explorer へ取り込んでみました。

前回の Azure Data Explorer でそのまま ingest コマンドで取り込む場合はストレージ接続文字列を使うのですが、利用出来るものが非常に限られていました。

一方で Azure Data Factory では様々なサービスに対応しています。

また AWS 側に対するアクセス情報に関してもセッショントークンを使うことが出来るのは非常に大きな点だと思います。
Azure Key Vault から動的に読み込むことが出来るので、一定間隔でセッション更新したものを Key Vault へ格納する仕組みを取れば、アクセスキーの発行が回避出来るわけではありませんが ingest からの直接取り込みよりもセキュアに扱うことが出来そうです。

使い分けとしては基本的には Azure Data Factory を使ったほうが良さそうですし対応サービスも多く使いやすい感じがします。
準備と追加のリソースが少し必要になるので、開発中や検証中にサッと使いたいときは ingest コマンドで済ませるという使い分けになりそうでしょうか。