Cloud Service
Azure Data Factory
多様なデータソースの取り込みと ETL/ELT を統合し、パイプラインで自動化するフルマネージドのデータ統合オーケストレーターです。
- 1.データ移動と変換のパイプラインを定義しスケジュールやイベントで自動実行する。
- 2.コードレスのデータフローと、各種コンピューティングを呼び出すアクティビティで ETL と ELT の両方に対応。
- 3.AWS の Glue や Step Functions に相当する Azure のデータ統合サービス。
解決する課題
オンプレミスやクラウドに散在するデータを集め、整形・変換し、分析基盤やデータウェアハウスへ届けるまでの一連の流れを、手作業のスクリプトではなくマネージドなパイプラインとして自動化します。
- 多様なデータソースから定期的または イベント駆動 でデータを取り込みたい
- 取り込んだデータを 変換(クレンジング・結合・集計) してから保存したい
- 複数の処理ステップを 依存関係つきのワークフロー としてオーケストレーションしたい
- オンプレミスのデータベースを セルフホステッド統合ランタイム 経由でクラウドへ連携したい
- 処理の成否・再試行・通知を 一元的に監視 したい
主要概念と用語
- パイプライン: 一連の処理(アクティビティ)をまとめた論理的なワークフロー。スケジュールやトリガーで実行される
- アクティビティ: パイプライン内の個々の処理ステップ。データ移動(Copy)、データ変換(Data Flow など)、制御フロー(条件分岐・ループ)の3種類に大別される
- データセット: 入力・出力で扱うデータの構造や場所を指す参照定義。テーブルやファイルなどを表す
- リンクサービス: データストアや外部コンピューティングへの接続情報。接続文字列に相当し、認証情報を含む
- 統合ランタイム(Integration Runtime, IR): 実際にデータ移動や変換を実行する計算基盤。Azure IR、セルフホステッド IR、Azure-SSIS IR の3種類がある
- マッピングデータフロー: コードを書かずに GUI で変換ロジックを設計する機能。内部では Spark クラスター上で実行される
- トリガー: パイプラインの起動条件。スケジュール、タンブリングウィンドウ、ストレージイベントなどがある
- Azure Synapse パイプライン: Synapse Analytics に統合された同等のパイプライン機能で、技術的な基盤を Data Factory と共有する
仕様・制限・クォータ
- コードレスと コードファースト の両立: Copy アクティビティとマッピングデータフローは GUI で構築でき、必要に応じて外部の Databricks や HDInsight、Functions を呼び出してカスタム処理も組める
- 統合ランタイムの選択が前提条件: クラウド間の移動・変換は Azure IR、オンプレミスやプライベートネットワーク越しは セルフホステッド IR、既存の SSIS パッケージ実行は Azure-SSIS IR を使う
- 同時実行数やアクティビティ数には上限がある: データファクトリーあたりのパイプライン数、パイプラインあたりのアクティビティ数、同時実行されるパイプライン数などにサービス上限が設定される(具体値は変動しうるため公式ドキュメントで確認する)
- コネクタは多数の組み込みが提供される: 各種データベース、ストレージ、SaaS、ファイル形式に対応するコネクタが用意される
- ソースコード管理との統合: Git(Azure Repos または GitHub)連携により、パイプライン定義を JSON として版管理できる
内部の仕組み
Data Factory のパイプラインは、リンクサービスで定義した接続を通じてデータセットを読み書きします。実際の処理は 統合ランタイム という計算レイヤーが担当し、どの IR を割り当てるかで実行場所とネットワーク到達性が決まります。
- Copy アクティビティ は、ソースとシンクの間でデータを移動する。内部的に並列コピーやステージング(中間に Blob を挟む)を使ってスループットを高められる
- マッピングデータフロー は、GUI で組んだ変換ロジックを Spark のジョブに変換し、Azure IR が確保した一時的な Spark クラスター上で実行する。利用者は Spark を直接管理しない
- セルフホステッド IR は、オンプレミスや仮想ネットワーク内のマシンにインストールするエージェントで、ファイアウォール内のデータソースへ安全に到達し、クラウドへアウトバウンド接続でデータを送る
- 制御フロー のアクティビティ(If 条件、ForEach、Until、実行パイプラインなど)により、依存関係や分岐・反復を含む複雑なワークフローを構成できる
変換をパイプライン側のデータフローで行うのが ETL 寄りの発想、いったん生データをデータレイクやウェアハウスへ取り込んでから変換アクティビティやウェアハウス内 SQL で処理するのが ELT 寄りの発想です。大規模データではデータウェアハウスの計算力を活かす ELT が有利になることが多いです。
設計パターン / ベストプラクティス
- 取り込みと変換を分離: まず生データをデータレイクへ着地させ(取り込み層)、その後で変換する段階を分けると再処理やデバッグが容易になる
- パラメーター化で再利用: パイプライン・データセット・リンクサービスをパラメーター化し、テーブルやファイルごとに個別定義せずメタデータ駆動で動かす
- 増分ロード: 全件コピーではなく、タンブリングウィンドウや透かし(ウォーターマーク)列を使って変更分だけを取り込む
- べき等性を意識: 再試行や再実行で重複や欠損が起きないよう、上書きや一意キーで冪等に設計する
- 大量並列はステージング併用: 大規模なデータウェアハウスへのロードでは、PolyBase や COPY 文に対応するステージング経由のコピーでスループットを上げる
- Git 連携で開発: 開発ファクトリーで Git ブランチ運用し、検証後に発行(Publish)してから本番へデプロイする
運用・監視
- モニター画面: パイプライン実行・アクティビティ実行・トリガー実行の履歴を確認でき、成否・所要時間・エラー詳細を追える
- Azure Monitor 連携: 診断設定でメトリクスとログを Log Analytics へ送り、失敗率や実行時間をダッシュボード化・アラート化できる
- 再試行ポリシー: アクティビティ単位で再試行回数と間隔を設定し、一時的な障害に耐性を持たせる
- アラートと通知: 失敗時に Web フックや Logic Apps、メールで通知する運用を組む
セルフホステッド統合ランタイムを 1 台構成のままにすると単一障害点になります。複数ノードに分散して可用性を確保し、ホスト OS とランタイムの更新・証明書の有効期限も継続的に管理してください。
コスト
課金は主にパイプラインのオーケストレーション(アクティビティ実行回数)、データ移動の所要時間(IR の使用量)、データフローの実行時間(Spark のコア時間)、そして稼働中の統合ランタイムに対して発生します。アイドル時のセルフホステッド IR には計算課金はかからないものの、ホストするマシンのコストは利用者負担です。
- データフローはクラスター稼働時間で課金 されるため、クラスターのサイズと起動時間(Time To Live 設定)の最適化が効く
- 不要な全件再処理を避ける ことが、移動・変換の双方でコスト削減に直結する
- 具体的な単価は変動するため、断定せず公式の料金ページで確認する
セキュリティ
- マネージド ID: Data Factory にシステム割り当てまたはユーザー割り当てのマネージド ID を付与し、ストレージやデータベースへキーレスで認証する
- 資格情報は Key Vault に集約: リンクサービスの接続情報やシークレットを Azure Key Vault 参照にし、定義への直書きを避ける
- ネットワーク分離: マネージド仮想ネットワークとプライベートエンドポイントを使い、データ移動をパブリックインターネットから隔離できる
- RBAC: Microsoft Entra ID と RBAC で、誰がパイプラインを編集・実行できるかを制御する
リンクサービスの定義に接続文字列やアクセスキーを平文で埋め込み、それを Git にコミットするのは危険です。シークレットは Key Vault 参照、データストアへの認証はマネージド ID を基本とし、定義ファイルに秘密情報を残さないようにします。
Well-Architected の観点
運用上の優秀性(オペレーショナルエクセレンス)が中心の論点です。
- 自動化: スケジュールやイベントでパイプラインを無人実行し、手作業を排除する
- コード化と版管理: パイプライン定義を JSON として Git 管理し、環境間(開発・本番)へ再現性をもってデプロイする
- 可観測性: モニター画面と Azure Monitor で実行を可視化し、失敗を早期に検知・通知する
- 再現性のある復旧: 再試行ポリシーと冪等な設計により、障害後の再実行を安全に行える
試験で問われるポイント
- データ統合・ETL/ELT のオーケストレーション基盤であり、AWS の Glue に相当する位置づけを押さえる
- 統合ランタイム3種類の使い分け。オンプレミス連携は セルフホステッド IR、既存 SSIS 実行は Azure-SSIS IR、クラウド間は Azure IR
- コードレスで変換するのは マッピングデータフロー(内部は Spark)。データ移動は Copy アクティビティ
- リンクサービス(接続情報)とデータセット(データの参照)とアクティビティの関係
- シークレットは Key Vault、データストア認証はマネージド ID という安全な構成
- スケジュール/タンブリングウィンドウ/ストレージイベントのトリガー種別
関連サービス・比較
| 観点 | Azure Data Factory | AWS Glue |
|---|---|---|
| 位置づけ | データ統合とパイプラインのオーケストレーション | サーバーレス ETL とデータカタログ |
| 変換エンジン | マッピングデータフロー(内部 Spark) | Spark ベースの Glue ジョブ |
| コードレス変換 | GUI のデータフロー | Glue Studio のビジュアル ETL |
| スキーマ管理 | 外部のメタデータや Purview と連携 | Glue データカタログを内蔵 |
| オンプレミス連携 | セルフホステッド統合ランタイム | 別途コネクタやエージェントが必要 |
| ワークフロー制御 | 制御フローアクティビティで分岐や反復 | Glue ワークフローや Step Functions |
| 権限付与 | Entra ID + RBAC とマネージド ID | IAM |
Azure Synapse Analytics のパイプライン機能は Data Factory と基盤を共有します。分析を Synapse に集約するなら Synapse 内のパイプラインで完結でき、独立したデータ統合基盤が必要なら単体の Data Factory を選ぶ、という整理が分かりやすいです。
ハンズオン / CLI例
# リソースグループを作成
az group create --name demo-rg --location japaneast
# Data Factory を作成
az datafactory create \
--resource-group demo-rg \
--factory-name demo-adf-0614 \
--location japaneast
# Git 連携を構成(Azure Repos の例。発行と版管理を有効化)
az datafactory configure-factory-repo \
--location japaneast \
--factory-resource-id "/subscriptions/<sub-id>/resourceGroups/demo-rg/providers/Microsoft.DataFactory/factories/demo-adf-0614" \
--factory-vsts-configuration \
project-name=DataPlatform \
account-name=myorg \
repository-name=adf-repo \
collaboration-branch=main \
root-folder=/ \
tenant-id=<tenant-id>
# パイプラインの一覧を確認
az datafactory pipeline list \
--resource-group demo-rg \
--factory-name demo-adf-0614 \
--output table
Azure Service
Azure Data Factoryを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
分析
比較で見る軸
クラウド: Azure / カテゴリ: 分析 / 難易度: intermediate
導入後に効く点
コードレスのデータフローと、各種コンピューティングを呼び出すアクティビティで ETL と ELT の両方に対応。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Azure
- カテゴリ
- 分析
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational
判断チェックリスト
- 自社の用途が「分析 / operational」に近いか確認する。
- 強みである「データ移動と変換のパイプラインを定義しスケジュールやイベントで自動実行する。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。