今回は、Cloud FunctionsからSlackに通知を送る方法について説明します!
最近、某自動車メーカーのグループ会社がクラウドの設定を間違っていたことにより、顧客情報の一部を約10年間、インターネットから誰でも閲覧できるようになっていたことが報道されました。クラウドを使用する上で、正しい設定になっているか確認することは、とても重要なことです。
このような事故を防ぐために、クラウドで間違った設定がされた時に、通知を送る方法について説明します。今回は、1回目として、Cloud FunctionsからSlackに通知を送る方法について説明します。2回目では、Cloud Loggingのログから特定の文字列を検出し、Cloud FunctionsからSlackに通知を送る方法を説明します。
今後、Google Cloudを使用する人や情報システム部門担当者の方に読んでいただきたい内容となっています。
是非、最後までご覧いただけると嬉しいです。
構築手順
まずは、構築手順について説明します。構築は、全3ステップです。
- Slackの設定
- Cloud Pub/Subの設定
- Cloud Functionsの設定
1つずつ詳しく説明します。
Slackの設定
まずは、Slackの設定です。Slackは、フリープランがあるので、使用したことない人は、使ってみてください。IT企業では、広く使われているサービスの1つです。私の場合、前職でも現職でも使っています。
今回、SlackはIncoming Webhookという機能を使用します。Incoming Webhookとは、外部サービスやアプリケーションからSlackのチャンネルにメッセージを送信することができる機能です。
2020年から、Slack Appを作成して利用する方法が推奨されていますので、今回はその方法で行います。
Incoming Webhookの設定方法
Incoming Webhookの設定方法について説明します。
1.slack apiページを開く
下記slack apiのページを開きます。ログインが必要になるので、Slackのアカウントを使用してログインします。
正常にログインする下記ページが開きます。
2.新規App作成
右上の「Create New App」を選択します。
「From Scratch」を選択します。
3.Name app & choose workspace
Appの名前とワークスペースを選択します。Appの名前は任意です。私は、「slack_notification」にしています。ワークスペースは、通知を送るチャンネルがあるワークスペースを選択します。上記設定後、「Create App」を選択します。
- App Name:任意
- Pick a workspace to develop your app in::通知を送るチャンネルがあるワークスペース
4.Webhook URLの作成
Appが作成されると下記ページが開きますので、「Incoming Webhooks」を選択します。
「Activate Incoming Webhooks」を「On」にし、「Add New Webhook to Workspace」を選択します。
通知を送るチャンネルを選択後、「許可する」を選択します。
発行されたURLをコピーし、メモ帳アプリ等に貼り付けて後で使用します。
正常に、Appがチャンネルに関連付けされると、Slackに「added an integration to this channel: アプリ名」が表示されます。
Slackの設定は、これで終わりになります。
Cloud Pub/Subでトピックの作成
次は、Cloud Pub/Subの設定です。Cloud Pub/Subには、アプリケーションやデバイスからメッセージを送信し、他のアプリケーションやサービスに受信できる機能があります。
第二段階で、Cloud LoggingのLogから、特定の文字列を検出した際にメッセージを飛ばすように設定しますので、そのための準備を行っておきます。
1.トピックを作成
Google Cloud コンソールから、Pub/Subのページを開きます。画面上部の「トピックを作成」を選択します。
2.新規トピックの作成
新規トピックの作成を行います。トピック IDを任意で入力します。私は、「pubsub_slack_notification」にしています。入力後、「作成」を選択します。
正常にトピックが作成されると、下記トピックのページが開きます。
以上で、Pub/Subのトピック作成は終わりになります。
Cloud Functionsの設定
最後に、Cloud Funcitonsでファンクションの作成を行います。Cloud Funcitonsについては、以前のブログに書いておりますので、こちらも参考にしてください。
1.ファンクションを作成
Google Cloud コンソールから、Cloud Functionsのページを開きます。その後、画面上部の「ファンクションを作成」を選択します。
2.構成を設定
構成を設定します。設定は、下記にします。関数名は任意で設定します。Cloud Pub/Sub トピックは、先程作成したPub/Subのトピックを選択します。
- 環境:第1世代
- 関数名:任意
- リージョン:asia-northeast1(東京)
- トリガーのタイプ:Cloud Pub/Sub
- Cloud Pub/Sub トピックを選択してください:Cloud Pub/Subで作成したトピック
上記入力後、「保存」を選択します。
3.ランタイムの設定
ランタイムの設定を変更します。今回は、検証用なので、最小設定にします。
- 割り当てるメモリ:128MB
- インスタンスの最大数:1
設定後、「次へ」を選択します。
4.コードの入力
コードの入力をする前に、使用するランタイムとエントリ ポイントを設定します。今回は、下記の通りに設定します。
- ランタイム:Python 3.7
- エントリ ポイント:任意
上記設定後、下記Pythonのコードを入力します。webhook_urlの”(ダブルクォーテーション)の間には、Slackの設定で発行したWebhook URLを入力してください。また、textの”(ダブルクォーテーション)の間には、Slackに通知するメッセージを入力します。下記コードでは、「Slackにメッセージを送信します!」になっている部分です。
import requests
import json
# webhookURLを指定
webhook_url = "https://hooks.slack.com/services/XXXXXXXXXX/XXXXXXXXXX/000000CimX"
# 送信するテキストを定義
text = "Slackにメッセージを送信します!"
# Slackに送信する
requests.post(webhook_url, data = json.dumps({
"text": text
}))
最後に、画面下部のデプロイを選択します。
問題なくデプロイされると、Slackにメッセージが通知されます。なお、初回実行時は、通知されない場合があるので、編集から再度デプロイします。
なお、ステータスを確認すると赤い!(エクスクラメーションマーク)が表示されています。メッセージを確認すると、「関数をデプロイできませんでした」と表示されます。ログを確認すると下記メッセージが表示されますが、こちらのメッセージは、Pythonの関数名とエント リポイントの名前が違っていたり、ランタイムのバージョン等が間違っていると出力されます。今回は、Pythonの関数を使用しておらず、エントリ ポイント名を使用していない為、エラーが表示されます。次回の、Cloud LoggingのログからSlackに通知を送る際は、関数やエントリ ポイントを正確に指定します。今回は、エラーを無視して、まずは、Cloud FuncitionsからSlackに通知が届くことを確認してください。
Function failed on loading user code. This is likely due to a bug in the user code. Error message: Error: please examine your function logs to see the error cause: https://cloud.google.com/functions/docs/monitoring/logging#viewing_logs. Additional troubleshooting documentation can be found at https://cloud.google.com/functions/docs/troubleshooting#logging. Please visit https://cloud.google.com/functions/docs/troubleshooting for in-depth troubleshooting documentation.
まとめ
本日は、下記4点について説明しました。
- 構築手順
- Slackの設定
- Cloud Pub/Subでトピックの作成
- Cloud Functionsの設定
Cloud Pub/SubとCloud Functionsを使用して、通知を送る方法は実際の運用でよく行います。今回は、Slackに通知するサービスを構築しましたが、Eメール等にも通知することができるので、また別のブログで構築方法を説明します。
通知サービスを構築することにより、Google Cloudを使用するユーザーが間違った設定を行った時に検出することができます。
これからも、Macのシステムエンジニアとして、日々、習得した知識や経験を発信していきますので、是非、ブックマーク登録してくれると嬉しいです!
それでは、次回のブログで!