適用対象:
Azure Data Factory
Azure Synapse Analytics
ヒント
Data Factory in Microsoft Fabric は、よりシンプルなアーキテクチャ、組み込みの AI、および新機能を備えた次世代のAzure Data Factoryです。 データ統合を初めて使用する場合は、Fabric Data Factory から始めます。 既存の ADF ワークロードをFabricにアップグレードして、データ サイエンス、リアルタイム分析、レポートの新機能にアクセスできます。
この記事では、Azure Data FactoryまたはAzure Synapse Analytics パイプラインで作成できるストレージ イベント トリガーについて説明します。
イベントドリブン アーキテクチャ は、イベントの運用、検出、使用、およびリアクションを伴う、データ統合の共通的なパターンです。 多くの場合、データ統合シナリオでは、Azure Blob Storage アカウント内でファイルが到着または削除されるといったイベントに基づいて、Azure Storage アカウントからトリガーされるパイプラインを起動する必要があります。 Data Factory および Azure Synapse Analytics パイプラインは、Azure Event Grid とネイティブに統合されるため、このようなイベントでパイプラインをトリガーできます。
ストレージ イベント トリガーの考慮事項
ストレージ イベント トリガーを使用する場合は、次の点を考慮してください。
- この記事で説明する統合は、Azure Event Gridによって異なります。 サブスクリプションが Event Grid リソース プロバイダーに登録されていることを確認してください。 詳細については、「リソース プロバイダーと種類」を参照してください。
Microsoft.EventGrid/eventSubscriptions/アクションを実行できる必要があります。 このアクションは、EventGrid EventSubscription Contributorの組み込みロールの一部です。 - Azure Synapse Analyticsでこの機能を使用している場合は、サブスクリプションも Data Factory リソース プロバイダーに登録してください。 これ以外では、"イベント サブスクリプション が作成できませんでした" というメッセージが表示されます。
- Blob Storage アカウントが private エンドポイント の背後に存在し、パブリック ネットワーク アクセスをブロックする場合は、Blob Storageから Event Grid への通信を許可するようにネットワーク ルールを構成する必要があります。 Event Grid などの信頼されたAzure サービスへのストレージ アクセスを許可するか、Storage のドキュメントに従って、仮想ネットワーク アドレス空間にマップする Event Grid のプライベート エンドポイントを構成するか、Event Grid のドキュメントに従います。
- ストレージ イベント トリガーでは現在、Azure Data Lake Storage Gen2および汎用バージョン 2 のストレージ アカウントのみがサポートされています。 セキュア ファイル転送プロトコル (SFTP) のストレージ イベントを使用している場合は、フィルター セクションで SFTP Data API も指定する必要があります。 Azure Event Grid に制限があるため、Data Factory でサポートされるストレージ イベント トリガーは、ストレージ アカウントあたり最大 500 個のみです。
- 新しいストレージ イベント トリガーを作成したり、既存のストレージ イベント トリガーを変更したりするには、サービスへのサインインとストレージ イベント トリガーの発行に使用するAzure アカウントに、ストレージ アカウントに対する適切なロールベースのアクセス制御 (Azure RBAC) アクセス許可が必要です。 その他のアクセス許可は必要ありません。 Azure Data FactoryとAzure Synapse Analyticsのサービス プリンシパルには、ストレージ アカウントまたはEvent Gridに特別なアクセス許可は必要ありません。 アクセス制御の詳細については、「ロールベースのアクセス制御」セクションを参照してください。
- ストレージ アカウントにAzure Resource Manager ロックを適用した場合、BLOB トリガーが BLOB を作成または削除する機能に影響する可能性があります。
ReadOnlyロックでは作成と削除の両方が禁止され、DoNotDeleteロックでは削除が禁止されます。 トリガーに関する問題の発生を防ぐには、これらの制限事項を必ず考慮してください。 - データ フロー シンクからのトリガー メカニズムとして、ファイル到着トリガーを使用することはお勧めしません。 データ フローでは、ターゲット フォルダー内の多数のファイル名の変更タスクとパーティション ファイルのシャッフル タスクが実行されるため、データの完全な処理の前にファイル到着イベントが誤ってトリガーされる可能性があります。
UI を使用してトリガーを作成する
このセクションでは、Azure Data Factoryおよび Azure Synapse Analytics パイプライン ユーザー インターフェイス (UI) 内にストレージ イベント トリガーを作成する方法について説明します。
Data Factory の Edit タブまたは Azure Synapse Analytics の Integrate タブに切り替えます。
メニューで [トリガー] を選択し、次に [新規作成/編集] を選択します。
[トリガーの追加] ページで、[トリガーの選択] を選択した後、[+ 新規] を選択します。
トリガーの種類には [ストレージ イベント] を選択します。
Azure サブスクリプションのドロップダウン リストからストレージ アカウントを選択するか、ストレージ アカウントのリソース ID を使用して手動で選択します。 イベントを発生させるコンテナーを選択します。 コンテナーの選択は必須ですが、すべてのコンテナーを選択すると、多数のイベントが発生する可能性があります。
Blob path begins withプロパティとBlob path ends withプロパティを使用すると、イベントを受信させたいコンテナー、フォルダー、BLOB 名を指定できます。 ストレージ イベント トリガーでは、これらのプロパティの少なくとも 1 つを定義する必要があります。 この記事の後半の例に示すように、Blob path begins withプロパティとBlob path ends withプロパティには共に、さまざまなパターンを使用できます。-
Blob path begins with: BLOB パスはフォルダーパスで始める必要があります。 有効な値として、2018/および2018/april/shoes.csvがあります。 コンテナーが選択されていない場合、このフィールドを選択することはできません。 -
Blob path ends with: BLOB パスは、ファイル名または拡張子で終わる必要があります。 有効な値として、shoes.csvおよび.csvがあります。 コンテナー名とフォルダー名を指定する場合は、/blobs/セグメントで区切る必要があります。 たとえば、ordersという名前のコンテナーには、/orders/blobs/2018/april/shoes.csvの値を指定できます。 コンテナー内にフォルダーを指定するには、先頭の/文字を省略します。 たとえば、april/shoes.csvは、任意のコンテナー内のshoes.csvというフォルダーにあるaprilという名前のファイルで、イベントをトリガーします。
Blob path begins withとBlob path ends withは、ストレージ イベント トリガーで許可される唯一のパターン マッチングであることに注意してください。 その他の種類のワイルドカードによるマッチングは、トリガーの種類ではサポートされていません。-
トリガーが BLOB 作成 イベントか BLOB 削除 イベントのいずれか、またはその両方に応答するのかを選びます。 指定したストレージの場所で、各イベントが Data Factory および Azure Synapse Analytics パイプラインをトリガーし、そのパイプラインはそのトリガーに関連付けられています。
ゼロ バイトの BLOB をトリガーで無視するかどうかを選択します。
トリガーを構成したら、[次へ: データのプレビュー] を選択します。 この画面には、ストレージ イベント トリガーの構成に一致する既存の BLOB が表示されます。 特定のフィルターがあることを確認します。 フィルターの構成範囲が広すぎると、作成または削除された多数のファイルと一致することになり、コストに大きく影響することがあります。 フィルター条件が検証されたら、 [完了]を選択します。
このトリガーにパイプラインをアタッチするには、パイプライン キャンバスに移動 し、[トリガー]>[新規作成/編集] の順に選択します。 作業ウィンドウが表示されたら、[トリガーの選択] ドロップダウン リストを選択し、作成したトリガーを選択します。 [次へ: データ プレビュー] を選択して、構成が正しいことを確認します。 その後、[次へ] を選択して、データ プレビューが正しいことを検証します。
パイプラインにパラメーターがある場合は、[トリガー実行パラメーター] 作業ウィンドウで指定できます。 ストレージ イベント トリガーにより、BLOB のフォルダー パスとファイル名が、プロパティ
@triggerBody().folderPathおよび@triggerBody().fileNameにキャプチャされます。 パイプラインでこれらのプロパティの値を使用するには、プロパティをパイプライン パラメーターにマップする必要があります。 プロパティをパラメーターにマップしたら、パイプライン全体で@pipeline().parameters.parameterName式を使用して、トリガーでキャプチャされた値にアクセスできます。 詳しい説明については、「パイプラインでのトリガー メタデータの参照」で確認してください。
前の例では、.csv で終わる BLOB パスがコンテナー sample-data の event-testing フォルダーに作成されたときにトリガーが起動するように構成されています。
folderPathプロパティとfileNameプロパティは、新しい BLOB の場所をキャプチャします。 たとえば、MoviesDB.csv が、パス sample-data/event-testing に追加された場合、@triggerBody().folderPathにはsample-data/event-testingの値が、@triggerBody().fileNameにはmoviesDB.csvの値が含まれます。 この例では、これらの値は、パイプライン パラメーターのsourceFolderおよびsourceFileにマップされており、それぞれ@pipeline().parameters.sourceFolderおよび@pipeline().parameters.sourceFileとしてパイプライン全体で使用できます。作業を終えたら、 [完了] を選択します。
JSON スキーマ
次の表に、ストレージ イベント トリガーに関連するスキーマ要素の概要を示します。
| JSON 要素 | 説明 | タイプ | 使用できる値 | 必須 |
|---|---|---|---|---|
| スコープ | ストレージ アカウントのAzure Resource Manager リソース ID。 | 糸 | Azure Resource Manager ID | はい。 |
| events | このトリガーを起動するイベントの種類。 | Array |
Microsoft.Storage.BlobCreated、Microsoft.Storage.BlobDeleted |
はい、これらの値の任意の組み合わせが必須です。 |
blobPathBeginsWith |
BLOB パスは、トリガーを起動するために指定されているパターンで始まる必要があります。 たとえば、/records/blobs/december/ のみが、december コンテナー下の records フォルダーにあるブロブのトリガーを起動します。 |
糸 |
blobPathBeginsWith または blobPathEndsWith の少なくとも 1 つのプロパティに値を指定します。 |
|
blobPathEndsWith |
BLOB パスは、トリガーを起動するために指定されているパターンで終わる必要があります。 たとえば、december/boxes.csv のみが、boxes フォルダー内の december というブロブのトリガーを起動します。 |
糸 |
blobPathBeginsWith または blobPathEndsWith の少なくとも 1 つのプロパティに値を指定します。 |
|
ignoreEmptyBlobs |
ゼロバイトのBLOBがパイプラインの実行をトリガーするかどうか。 既定では、これは true に設定されています。 |
ブール値 | 真または偽 | いいえ。 |
ストレージ イベント トリガーの例
このセクションでは、ストレージ イベント トリガーの設定の例を示します。
重要
以下の例に示すように、コンテナーとフォルダー、コンテナーとファイル、またはコンテナー、フォルダー、およびファイルを指定するたびに、パスの /blobs/ セグメントを含める必要があります。
blobPathBeginsWith の場合、トリガー JSON のフォルダーとコンテナー名の間に、UI が自動的に /blobs/ を追加します。
| プロパティ | 例 | 説明 |
|---|---|---|
Blob path begins with |
/containername/ |
コンテナー内の任意の BLOB のイベントを受信します。 |
Blob path begins with |
/containername/blobs/foldername/ |
containernameコンテナーおよび foldername フォルダー内の任意の BLOB のイベントを受信します。 |
Blob path begins with |
/containername/blobs/foldername/subfoldername/ |
サブフォルダーを参照することもできます。 |
Blob path begins with |
/containername/blobs/foldername/file.txt |
file.txt コンテナー下の foldername フォルダー内にある containername という名前の BLOB のイベントを受信します。 |
Blob path ends with |
file.txt |
任意のパスで file.txt という名前の BLOB のイベントを受信します。 |
Blob path ends with |
/containername/blobs/file.txt |
コンテナー file.txt の下の containername という名前の BLOB のイベントを受信します。 |
Blob path ends with |
foldername/file.txt |
任意のコンテナーの下の file.txt フォルダーにある、foldername という名前の BLOB のイベントを受信します。 |
ロールベースのアクセス制御
Data Factory および Azure Synapse Analytics パイプラインでは、Azure ロールベースのアクセス制御 (Azure RBAC) を使用し、Blob イベントにリンクされたパイプラインへのリッスン、更新の購読、およびトリガーに対する許可されていないアクセスを厳密に禁止します。
- 新しいストレージ イベント トリガーを正常に作成したり、既存のストレージ イベント トリガーを更新したりするには、サービスにサインインしているAzure アカウントに、関連するストレージ アカウントへの適切なアクセス権が必要です。 それ以外の場合、"アクセスが拒否されました" というメッセージで操作が失敗します。
- Data Factory と Azure Synapse Analyticsでは、Event Grid インスタンスに対する特別なアクセス許可は必要ありません。また、操作のために、Data Factory またはAzure Synapse Analyticsサービス プリンシパルに特別な RBAC アクセス許可を割り当てる必要はありません。
次の RBAC 設定は、ストレージ イベント トリガーで機能します。
- ストレージ アカウントに対する所有者ロール
- ストレージ アカウントに対する共同作成者ロール
- ストレージ アカウント
Microsoft.EventGrid/EventSubscriptions/Writeアクセス許可/subscriptions/####/resourceGroups/####/providers/Microsoft.Storage/storageAccounts/storageAccountName
具体的には、
- データ ファクトリ (開発環境など) で作成する場合、サインインしたAzure アカウントに上記のアクセス許可が必要です。
- 継続的インテグレーションと継続的デリバリーを使用して発行する場合、Azure Resource Manager テンプレートをテストまたは運用ファクトリに発行するために使用されるアカウントには、上記のアクセス許可が必要です。
サービスによって 2 つの約束がどのように実現されるかを理解するために、前に戻って、その裏側を見てみましょう。 Data Factory/Azure Synapse Analytics、Storage、Event Grid の統合に関する高度なワークフローを次に示します。
新しいストレージ イベント トリガーを作成する
このワークフローの概要は、ストレージ イベント トリガーを作成するために、Data Factory が Event Grid とどのようにやり取りするのかを示しています。 データ フローはAzure Synapse Analyticsで同じです。次の図では、Azure Synapse Analytics パイプラインがデータ ファクトリの役割を果たします。
ワークフローからの注目すべき 2 つのポイント。
- Data Factory と Azure Synapse Analytics noストレージ アカウントに直接接続します。 サブスクリプションの作成要求は、代わりに Event Grid によってリレーされて処理されます。 このステップでは、サービスにストレージ アカウントへのアクセス権限は必要ありません。
- アクセス制御とアクセス許可のチェックは、サービス内で行われます。 サービスでは、ユーザーのアクセス許可がチェックされてから、ストレージ イベントをサブスクライブする要求が送信されます。 具体的には、サインインしてストレージ イベント トリガーを作成しようとしているAzure アカウントが、関連するストレージ アカウントに適切なアクセス権を持っているかどうかを確認します。 アクセス許可のチェックに失敗すると、トリガーの作成も失敗します。
ストレージイベントトリガーによるパイプライン実行
この高レベルのワークフローでは、ストレージイベントトリガーでパイプラインがどのようにEvent Gridを通じて実行されるかを説明しています。 Azure Synapse Analyticsの場合、データ フローは同じです。次の図では、Azure Synapse Analytics パイプラインが Data Factory の役割を果たします。
サービス内のイベント トリガー パイプラインに関連した、ワークフローの顕著な 3 つのポイントは次のとおりです。
Event Grid では、ストレージによってメッセージがシステムにドロップされたらできるだけ早くメッセージを中継するプッシュ モデルが使用されます。 これは、Pull システムが使用されている Kafka などのメッセージング システムとは異なります。
イベント トリガーは、受信メッセージのアクティブなリスナーとして機能し、これにより、関連付けられたパイプラインが適切にトリガーされます。
ストレージ イベント トリガー自体が、ストレージ アカウントと直接コンタクトすることはありません。
- ストレージ アカウント内のデータを処理するCopy アクティビティまたはパイプライン内の別のアクティビティがある場合、サービスは、リンクされたサービスに格納されている資格情報を使用して、ストレージ アカウントに直接接続します。 リンク サービスが適切に設定されていることを確認します。
- パイプラインの中でストレージ アカウントを参照しないのであれば、ストレージ アカウントにアクセスするための権限をサービスに付与する必要はありません。
関連するコンテンツ
- トリガーの詳細については、パイプラインの実行とトリガーに関する記事を参照してください。
- パイプラインの中でトリガー メタデータを参照する方法については、「パイプライン実行でトリガー メタデータを参照する」をご覧ください。