Azure Data Factory または Synapse Analytics パイプラインから Microsoft Teams チャネルに通知を送信する
多くの場合、パイプラインの実行中または実行後に通知を送信する必要があります。 通知では、予防的アラートが提供され、問題を検出するための事後対応型の監視の必要性が軽減されます。 データ ファクトリまたは Synapse パイプラインで呼び出すことができるロジック アプリを使用して電子メール通知を送信する方法について説明します。 多くの企業では、コラボレーションのために Microsoft Teams を使用することもますます増えています。 この記事では、パイプライン アラートから Microsoft Teams への通知を構成する方法について説明します。
前提条件
パイプラインから Teams に通知を送信する前に、Teams チャネルの受信 Webhook を作成する必要があります。 この目的で新しい Teams チャネルを作成する必要がある場合は、Teams のドキュメントを参照してください。
Microsoft Teams を開き、[アプリ] タブにアクセスします。"受信 Webhook" を検索し、[受信 Webhook] コネクタを選びます。
[Add to a team] (チームに追加) ボタンを選択して、通知を送信するチームまたはチーム チャネル名サイトにコネクタを追加します。
通知を送信するチームまたはチーム チャネル名を入力または選択します。
[コネクタのセットアップ] ボタンを選択して、前の手順で選択したチームまたはチーム チャネル名の受信 Webhook を設定します。
必要に応じて Webhook に名前を付け、必要に応じて、メッセージを識別するためのアイコンをアップロードします。 その後、[作成] ボタンを選択して受信 Webhook を作成します。
作成時に生成された Webhook URL をコピーし、後でパイプラインで使用できるように保存します。 その後、[完了] ボタンを選択してセットアップを完了します。
Webhook コネクタを追加するチャネルで通知を確認できます。
パイプラインから Teams チャネルで通知を送信する手順:
左側のペインにある [作成者] タブを選択します。
+ (正符号) ボタンを選択し、[新しいパイプライン] を選択します。
[プロパティ] ペインの [全般] で、[名前] に NotifyTeamsChannelPipeline を指定 します。 次に、右上隅にある [プロパティ] アイコンをクリックしてパネルを折りたたみます。
[構成] ウィンドウで [パラメーター] を選択し、[+ 新規] ボタンを選択して、パイプラインの次のパラメーターを定義します。
名前 種類 既定値 subscription String
Specify subscription id for the pipeline
resourceGroup String
Specify resource group name for the pipeline
runId String
@activity('Specify name of the calling pipeline').output['pipelineRunId']
name String
@activity('Specify name of the calling pipeline').output['pipelineName']
triggerTime String
@activity('Specify name of the calling pipeline').ExecutionStartTime
status String
@activity('Specify name of the calling pipeline').Status
message String
@activity('Specify name of the calling pipeline').Error['message']
executionEndTime String
@activity('Specify name of the calling pipeline').ExecutionEndTime
runDuration String
@activity('Specify name of the calling pipeline').Duration
teamWebhookUrl String
Specify Team Webhook URL
Note
これらのパラメーターは、監視 URL を作成するために使用されます。 (パイプラインが属しているのと同じデータ ファクトリの) 有効なサブスクリプションとリソース グループを指定していないとします。 この場合、通知には有効なパイプライン監視 URL が含まれませんが、メッセージは引き続き機能します。 さらに、これらのパラメーターを追加することで、これらの値を別のパイプラインから常に渡す必要がなくなります。 これらの値をメタデータ駆動型の方法で制御する場合は、それに応じて変更する必要があります。
ヒント
関連するパラメーターの既定値については、現在の Data Factory の "サブスクリプション ID"、"リソース グループ"、Teams Webhook URL" (前提条件を参照) を追加することをお勧めします。
[構成] ウィンドウで [変数] を選択し、[+ 新規] ボタンを選択して、パイプラインの次のパラメーターを定義します。
名前 種類 既定値 messageCard String
パイプラインの [アクティビティ] ペイン内で "変数の設定" を検索し、変数の設定アクティビティをパイプライン キャンバスにドラッグします。
キャンバス上で変数の設定アクティビティ (まだ選ばれていない場合)、その [全般] タブの順に選んで、その詳細を編集します。
[全般] タブで、[変数の設定] アクティビティの [名前] に「JSON スキーマを設定する」を指定します。
[変数] タブで、[Name] プロパティにmessageCard 変数を選択し、その [Value] プロパティに次の JSON を入力します。
{ "@type": "MessageCard", "@context": "http://schema.org/extensions", "themeColor": "0076D7", "summary": "Pipeline status alert message", "sections": [ { "activityTitle": "Pipeline execution alert", "facts": [ { "name": "Subscription Id:", "value": "@{pipeline().parameters.subscription}" }, { "name": "Resource Group:", "value": "@{pipeline().parameters.resourceGroup}" }, { "name": "Data Factory Name:", "value": "@{pipeline().DataFactory}" }, { "name": "Pipeline RunId:", "value": "@{pipeline().parameters.runId}" }, { "name": "Pipeline Name:", "value": "@{pipeline().Pipeline}" }, { "name": "Pipeline Status:", "value": "@{pipeline().parameters.status}" }, { "name": "Execution Start Time (UTC):", "value": "@{pipeline().parameters.triggerTime}" }, { "name": "Execution Finish Time (UTC):", "value": "@{pipeline().parameters.executionEndTime}" }, { "name": "Execution Duration (s):", "value": "@{pipeline().parameters.runDuration}" }, { "name": "Message:", "value": "@{pipeline().parameters.message}" }, { "name": "Notification Time (UTC):", "value": "@{utcnow()}" } ], "markdown": true } ], "potentialAction": [ { "@type": "OpenUri", "name": "View pipeline run", "targets": [ { "os": "default", "uri": "@{concat('https://synapse.azure.com/monitoring/pipelineruns/',pipeline().parameters.runId,'?factory=/subscriptions/',pipeline().parameters.subscription,'/resourceGroups/',pipeline().parameters.resourceGroup,'/providers/Microsoft.DataFactory/factories/',pipeline().DataFactory)}" } ] } ] }
パイプラインの [アクティビティ] ペイン内で 「Web」 を検索し、Web アクティビティをパイプライン キャンバスにドラッグします。
[変数の設定] アクティビティが成功した場合にのみ実行されるように、Web アクティビティの依存関係条件を作成します。 この依存関係を作成するには、[変数の設定] アクティビティの右側にある緑色のハンドルを選択し、ドラッグして Web アクティビティに接続します。
キャンバス上で新しい Web アクティビティ (まだ選ばれていない場合)、その [全般] タブの順に選んで、その詳細を編集します。
[全般] ウィンドウで、[Web] アクティビティの [名前] に [Teams Webhook Url を呼び出す] を指定します。
[設定] ウィンドウで、以下のプロパティを次のように設定します。
プロパティ value URL @pipeline().parameters.teamWebhookUrl
Method POST
本文 @json(variables('messageCard'))
すべての設定が完了したら、NotifyTeamsChannelPipeline パイプラインを検証、デバッグ、発行する準備ができました。
- パイプラインを検証するには、ツール バーから [検証] を選択します。
- パイプラインをデバッグするには、ツール バーで [デバッグ] を選択します。 ウィンドウ下部の [出力] タブでパイプラインの実行の状態を確認できます。
- パイプラインを適切に実行できたら、上部のツール バーで [すべて発行] を選択します。 これにより、作成したエンティティが Data Factory に発行されます。 [正常に発行されました] というメッセージが表示されるまで待機します。
使用例
このサンプルの使用シナリオでは、3 つの [パイプラインの実行] アクティビティを含むマスター パイプラインを作成します。 最初の [パイプラインの実行] アクティビティは、ETL パイプラインを呼び出します。残りの 2 つの実行パイプライン アクティビティは、"NotifyTeamsChannelPipeline" パイプラインを呼び出して、関連する成功または失敗の通知を、ETL パイプラインの実行状態に応じて Teams チャネルに送信します。
Data Factory の左側のウィンドウから [作成] タブを選択するか、Synapse Studio の左側のウィンドウから [統合] タブを選択します。 次に、[+] (正符号) ボタンを選択し、[パイプライン] を選択して新しいパイプラインを作成します。
[全般] パネルの [プロパティ] の下で、[名前] に MasterPipeline を指定します。 次に、右上隅にある [プロパティ] アイコンをクリックしてパネルを折りたたみます。
パイプラインの [アクティビティ] ペイン内で パイプラインを検索し、3 つの [パイプラインの実行] アクティビティをパイプライン キャンバスにドラッグします。
キャンバス上で新しい [パイプラインの実行] アクティビティ (まだ選択されていない場合)、その [全般] ウィンドウの順に選択して、その詳細を編集します。
- [パイプラインの実行] アクティビティ の [名前] プロパティには、通知の送信先として呼び出された ETL パイプラインの名前を使用することをお勧めします。 [パイプライン実行] アクティビティの [名前] に LoadDataPipeline を使用しました。これは呼び出されたパイプラインの名前であるためです。
- [設定] ウィンドウで既存のパイプラインを選択するか、[呼び出されたパイプライン] プロパティの [+ 新規] ボタンを使用して新しいパイプラインを作成します。 たとえば、この例では、[呼び出されたパイプライン] プロパティに対して LoadDataPipeline パイプラインを選択しています。 必要に応じて、その他のオプションを選択し、パイプラインのパラメーターを設定して構成を完了します。
キャンバスで 2 番目の [パイプラインの実行] アクティビティを選択し、 [全般] ペインでその詳細を編集します。
[パイプラインの実行] アクティビティの [名前] に「OnSuccess Notification」を指定します。
[設定] ペインで、[呼び出されたパイプライン] プロパティに対して先ほど作成した NotifyTeamsChannelPipeline パイプラインを選択します。 アクティビティの種類に基づいて、必要に応じてパラメーターをカスタマイズします。 たとえば、次のようにパラメーターをカスタマイズしました。
名前 値 subscription 11111111-0000-aaaa-bbbb-0000000000
resourceGroup contosorg
runId @activity('LoadDataPipeline').output['pipelineRunId']
name @activity('LoadDataPipeline').output['pipelineName']
triggerTime @activity('LoadDataPipeline').ExecutionStartTime
status @activity('LoadDataPipeline').Status
message Pipeline - LoadDataPipeline ran with success.
executionEndTime @activity('LoadDataPipeline').ExecutionEndTime
runDuration @activity('LoadDataPipeline').Duration
teamWebhookUrl https://microsoft.webhook.office.com/webhookb2/1234abcd-1x11-2ff1-ab2c-1234d0699a9e@72f988bf-32b1-41af-91ab-2d7cd011db47/IncomingWebhook/8212f66ad80040ab83cf68b554d9232a/17d524d0-ed5c-44ed-98a0-35c12dd89a6d
最初の [パイプラインの実行] アクティビティが成功した場合にのみ実行されるように、2 番目の [パイプラインの実行] アクティビティの依存関係条件を作成します。 この依存関係を作成するには、最初の [パイプラインの実行] アクティビティの右側にある緑色のハンドルを選択し、それをドラッグして、2 番目の [パイプラインの実行] アクティビティに接続します。
キャンバスで 3 番目の [パイプラインの実行] アクティビティを選択し、 [全般] ペインでその詳細を編集します。
[パイプラインの実行] アクティビティの [名前] に「OnFailure Notification」を指定します。
[設定] ペインで、[呼び出されたパイプライン] プロパティに対して NotifyTeamsChannelPipeline パイプラインを選択します。 アクティビティの種類に基づいて、必要に応じてパラメーターをカスタマイズします。 たとえば、今回は次のようにパラメーターをカスタマイズしました。
名前 値 subscription 11111111-0000-aaaa-bbbb-0000000000
resourceGroup contosorg
runId @activity('LoadDataPipeline').output['pipelineRunId']
name @activity('LoadDataPipeline').output['pipelineName']
triggerTime @activity('LoadDataPipeline').ExecutionStartTime
status @activity('LoadDataPipeline').Status
message @activity('LoadDataPipeline').Error['message']
executionEndTime @activity('LoadDataPipeline').ExecutionEndTime
runDuration @activity('LoadDataPipeline').Duration
teamWebhookUrl https://microsoft.webhook.office.com/webhookb2/1234abcd-1x11-2ff1-ab2c-1234d0699a9e@72f988bf-32b1-41af-91ab-2d7cd011db47/IncomingWebhook/8212f66ad80040ab83cf68b554d9232a/17d524d0-ed5c-44ed-98a0-35c12dd89a6d
最初の [パイプラインの実行] アクティビティが失敗した場合にのみ実行されるように、3 番目の [パイプラインの実行] アクティビティの依存関係条件を作成します。 この依存関係を作成するには、最初の [パイプラインの実行] アクティビティの右側にある赤色のハンドルを選択し、それをドラッグして、3 番目の [パイプラインの実行] アクティビティに接続します。
Masterpipeline パイプラインを検証してデバッグし、発行します。
パイプラインを実行して Teams で通知を受信します。 たとえば、次に示すのは、パイプラインが正常に実行されたときと失敗したときの通知の例です。
パイプラインの実行を表示するには、[View pipeline run] (パイプラインの実行を表示) ボタンを選択します。
システム変数と式を使用して動的メッセージを追加する
システム変数と式を使用して、メッセージを動的にすることができます。 例:
@activity("CopyData").output.errors[0].Message
@activity("DataFlow").error.Message
上記の式は、エラーから関連するエラー メッセージを返します。これは、Teams チャネルで通知として送信できます。 このトピックの詳細については、コピー アクティビティの出力プロパティに関する記事を参照してください。
また、Microsoft Teams でサポートされている通知ペイロードのスキーマを確認し、必要に応じて上記のテンプレートをカスタマイズすることもお勧めします。