Azure Data Factory または Synapse Analytics パイプラインから Microsoft Teams チャネルに通知を送信する

多くの場合、パイプラインの実行中または実行後に通知を送信する必要があります。 通知では、予防的アラートが提供され、問題を検出するための事後対応型の監視の必要性が軽減されます。  データ ファクトリまたは Synapse パイプラインで呼び出すことができるロジック アプリを使用して電子メール通知を送信する方法について説明します。 多くの企業では、コラボレーションのために Microsoft Teams を使用することもますます増えています。 この記事では、パイプライン アラートから Microsoft Teams への通知を構成する方法について説明します。 

前提条件

パイプラインから Teams に通知を送信する前に、Teams チャネルの受信 Webhook を作成する必要があります。 この目的で新しい Teams チャネルを作成する必要がある場合は、Teams のドキュメントを参照してください。  

  1. Microsoft Teams を開き、[アプリ] タブにアクセスします。"受信 Webhook" を検索し、[受信 Webhook] コネクタを選びます。

    Shows the Incoming Webhook app under the Apps tab in Teams.

  2. [Add to a team] (チームに追加) ボタンを選択して、通知を送信するチームまたはチーム チャネル名サイトにコネクタを追加します。

    Highlights the "Add to a team" button for the Incoming Webhook app.

  3. 通知を送信するチームまたはチーム チャネル名を入力または選択します。

    Shows the team selection prompt on the Incoming Webhook app configuration dialog in Teams. Type the "Team or Team channel name"

  4. [コネクタのセットアップ] ボタンを選択して、前の手順で選択したチームまたはチーム チャネル名の受信 Webhook を設定します。

    Shows the team selection prompt on the Incoming Webhook app configuration dialog in Teams. Highlights the Team and the "Set up a connector" button

  5. 必要に応じて Webhook に名前を付け、必要に応じて、メッセージを識別するためのアイコンをアップロードします。 その後、[作成] ボタンを選択して受信 Webhook を作成します。

    Highlights the name property, optional image upload, and "Create" button in the Incoming Webhook options page.  

  6. 作成時に生成された Webhook URL をコピーし、後でパイプラインで使用できるように保存します。 その後、[完了] ボタンを選択してセットアップを完了します。

    Shows the new webhook URL on the Incoming Webhook options page after creation.

  7. Webhook コネクタを追加するチャネルで通知を確認できます。

    Shows the notification in the Teams channel where you added the webhook connector.

パイプラインから Teams チャネルで通知を送信する手順:

  1. 左側のペインにある [作成者] タブを選択します。

  2. + (正符号) ボタンを選択し、[新しいパイプライン] を選択します。

    Shows the "New pipeline" menu in the Azure Data Factory Studio.

  3. [全般] の [プロパティ] ウィンドウで、[名前]NotifiyTeamsChannelPipeline を指定 します。 次に、右上隅にある [プロパティ] アイコンをクリックしてパネルを折りたたみます。

    Shows the "Properties" panel.

    Shows the "Properties" panel hidden.

  4. [構成] ウィンドウで [パラメーター] を選択し、[+ 新規] ボタンを選択して、パイプラインの次のパラメーターを定義します。

    名前 種類 既定値
    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

    Shows the "Pipeline parameters".

    Note

    これらのパラメーターは、監視 URL を作成するために使用されます。 (パイプラインが属しているのと同じデータ ファクトリの) 有効なサブスクリプションとリソース グループを指定していないとします。 この場合、通知には有効なパイプライン監視 URL が含まれませんが、メッセージは引き続き機能します。 さらに、これらのパラメーターを追加することで、これらの値を別のパイプラインから常に渡す必要がなくなります。 これらの値をメタデータ駆動型の方法で制御する場合は、それに応じて変更する必要があります。

    ヒント

    関連するパラメーターの既定値については、現在の Data Factory の "サブスクリプション ID"、"リソース グループ"、Teams Webhook URL" (前提条件を参照) を追加することをお勧めします。

  5. [構成] ウィンドウで [変数] を選択し、[+ 新規] ボタンを選択して、パイプラインの次のパラメーターを定義します。

    名前 種類 既定値
    messageCard String

    Shows the "Pipeline variables".

  6. パイプラインの [アクティビティ] ペイン内で "変数の設定" を検索し、変数の設定アクティビティをパイプライン キャンバスにドラッグします。

  7. キャンバス上で変数の設定アクティビティ (まだ選ばれていない場合)、その [全般] タブの順に選んで、その詳細を編集します。

  8. [全般] タブで、[変数の設定] アクティビティの [名前] に「JSON スキーマを設定する」を指定します。

    Shows the "Set variable" activity general tab.

  9. [変数] タブで、[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": "Pipline 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)}"
                    }
                ]
            }
        ]
    }
    

    Shows the "Set variable" activity variables tab.

  10. パイプラインの [アクティビティ] ペイン内で 「Web」 を検索し、Web アクティビティをパイプライン キャンバスにドラッグします。

  11. [変数の設定] アクティビティが成功した場合にのみ実行されるように、Web アクティビティの依存関係条件を作成します。 この依存関係を作成するには、[変数の設定] アクティビティの右側にある緑色のハンドルを選択し、ドラッグして Web アクティビティに接続します。

  12. キャンバス上で新しい Web アクティビティ (まだ選ばれていない場合)、その [全般] タブの順に選んで、その詳細を編集します。

  13. [全般] ウィンドウで、[Web] アクティビティの [名前][Teams Webhook Url を呼び出す] を指定します。

    Shows the "Web" activity general pane.

  14. [設定] ウィンドウで、以下のプロパティを次のように設定します。

    プロパティ value
    URL @pipeline().parameters.teamWebhookUrl
    Method POST
    本文​​ @json(variables('messageCard'))

    Shows the "Web" activity settings pane.

  15. すべての設定が完了したら、NotifiyTeamsChannelPipeline パイプラインを検証、デバッグ、発行する準備ができました。

    • パイプラインを検証するには、ツール バーから [検証] を選択します。
    • パイプラインをデバッグするには、ツール バーで [デバッグ] を選択します。 ウィンドウ下部の [出力] タブでパイプラインの実行の状態を確認できます。
    • パイプラインを適切に実行できたら、上部のツール バーで [すべて発行] を選択します。 これにより、作成したエンティティが Data Factory に発行されます。 [正常に発行されました] というメッセージが表示されるまで待機します。

    Shows the "Validate, Debug, Publish" buttons to validate, debug, and then publish your pipeline.

使用例

このサンプルの使用シナリオでは、3 つの [パイプラインの実行] アクティビティを含むマスター パイプラインを作成します。 最初の [パイプラインの実行] アクティビティは、ETL パイプラインを呼び出します。残りの 2 つの実行パイプラインアクティビティは、"NotifiyTeamsChannelPipeline" パイプラインを呼び出して、関連する成功または失敗の通知を、ETL パイプラインの実行状態に応じて Teams チャネルに送信します。

  1. Data Factory の左側のウィンドウから [作成] タブを選択するか、Synapse Studio の左側のウィンドウから [統合] タブを選択します。 次に、[+] (正符号) ボタンを選択し、[パイプライン] を選択して新しいパイプラインを作成します。

  2. [全般] パネルの [プロパティ] の下で、[名前]MasterPipeline を指定します。 次に、右上隅にある [プロパティ] アイコンをクリックしてパネルを折りたたみます。

  3. パイプラインの [アクティビティ] ペイン内で パイプラインを検索し、3 つの [パイプラインの実行] アクティビティをパイプライン キャンバスにドラッグします。

  4. キャンバス上で新しい [パイプラインの実行] アクティビティ (まだ選択されていない場合)、その [全般] ウィンドウの順に選択して、その詳細を編集します。

    • [パイプラインの実行] アクティビティ の [名前] プロパティには、通知の送信先として呼び出された ETL パイプラインの名前を使用することをお勧めします。 [パイプライン実行] アクティビティの [名前]LoadDataPipeline を使用しました。これは呼び出されたパイプラインの名前であるためです。
    • [設定] ウィンドウで既存のパイプラインを選択するか、[呼び出されたパイプライン] プロパティの [+ 新規] ボタンを使用して新しいパイプラインを作成します。 たとえば、この例では、[呼び出されたパイプライン] プロパティに対して LoadDataPipeline パイプラインを選択しています。 必要に応じて、その他のオプションを選択し、パイプラインのパラメーターを設定して構成を完了します。

    Shows the "Execute pipeline" activity general pane for "LoadDataPipeline" pipeline.

    Shows the "Execute pipeline" activity setting pane for "LoadDataPipeline" pipeline.

  5. キャンバスで 2 番目の [パイプラインの実行] アクティビティを選択し、 [全般] ペインでその詳細を編集します。

    • [パイプラインの実行] アクティビティの [名前] に「OnSuccess Notification」を指定します。

    • [設定] ウィンドウで、[呼び出されたパイプライン] プロパティに対して先ほど作成した NotifiyTeamsChannelPipeline パイプラインを選択します。 アクティビティの種類に基づいて、必要に応じてパラメーターをカスタマイズします。 たとえば、次のようにパラメーターをカスタマイズしました。

      名前
      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 番目の [パイプラインの実行] アクティビティに接続します。

    Shows the second "Execute pipeline" activity "OnSuccess Notification" general pane for "NotifiyTeamsChannelPipeline" pipeline.

    Shows the second "Execute pipeline" activity "OnSuccess Notification" setting pane for "NotifiyTeamsChannelPipeline" pipeline.

  6. キャンバスで 3 番目の [パイプラインの実行] アクティビティを選択し、 [全般] ペインでその詳細を編集します。

    • [パイプラインの実行] アクティビティの [名前] に「OnFailure Notification」を指定します。

    • [設定] ウィンドウで、[呼び出されたパイプライン] プロパティに対して NotifiyTeamsChannelPipeline パイプラインを選択します。 アクティビティの種類に基づいて、必要に応じてパラメーターをカスタマイズします。 たとえば、今回は次のようにパラメーターをカスタマイズしました。

      名前
      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 パイプラインを検証してデバッグし、発行します。

    Shows the third "Execute pipeline" activity "OnFailure Notification" general pane for "NotifiyTeamsChannelPipeline" pipeline.

    Shows the third "Execute pipeline" activity "OnFailure Notification" settings pane for "NotifiyTeamsChannelPipeline" pipeline.

  7. パイプラインを実行して Teams で通知を受信します。 たとえば、次に示すのは、パイプラインが正常に実行されたときと失敗したときの通知の例です。

    Shows on success pipeline notifications in a Teams channel.

    Shows on failure pipeline notifications in a Teams channel.

  8. パイプラインの実行を表示するには、[View pipeline run] (パイプラインの実行を表示) ボタンを選択します。

システム変数と式を使用して動的メッセージを追加する

システム変数を使用して、メッセージを動的にすることができます。 例:

  • @activity("CopyData").output.errors[0].Message

  • @activity("DataFlow").error.Message

上記の式は、エラーから関連するエラー メッセージを返します。これは、Teams チャネルで通知として送信できます。 このトピックの詳細については、コピー アクティビティの出力プロパティに関する記事を参照してください。

また、Microsoft Teams でサポートされている通知ペイロードのスキーマを確認し、必要に応じて上記のテンプレートをカスタマイズすることもお勧めします。

パイプラインからメールを送信する方法