こんにちは。takapy(@takapy0210)です。
本記事は、転職カウントダウンカレンダー 4日目の記事です。リフレッシュを兼ねてDocker以外の記事を挟みます。
- はじめに
- SlackのWorkspaceにIncoming Webhookを登録
- AWS Simple Queue Serviceの作成
- Lambda関数の作成
- 毎日定刻につぶやくように設定してみる
- 感想
はじめに
AWS Lambdaというサービスを学ぶために、超簡易的な固定メッセージslack通知を作りました。最終的には、毎日定刻に固定のメッセージをslackへ通知できるようになりました。
SlackのWorkspaceにIncoming Webhookを登録
多くの記事が出回っているので、こちらは割愛させていただきます。
AWS Simple Queue Serviceの作成
Lambda起動用のSQSを作成します。(作成方法は他記事にお任せします)このSQSにメッセージが送信されたら、Lambdaが起動してslack通知が行われるようにします。
Lambda関数の作成
マネジメントコンソールからlambda
を検索し、関数の作成を実行します。
上記のように、左側からSQS
を選択してトリガーへ追加します。
追加すると、下部にどのSQSをトリガーとするか指定する画面が表示されるため、冒頭で作成したSQSを指定します。
python3でlambda関数を作成する
lambdaを選択すると(上図でいうところのlambda_slackbot)、下記のような簡易エディタが表示されます。
今回はslack通知するので、下記のようなコードをここに記述します。
import json import urllib.request def lambda_handler(event, context): response = post_slack() return response def post_slack(): # 設定 SLACK_POST_URL = "https://hooks.slack.com/XXXXXXXXXXXXX" username = "takapyBot" icom = ":sunglasses:" channnel = '#aws' method = "POST" # メッセージの内容 message = "Lambdaから定期botです!!!!" send_data = { "username": username, "icon_emoji": icom, "text": message, "channel": channnel } send_text = ("payload=" + json.dumps(send_data)).encode('utf-8') request = urllib.request.Request( SLACK_POST_URL, data=send_text, method=method ) with urllib.request.urlopen(request) as response: response_body = response.read().decode('utf-8') return response_body
テスト実行してみる
Lambda関数はテスト実行することができます。
画面右上のテストボタンからテストを行うことができます。
テストイベントを作成しイベントの中身を記述します。
補足ですが、ココに記述されたjsonがlambda_handler(event, context)
関数の引数event
の内容となります。
今回は引数event
を使用していないためどのような内容でも問題ありません。
(例としてtakapyTestEvents
というテストを作成してみました。)
テスト実行してみた結果、正しくslack通知されました!!
この後、実際にSQSにメッセージを送信して動作確認しましたが、テスト実行時と同じく想定通りの動作をしてくれました。
毎日定刻につぶやくように設定してみる
ここまででslack通知は実装できたのですが、今のままだと誰かがSQSオジサンになって、手動でメッセージの送信をしなくてはなりません。
このSQSオジサンの存在を消すが休暇をとっても、自動的にslack通知できるようにしてみます。
新しくLambdaを作成し、下記のようにトリガーにを設定します。
ルールのスケジュール式などはこちらを参照下さい。
今回は日本標準時刻の11時に通知するようにしたいので、スケジュール式をcron(0 2 * * ? *)
と設定しました。
協定世界時と日本の時差は下記をご参照下さい。
上記設定で、毎日11時にslack通知されるようになります!
感想
思っていた以上に手軽に使えるサービスという印象でした。PythonでコーディングできるのでいろんなAPIと絡めた機能を実装できそうです。(どこかのAPIから取得したデータを毎日定刻にslack通知する、といったようなこともできそうです)
以上。