$30 off During Our Annual Pro Sale. View Details »

Discordに流すWebhookを見れる形で流してみる(Chalice + AWS Lambda + Python)

yumechi
November 20, 2021

Discordに流すWebhookを見れる形で流してみる(Chalice + AWS Lambda + Python)

PyCon mini Shizuoka (2021/11/20) にLTで発表した内容になります。
This is a lightning talk I gave at PyCon mini Shizuoka on November 20, 2021.

yumechi

November 20, 2021
Tweet

More Decks by yumechi

Other Decks in Technology

Transcript

  1. Discordに流すWebhookを見れる 形で流してみる(Chalice + AWS Lambda + Python) Motoki Hirao

  2. 自己紹介 • PyCon JPのスタッフをしていたこともあるPHPer(6月まで前職でPython 書いてました) • PyCon mini Shizuokaのスタッフとして最後の最後でジョインして少しだ けお手伝いしました

    • 業務としてPythonを書くことはなくなりましたが、手になじむので軽いも のを作るときはたまに使っています • twitter: @__yumechi, Github: yumechi
  3. 私と静岡 6年ほど浜松におりました さわやかのハンバーグと ラーメン三太(細麺の方) によく行ってました

  4. 今回の目的 • Discord に backlog, Kibela の更新情報を流したい…! • 前提 ◦

    プライベートプロジェクトで作業している ◦ チケット管理Backlog, 議事録やアイディアをKibela ◦ コミュニケーションは Discord
  5. 今回の問題点 単純に下記のアーキテクチャでは動かないこと…!

  6. 今回の問題点 単純に下記のアーキテクチャでは動かないこと…! Discordに投げられる 形式ではないので、 うまく連動できない

  7. ※Slackの場合

  8. 困ったがこの構成にする

  9. ここで AWS Lambda と API Gateway を使って 簡単にAPIを立てるには…?

  10. そう、Chaliceを使う https://github.com/aws/chalice

  11. Chaliceとはなに? • Lambda と API Gateway をささっと作れる serverless framework •

    Pythonで書くことができる • 今回は使わないが、S3イベントやSNS、SQS向けにも使うことができる • ローカルでデバッグできる!!!!!!!! ◦ 動くだけのものをここに置いてみた ◦ https://github.com/yumechi/hello-world-chalice
  12. 最小構成

  13. これをちょっと作りこんで 各サイトのWebHookとして 設定すればOK ※ただしテスト送信には要注意

  14. 大きなプログラムにしたとき • 分けたいという欲求が生まれる ◦ 今回ならWebHookとして送られてくるサービスごとに分けて作りたい ◦ 受信してパースする部分は別の作りにしたい ◦ const に分けたい

    • しかし…
  15. ハマりポイント: 特定のディレクトリ配下に 入れないといけない

  16. 引用:https://aws.github.io/chalice/topics/multifile.html

  17. なのでこういう構成になる 引用: https://github.com/yumechi/make-something-webhook

  18. なんやかんやあって完成する • ステージ環境と本番環境を分ける作りにして、環境変数を kamidana で 入れるようにしている ◦ jinja を cli

    で使えるツール https://github.com/podhmo/kamidana ◦ 本当はもっと方法ありそうな気もする … • 表示のイメージはSlackに流れているものを見つつ、Discord Webhook の使い方ページを見ながら合わせる ◦ Slackの連動のほうが簡単なので、完成イメージがつく ◦ https://birdie0.github.io/discord-webhooks-guide/
  19. まとめ • Chalice便利です ◦ こういう小技みたいなWebHookをプロキシするものとか作るのにはちょうどよさそう • Pythonのライブラリや通信も使えるのが大きい ◦ 今回はお馴染みの requests

    を使った ◦ データの置き場とか工夫すれば、定期的に実行した結果を保存しておいたものを可視 化して分析、みたいなこともできそう ◦ そしてその手のツールが揃っている Python の得意分野なのでは?
  20. ここから先は 補足資料です

  21. Tips: テスト送信のデバッグ • Backlogもkibelaもテスト送信をクリアして初めてWebhook連動できる • ただしテスト送信でどういう構造のデータで、どういう値のデータが来る のかわからない ◦ (ドキュメントを漁ったけど、結局自分は発見できなかった) •

    解決方法としてログ出力して中身を合わせる ◦ ログ出力は単純にprintを使うだけでOK ◦ あとは CloudWatch を見に行く
  22. Tips: 送信デザインを合わせる • Slackに連動しているものがあるので今回はそれに合わせてみた ↑Slack ↓Discord

  23. Tips: DiscordのWebhookを使った投稿 • 困ったら紹介しているリンクを見てください ◦ https://birdie0.github.io/discord-webhooks-guide/ ◦ これがマジで便利 • 中身のコンテンツは大体

    embeds に入れる形 ◦ 下の方に出ているもろもろは base["embeds"][0]["fields"] = fields みたいに入れる ◦ 構造がかなりわかりづらいので慣れないと難しい