aws lambdaからslackに投稿して、5秒後に削除してみた
Slackアプリトークンの取得方法は、こちら
slackってメッセージIDがなくて、メッセージのタイムスタンプ指定なんだ。めずらしい!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import time from slack_sdk import WebClient from slack_sdk.errors import SlackApiError # 直接書くテスト用の Slack API トークン SLACK_TOKEN = "xoxb-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" CHANNEL_ID = "CXXXXXXXXXX" # 投稿するチャンネルのID # Slack クライアントの作成 client = WebClient(token=SLACK_TOKEN) def lambda_handler(event, context): try: # メッセージを投稿 response = client.chat_postMessage(channel=CHANNEL_ID, text="このメッセージは5秒後に削除されます") message_ts = response["ts"] # 投稿したメッセージのタイムスタンプ print(f"メッセージ投稿成功: {message_ts}") # 5秒待機 time.sleep(5) # メッセージを削除 delete_response = client.chat_delete(channel=CHANNEL_ID, ts=message_ts) if delete_response["ok"]: print("メッセージを削除しました。") else: print("削除に失敗しました。") except SlackApiError as e: print(f"エラー: {e.response['error']}") return {"error": e.response['error']} return {"status": "success"} |
ローカルのwindows実行の場合は、pipでslack_sdkをインストールすればいいけど、
aws lambdaの場合は、レイヤーというLambda関数の依存ファイルやライブラリを別のコンポーネントとして管理できる所にアップロードしないと駄目!
1, lambdaのpythonのバージョンが3.13なので、ローカルのwindowsのpythonも3.13にする
2, アップロードするためのzipファイルを、powershellで生成
1 2 3 4 5 |
mkdir slack_layer mkdir slack_layer\python mkdir slack_layer\python\lib\python3.13\site-packages pip install slack_sdk -t slack_layer\python\lib\python3.13\site-packages Compress-Archive -Path slack_layer\* -DestinationPath slack_sdk_layer.zip |
3, aws cliからアップロード(layerは関数毎じゃなくて、lambda全体で共通するが、pythonのバージョンが同じじゃないと駄目!!!)
1 2 3 4 5 6 |
aws lambda publish-layer-version ` --layer-name slack_sdk_layer ` --description "Layer with slack_sdk" ` --zip-file fileb://slack_sdk_layer.zip ` --compatible-runtimes python3.13 ` --region ap-northeast-1 |
4, Lambda コンソールで対象の関数を開く
「レイヤー」タブ → 「レイヤーを追加」 を選択
「カスタムレイヤー」 を選択
バージョンも指定する必要がある!!
5, 普通にlambda関数をテスト実行すると、3秒制限があるので、10秒くらいに延長しておく
AWS Lambda コンソール に移動。
タイムアウトが発生した関数を開く。
「設定」タブ をクリック。
「基本設定」セクション → 「編集」 をクリック。
「タイムアウト」 を「3秒」から「10秒」に変更。
「保存」 をクリック。