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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kyusu Kegani
May 23, 2019
Programming
0
82
DiscordBotの作成(基盤編)
社内勉強会用
Kyusu Kegani
May 23, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
AI時代の認知負荷との向き合い方
optfit
0
160
CSC307 Lecture 09
javiergs
PRO
1
840
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
440
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.6k
React Native × React Router v7 API通信の共通化で考えるべきこと
suguruooki
0
100
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
250
CSC307 Lecture 03
javiergs
PRO
1
490
CSC307 Lecture 08
javiergs
PRO
0
670
Featured
See All Featured
KATA
mclloyd
PRO
34
15k
Balancing Empowerment & Direction
lara
5
900
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
740
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Fireside Chat
paigeccino
41
3.8k
Abbi's Birthday
coloredviolet
1
4.8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Utilizing Notion as your number one productivity tool
mfonobong
3
220
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Designing Experiences People Love
moore
144
24k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
170
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のライフイベント
補足:クラウドの課金額
補足:クラウドの課金額
補足:クラウドの課金額 全て無料試用範囲内!!! デレマスの課金額の (不定)倍