🍣
Cloud FunctionsのHTTPトリガーを使って,Slackのチャンネルへ通知する
Python Slack SDKからSlackのチャンネルへ通知する仕組みをGoogle Cloud Functionsで実現します。
Slack Appは,前回の記事で作成したものを用います。
Cloud FunctionsでSlackへ通知する関数を作成
Cloud Functionsで関数を作成します。
コードは前回同様のものをベースとして利用します。
以下のコードをmain.py
として保存します。
Cloud Functionsでは,関数ディレクトリのルートにあるmain.py
という名前のファイルからソースコードを読み込みます。
import functions_framework
import logging
import os
# Import WebClient from Python SDK (github.com/slackapi/python-slack-sdk)
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
@functions_framework.http
def my_function(request):
# WebClient instantiates a client that can call API methods
# When using Bolt, you can use either `app.client` or the `client` passed to listeners.
client = WebClient(token=os.environ.get("SLACK_BOT_TOKEN"))
logger = logging.getLogger(__name__)
# ID of the channel you want to send the message to
channel_id = "YOUR_ID"
try:
# Call the chat.postMessage method using the WebClient
result = client.chat_postMessage(channel=channel_id, text="Hello world")
logger.info(result)
return "success"
except SlackApiError as e:
logger.error(f"Error posting message: {e}")
return "error"
同様に,必要なパッケージは,requirements.txt
に記載します。
slack_sdk==3.23.0
デプロイ
環境変数SLACK_BOT_TOKEN
は--set-env-vars
オプションを付与して指定します。
gcloud functions deploy my_function --set-env-vars SLACK_BOT_TOKEN=YOUR_TOKEN --trigger-http --runtime=python311 --no-allow-unauthenticated --source=. --gen2
Slackへの通知を確認
デプロイ後は,該当のURLに対して,curlコマンドを叩き,関数を実行します。
まず,URLを確認します。
gcloud functions describe my_function --gen2 --region REGION --format="value(serviceConfig.uri)"
https://my-function-xxxxxxxx-xx.a.run.app
その後,該当のURLへcurlを叩きます。
curl -m 70 -X POST URL -H "Authorization: Bearer $(gcloud auth print-identity-token)" -H "Content-Type: application/json" -d '{}'
設定したSlackのチャンネルへ通知されることを確認します。
Discussion