Discord.py を用いて作成したBot を Azure にデプロイしてみた

Python

GitHub

Azure

経緯

Discord.py を用いて作成した Bot を今までは Heroku にデプロイして運用していたが、 ライブラリの仕様上 Webhook ではないので、無料枠での運用が難しかった。 課金してもいいのだが、せっかくなのでクラウドサービスの勉強がてら Azure にデプロイしてみることにした。

*クラウドサービス超初心者なので間違っていたら教えてください

前提条件

  • Discord.py を用いた Bot が完成している
  • 上記プロダクトが入ったGitリポジトリがある
  • Azure Portal を使用
  • Azure のサブスクリプションを既に作成している
  • GitHub Actions を使用してデプロイ

さぁ、いこう!

1. App Service を作成

  1. Azure Portal にログインし、検索バーで "App Service" と検索。
  2. 「+作成」 をクリック。
  3. それぞれの項目を入力・選択していく。 ・サブスクリプション:作成したものを選択 ・リソースグループ:新規作成。名前はユニークに。 ・名前:App名を入力。こちらもユニークに。 ・ランタイムスタック:Botを買いている言語・バージョンを選択。 ・地域:特に理由がなければ住んでる地域の一番近いところを選択。
  4. 「確認および作成」をクリック。
  5. 問題なければ「作成」をクリック。
  6. デプロイ完了すれば成功!

自分はこんな感じ↓にしてみました。 スクリーンショット 20211107 13.06.52.png

2. GitHub Actions を用いて App をデプロイ

  1. 先ほど作成した App Service ページに移動。
  2. 左メニューの「デプロイメント」の場所にある「デプロイセンター」をクリック。
  3. 「ソース」右のプルダウンから 「GitHub」を選択。
  4. 初めて利用する場合は GitHub と Azure を連携。
  5. 承認後それぞれの項目を選択。 ・組織:個人の場合は自分のユーザー名を選択。 ・リポジトリ:該当リポジトリを選択。 ・ブランチ:該当ブランチを選択。 ・ワークフローオプション:ワークフローの追加を選択。(自分でワークフローファイルを作ってる人は下を選択)
  6. 「保存」をクリック。
  7. GitHubの該当リポジトリに移動し、Actions タブをクリック。ビルドとデプロイが完了していれば成功です!

こんな感じ↓ (テスト用のリポジトリ使っています) スクリーンショット 20211107 14.43.09.png

3. Python の実行

ここがわからなくて5時間程悩みました。

  1. Azure Portal の作成した App Service に戻る。
  2. 左メニューの「設定」の場所にある「構成」をクリック。
  3. 上タブメニューの「全般設定」をクリック。
  4. 「スタートアップ コマンド」 に 実行するコマンドを入力。 例) python discordbot.py
  5. 「Web ソケット」をオンに。
  6. 「常時接続」をオンに。(できない人は次の章を参照)
  7. 「保存」をクリック
  8. これで Discord Bot が動いてくれるようになったはず!

*ここは結構無理やり感あるのでもっと綺麗な方法があると思います。

こんな感じ↓ (常時接続はオンにしてください。) スクリーンショット 20211107 15.03.19.png

常時接続できなかった人へ

できなかった人は恐らく一般アカウント(学生アカウントではない)人だと思います。 常時接続するためには App Service のプランをスケールアップしなければなりません。(課金)

  1. App Service 左メニューの「設定」の場所にある「スケールアップ(App Service のプラン)」を選択。
  2. ここから運営方法にあったプランを選び直す。 自分はとりあえず B1(Basic) プランを選びました。
  3. 「適用」をクリックすれば完了!これで Bot が動いてくれるようになったはず!

展望

  1. env ファイルや JSON ファイルの扱いを避けてコードを煩雑にしてしまっているので、次はコードを綺麗にした上で Azure 上での env ファイルの読み込みにチャレンジしてみる。
  2. webhook ではない Bot の運用はどうしてもお金がかかってしまうことがわかったので、次は今の Bot を webhook 仕様で作り直そうと思う。

やってみた所感

やはり簡単さで言えば Heroku だなと思う反面、 Azure では色々な事ができ「慣れたら強い」という言葉の真の意味を理解した気がする。 また、Microsoft ドキュメント が豊富なため、有益な情報が手に入りやすいのは魅力に感じた。

とはいえ、今回の自分のような環境での運用のドキュメントは無かったため、もし同じ状況になる人の参考になればと思う。

どりー_ハックツ

@Friedrich_buryu

目次