Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DiscordBotの作成(基盤編)
Search
Kyusu Kegani
May 23, 2019
Programming
0
71
DiscordBotの作成(基盤編)
社内勉強会用
Kyusu Kegani
May 23, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
Vibe coding コードレビュー
kinopeee
0
420
STUNMESH-go: Wireguard NAT穿隧工具的源起與介紹
tjjh89017
0
250
Nuances on Kubernetes - RubyConf Taiwan 2025
envek
0
110
Claude Code と OpenAI o3 で メタデータ情報を作る
laket
0
110
自作OSでDOOMを動かしてみた
zakki0925224
1
1.2k
物語を動かす行動"量" #エンジニアニメ
konifar
12
3.5k
バイブコーディング超えてバイブデプロイ〜CloudflareMCPで実現する、未来のアプリケーションデリバリー〜
azukiazusa1
3
800
バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス
uzulla
1
330
Bedrock AgentCore ObservabilityによるAIエージェントの運用
licux
8
570
iOS開発スターターキットの作り方
akidon0000
0
240
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
teamlab
PRO
0
450
ワープロって実は計算機で
pepepper
2
1.2k
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
Into the Great Unknown - MozCon
thekraken
40
2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
The Cult of Friendly URLs
andyhume
79
6.5k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
Transcript
Discord Botの作成(基盤編) 2019-5-23
Discordとは? ゲーマー向けチャットサービスです。 チャット、通話などが簡単にできます。 使い勝手の良さからゲーム用途以外にも よく使われています。 • インフラ勉強会 • Python.jp
Bot作成のモチベーション(1/2) • 大学時代の友人とDiscordを使ってSplatoon2などのオンラインゲームをやっていた。 • Splatoon2は2時間ごとにルールとステージが変わるので、 どんなルールで遊ぶのかは 結構重要。 • 知るにはゲームを起動する or
Twitterの非公式Botを見に行く必要があり、みんなに共有が難しい ◦ 「遊ぼうぜー」→誰かがステージ見に行く→「〇〇だったよー」という感じ
Bot作成のモチベーション(2/2) • 「DiscordにBot置いたら遊ぶのを誘う時にステージも見れるし便利じゃない? • Bot爆誕(キャラクターはSplatoon2より拝借)
Botの機能 • /(特定の単語)でSplatoon2の情報を知らせてくれる
今回はBotの基盤周りの話をします
目次 • Python3 on AWS EC2 • GitHub + AWS
CodeDeploy + AWS CodePipelineで自動デプロイを実現 • GitHub + TravisCIで自動テストを実現 • Pytestでテスト駆動開発
Python3 on AWS EC2
Python3 on AWS EC2 DiscordのBotはPythonで開発可能です。 DiscordのAPIをラップしたライブラリがあります 1. Discord上でBotアカウントを作って 2. Tokenを取得して
3. ライブラリに渡して 4. 起動したら完成! ◦ 詳しくはここを参考にしてください
Python3 on AWS EC2 Bot自体は簡単に作れるのですが、永続化するためのサーバが必要です。 サーバレスとかも考えたのですが、勉強のために AWS EC2を使うことにしました。 単純に最小規模のインスタンスを 1つ立てて、
そこでPythonを実行させています。
GitHub + AWS CodeDeploy + AWS CodePipeline で自動デプロイ
デモ
簡単な説明 1. masterブランチへの マージ 2. CodePipelineの起動 3. CodeDeployの起動 4. EC2へのデプロイ
CodePipelineについて AWSのサービスの1つ Code三兄弟(CodeBuild+CodeCommit+CodeDeploy)やGitHub、AWS S3(クラウドストレージ)などを 組み合わせてCIのパイプラインを作成することができる 今回はGitHubのマージをトリガーとして、 ソースコードのAWS S3へのコピー CodeDeployでEC2へのデプロイを行った。
CodePipelineの設定 Sourceステージ(上) • GitHub→AWS S3へのコピー Deployステージ(下) • CodeDeployでEC2へのデプロイ
各ステージの実行内容
Sourceステージ GitHubへのPushを検知してパイプラインに流し込み (流し込み先は自動的に S3?)
Deployステージ Deploy先のインスタンスを指定 EC2以外にも、AutoScaling、 オンプレも可能
CodeDeploy Amazon EC2 Deploy先にするEC2にはタグ付けしておく
Deployで何をしたいか? 1. 今動いているPythonのプロセスをKillする 2. ソースコードを配置する 3. `python main.py &`みたいな感じでPythonの実行する 実現できたらダウンタイムほぼ無し!
どうやって実現するか
None
ルートに置いたappspec.yml! このファイルを読み込んで CodeDeployは色々とDeployしてくれる • ソースファイルの置き場所 • パーミッション • 実行すること などなど様々なことを指定できる
中身 リポジトリ全体を指 定の場所に
中身 BeforeInstall.shを ファイルのコピー前に
中身 ApplicationStart.shを ファイルのコピー後に
中身 BeforeInstall.sh 不要なファイルの削除や設定ファイルのコピー
中身 ApplicationStart.sh すでに走っているプロセスの Killや新規プログラムの実行
まとめ • DiscordBotはPythonで記述可能 • EC2にPythonを動かす用のサーバを用意 • GitHub→S3→EC2へのDeployをAWS CodeDeploy + AWS
CodePipelineで実現 ダウンタイム無しでBotのDeployを実現!
おまけ ?
おまけ バグがあります • Killコマンドでプロセスを殺せていない
おまけ バグがあります • 修正めんどくさい(マージリクエストを送らないといけない )ので運用でカバーしてます ◦ デプロイ後に潜って手動で Kill ◦ 個人利用ならこれで十分
次回はBotの実装の話をします
補足 hooksのライフイベント
補足:クラウドの課金額
補足:クラウドの課金額
補足:クラウドの課金額 全て無料試用範囲内!!! デレマスの課金額の (不定)倍