PyCon mini Shizuoka (2021/11/20) にLTで発表した内容になります。 This is a lightning talk I gave at PyCon mini Shizuoka on November 20, 2021.
Discordに流すWebhookを見れる形で流してみる(Chalice + AWSLambda + Python)Motoki Hirao
View Slide
自己紹介● PyCon JPのスタッフをしていたこともあるPHPer(6月まで前職でPython書いてました)● PyCon mini Shizuokaのスタッフとして最後の最後でジョインして少しだけお手伝いしました● 業務としてPythonを書くことはなくなりましたが、手になじむので軽いものを作るときはたまに使っています● twitter: @__yumechi, Github: yumechi
私と静岡6年ほど浜松におりましたさわやかのハンバーグとラーメン三太(細麺の方)によく行ってました
今回の目的● Discord に backlog, Kibela の更新情報を流したい…!● 前提○ プライベートプロジェクトで作業している○ チケット管理Backlog, 議事録やアイディアをKibela○ コミュニケーションは Discord
今回の問題点単純に下記のアーキテクチャでは動かないこと…!
今回の問題点単純に下記のアーキテクチャでは動かないこと…!Discordに投げられる形式ではないので、うまく連動できない
※Slackの場合
困ったがこの構成にする
ここで AWS Lambda と APIGateway を使って簡単にAPIを立てるには…?
そう、Chaliceを使うhttps://github.com/aws/chalice
Chaliceとはなに?● Lambda と API Gateway をささっと作れる serverless framework● Pythonで書くことができる● 今回は使わないが、S3イベントやSNS、SQS向けにも使うことができる● ローカルでデバッグできる!!!!!!!!○ 動くだけのものをここに置いてみた○ https://github.com/yumechi/hello-world-chalice
最小構成
これをちょっと作りこんで各サイトのWebHookとして設定すればOK※ただしテスト送信には要注意
大きなプログラムにしたとき● 分けたいという欲求が生まれる○ 今回ならWebHookとして送られてくるサービスごとに分けて作りたい○ 受信してパースする部分は別の作りにしたい○ const に分けたい● しかし…
ハマりポイント:特定のディレクトリ配下に入れないといけない
引用:https://aws.github.io/chalice/topics/multifile.html
なのでこういう構成になる引用: https://github.com/yumechi/make-something-webhook
なんやかんやあって完成する● ステージ環境と本番環境を分ける作りにして、環境変数を kamidana で入れるようにしている○ jinja を cli で使えるツール https://github.com/podhmo/kamidana○ 本当はもっと方法ありそうな気もする…● 表示のイメージはSlackに流れているものを見つつ、Discord Webhookの使い方ページを見ながら合わせる○ Slackの連動のほうが簡単なので、完成イメージがつく○ https://birdie0.github.io/discord-webhooks-guide/
まとめ● Chalice便利です○ こういう小技みたいなWebHookをプロキシするものとか作るのにはちょうどよさそう● Pythonのライブラリや通信も使えるのが大きい○ 今回はお馴染みの requests を使った○ データの置き場とか工夫すれば、定期的に実行した結果を保存しておいたものを可視化して分析、みたいなこともできそう○ そしてその手のツールが揃っている Python の得意分野なのでは?
ここから先は補足資料です
Tips: テスト送信のデバッグ● Backlogもkibelaもテスト送信をクリアして初めてWebhook連動できる● ただしテスト送信でどういう構造のデータで、どういう値のデータが来るのかわからない○ (ドキュメントを漁ったけど、結局自分は発見できなかった)● 解決方法としてログ出力して中身を合わせる○ ログ出力は単純にprintを使うだけでOK○ あとは CloudWatch を見に行く
Tips: 送信デザインを合わせる● Slackに連動しているものがあるので今回はそれに合わせてみた↑Slack↓Discord
Tips: DiscordのWebhookを使った投稿● 困ったら紹介しているリンクを見てください○ https://birdie0.github.io/discord-webhooks-guide/○ これがマジで便利● 中身のコンテンツは大体 embeds に入れる形○ 下の方に出ているもろもろは base["embeds"][0]["fields"] = fields みたいに入れる○ 構造がかなりわかりづらいので慣れないと難しい