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