Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DiscordBotの作成(基盤編)
Search
Kyusu Kegani
May 23, 2019
Programming
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DiscordBotの作成(基盤編)
社内勉強会用
Kyusu Kegani
May 23, 2019
Other Decks in Programming
See All in Programming
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
960
ActionController meets Protocol Buffers
sorah
0
550
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
200
golang-bob.pdf
iwatsukayura
0
130
ジョジョの世界をXRで再現する
mofurune
0
170
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.1k
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
250
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
sbt 2.0: takeoff
eed3si9n
0
160
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
570
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The browser strikes back
jonoalderson
0
1.8k
Facilitating Awesome Meetings
lara
57
7.2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Producing Creativity
orderedlist
PRO
348
41k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
The Curse of the Amulet
leimatthew05
3
16k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
460
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Navigating Weather and Climate Data
rabernat
0
560
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のライフイベント
補足:クラウドの課金額
補足:クラウドの課金額
補足:クラウドの課金額 全て無料試用範囲内!!! デレマスの課金額の (不定)倍