Discordに流すWebhookを見れる形で流してみる(Chalice + AWS Lambda + Python)
by
yumechi(Motoki Hirao)
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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 みたいに入れる ○ 構造がかなりわかりづらいので慣れないと難しい