【Copilot】Djangoアプリをコマンド一つでデプロイする【Fargate】


はじめに

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から公式ページに記載されているインストールコマンドを実行
    ※PowerShellは管理者として実行してください
Invoke-WebRequest -OutFile 'C:\Program Files\copilot.exe' https://github.com/aws/copilot-cli/releases/latest/download/copilot-windows.exe
  • 環境変数のPathにC:\Program Filesを追加
  • ターミナルから以下コマンドでバージョン情報が確認できればOK
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を選択
  • リソースの作成が始まります。しばらくするとテスト環境にアップして良いか聞かれるので、yでアップします。

  • しばらく待つと(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の解説の方が需要ありそうだったので急遽変更しました。悔しい。

以上です。お疲れ様でした