⚙️

【Cloud Data Fusion】パイプライン失敗時のSlack通知方法

5 min read

はじめに

この記事は、Google Cloud Platform Advent Calendar 2021の16日目の記事になります。

Cloud Data Fusion (以降、CDF)[1] を本格的に利用し始めて8ヶ月が経ちました。
今回はパイプライン実行が失敗した場合のSlackへの通知方法をまとめてみました。

アラート通知方法

CDFのパイプライン実行エラー検知方法については
過去投稿したブログも参考にしていただければと思います。

https://zenn.dev/hssh2_bin/articles/464939e31baf87b95569#設定❶

パイプライン実行の失敗をSlackチャネルに通知するには、Make HTTP Call[2]を利用します。

利用環境

Product version
CDAP 6.4.1 (Basic)
CDF Private IP 有効
Region asia-northeast1

【補足】
・ Developerエディションでも動作しました。
・ CDFインスタンスをPublicで構築しても動作しました。

実施手順

  1. Slackの設定
  2. curlコマンドでの通知テスト
  3. Make HTTP Callの設定
  4. 実施結果確認

1. Slackの設定

  • まず、Slackの設定がいくつか必要になります。
  • こちらの記事を参考に対応します。

https://zenn.dev/kou_pg_0131/articles/slack-api-post-message

【必要な対応】

  • アプリの作成
  • スコープの設定 (Bot Token Scopesのみ)
  • ワークスペースへのアプリインストール
  • チャネルへのアプリ追加

2. curlコマンドでの通知テスト

  • Bot User OAuth Tokenを使って通知したいチャネルにメッセージを送ります。
  • チャネルはパブリックとプライベートどちらも通知可能です。
パラメータ 内容 サンプル値
token APIを実行するためのアクセストークン xoxb-668814143316-2441900189495-E0TZsRkP18KjsKVNByhZwIIG
channel 通知先のSlackチャネルID C1234567890
text チャネルに通知するメッセージ test_alert
  • ターミナルからcurlコマンドでSlack APIにPOSTします。
❶リクエストボーディに全部指定するパターン
$ curl -X POST 'https://slack.com/api/chat.postMessage' \
-d 'token=xoxb-668814143316-2441900189495-E0TZsRkP18KjsKVNByhZwIIG' \
-d 'channel=C1234567890' \
-d 'text=test_alert'
❷パラメータをURL含めトークンだけリクエストヘッダーに指定するパターン
$ curl -X POST 'https://slack.com/api/chat.postMessage?channel=C1234567890&text=test_alert' \
-H 'Authorization: Bearer xoxb-668814143316-2441900189495-E0TZsRkP18KjsKVNByhZwIIG'
  • 上記2つのパターンのどちらでも通知できます。

3. Make HTTP Callの設定

  • 手順2の❷のcurlコマンドを参考にMake HTTP Callを設定します。
  • Google Cloudの管理コンソールからCDFインスタンスにアクセスします。
  • CDFの[Pipeline] > [Studio]を開きます。
  • 画面上部の❶[Configure] > ❷[Pipeline alert]を開き、❸の[+]をクリックします。

  • ❹[Make HTTP Call]をクリックします。

  • ❺Run Conditionをfailure、❻にパラメータ入りのURLを入力します。

  • ❼Request Headersにアクセストークンを入力し、❽の[Next]ボタンをクリックします。
  • [Confirm]をクリックし、[Save]で保存します。

  • 設定値は下記表の通りになります。
項目 必須
Run Condition - failure
URL https://slack.com/api/chat.postMessage?channel=C1234567890&text=test_alert
HTTP Method POST
Request Body - 空欄のまま
Number of Retries - 空欄のまま
Should Follow Redirects - trueのまま
Request Headers(key) - Authorization
Request Headers(value) - Bearer xoxb-668814143316-2441900189495-E0TZsRkP18KjsKVNByhZwIIG

Request HeadersでContent-Typeを指定するとうまく通知が飛びませんでした。
また、tokenをURLパラメータに含めるように設定してもうまく通知が飛びませんでした。

  • あとは必要なパイプラインを構成後、[Deploy]ボタンを押してデプロイします。

パイプラインをデプロイ (Deploy) するとPipeline Alertの設定も変更することができません。

4. 実施結果確認

  • 最後にパイプラインの実行ですが、あえて失敗するように実行します。
  • 失敗するとcurlコマンドで確認した時と同じものがSlackチャネルに届きます。

まとめ

さて、いかがでしたでしょうか?

スケジュール設定した定期ジョブが失敗したことを検知できないと
運用上かなり困ることになるので、このSlack通知は非常に便利な通知方法になります。

EMailでも通知させることは可能ですが、Slackベースの業務をしている企業では
メール通知では復旧対応が遅れてしまうことがありますよね。

ぜひ、皆様も試してみて頂ければと思います^^

Cloud Data Fusion 関連投稿

脚注
  1. Cloud Data Fusionの公式ページ ↩︎

  2. HTTP Callback Post-run Action ↩︎

Discussion

ログインするとコメントできます