はじめに
AWS Copilotを使用してDjangoアプリをAWS Fargate上に爆速デプロイする手順を紹介します。
最終結果
下準備完了後以下のコマンド一つ(と数回の対話形式の質問)でデプロイが完了し、Djangoアプリへブラウザからアクセスできます。
copilot init
Fargate?Copilot?
AWS Fargateとは…と調べると小難しい記事が沢山出てきますが、要はコンテナイメージを用意してAWSにコンテナを実行・運用してもらうサービスです。
コンテナを実行するサーバーの管理はAWSが行うので、OSのアップデート等めんどくさいサーバー管理は必要ありません。
しかし、従来Fargateを使用するには予め数多くのリソースを作成する必要がありました(ネットワーク、ロードバランサー、コンテナイメージのリポジトリ…)。
Copilotはそれらのめんどくさい作業をコマンド一つで引き受けてくれます。
つまり、この二つを使うとめんどくさい作業が無くなります。
※ほんとはもっと奥深いサービスなんですが、この記事を読む分にはこれくらいの理解で十分です
下準備
AWS CLIインストール
OSによってインストール方法が変わります。
手順の解説記事は検索で簡単に見つかるので割愛します。
公式ドキュメントはこちら。
以下コマンドで正しいプロフィール情報が確認できればOKです。
aws configure list
Dockerインストール
こちらも同様にインストール手順は割愛します。
公式ドキュメントはこちら。
以下コマンドでバージョン情報が確認できればOKです。
docker --version
AWS Copilotインストール
OSごとのインストールコマンドが公式ドキュメントに載っています。
筆者はWindowsユーザーですが追加で一手順必要だったので内容を記載しておきます。
Windowsインストール方法
※PowerShellは管理者として実行してくださいInvoke-WebRequest -OutFile 'C:\Program Files\copilot.exe' https://github.com/aws/copilot-cli/releases/latest/download/copilot-windows.exe
C:\Program Files
を追加copilot --version
サンプルソースをGitHubからダウンロード
CopilotのコマンドはGitローカルリポジトリのルートディレクトリから実行されることが前提となっています。
今回はGitHubにサンプルアプリを用意しましたのでお使いください。
git clone https://github.com/TakahiroHimi/django-copilot-test
cd django-copilot-test
実践!
※注意!
これから実行するコマンドはAWS上にリソースを作成しますが、中には有料のリソースも存在します。
最後に作成したリソースを一括削除するコマンドも紹介します。
作成して動作確認後すぐ削除すれば大した料金にはなりませんが、削除を忘れてしまい意図せず料金がかかることがないようお気を付けください。
- ターミナルから以下コマンドを実行
copilot init
以下対話形式で質問が続きます。
- デプロイするアプリケーションの名前を聞かれるので任意の名前(ここでは
copilot-test
)を入力 - サービスのタイプを聞かれるので
Load Balanced Web Service
を選択 - Webサービスの名前を聞かれるので任意の名前(ここでは
copilot-test
)を入力 - デプロイするコンテナのDockerfileを聞かれるので、カレントディレクトリの
./Dockerfile
を選択 しばらく待つと(10分程度かかります)作成されたロードバランサーのエンドポイントURLが表示されるのでアクセスし、Djangoサンプルページが確認できればOKです。
リソース削除
以下コマンドで作成したリソースの一括削除ができます。
※最後のアプリケーション名(copilot-test
)はご自身で入力されたものに変更してください。
copilot app delete copilot-test
ハマりどころ
copilotはリソース作成先のavailability zoneにAWS CLIデフォルトで設定されているリージョンのaを選択します(aws configure
で設定しているリージョンが東京(ap-north-east-1
)ならap-northeast-1a)。
この時aが使用不可であると自動的にbを選択するわけではなく、デプロイがエラー終了するので注意してください。
この手のエラーログはCloudFormationのダッシュボードから確認可能です。
あとがき
本番環境にデプロイする際には今回紹介した手順に加えてシステムの冗長化や実行環境のリソース(CPU,メモリ等)、CI/CD等多くの設定が必要になるかと思います。
しかしプロトタイプや個人開発の簡易なアプリをデプロイする場合、現状コマンド一つでデプロイできるCopilotが最も簡単なデプロイ方法なのではないかと思います。
今年Djangoで社内システムを作成・AWS Fargateにデプロイするという仕事があり、システムの設計~デプロイまで一人で行い中々時間がかかりました。特に環境構築。
リリースは6月だったのですが、その1か月後AWS Copilotがリリースされ、私が時間をかけて行った環境構築の大部分がcopilot init
だけで終わる様を見て呆然としました。
この記事も本当は私が実務で作成した環境の構築手順を記録する予定だったのですが、copilotの解説の方が需要ありそうだったので急遽変更しました。悔しい。
以上です。お疲れ様でした