aws, django, Docker, python, 仮想環境

Docker上で動くDjangoアプリをAWS EBにデプロイする

準備

Dockerfileの作成

ここはアプリ開発時点でやっていること。

Djangoアプリを動かす時、開発時は

python manage.py runserver 8000

などで良いが、これはあくまで開発用サーバーなので、セキュリティ面や可用性の面からも本番環境では使用すべきでない。
本番環境で動かす時は、uWSGIを利用するのがpythonには合っているらしい(?)。以下のサイトなどが参考になる。
Full production Django Docker configuration
DjangoアプリをDockerで運用する

ちなみに、EBでDockerを動かす時は、Dockerfileでポート番号をEXPOSEしておかないとエラーになる(docker-compose.ymlを使っている場合はそちらでポート指定できるため忘れがち)。

EB CLIのインストール

AWS Elastic BeanstalkのCLIツールをインストールする。2通り方法があるが、セットアップスクリプトを使う方が楽だと思う。

AWS CLIの認証情報を設定

まず、必要であればIAMユーザー作成:最初の IAM 管理者のユーザーおよびグループの作成

  • EBにしかアクセスしないなら、そのグループにだけ入れておけば良い。
  • その専用ユーザーであれば、AWSコンソールへのログインも不要。

で、認証情報設定:設定ファイルと認証情報ファイルの設定

複数のプロファイルを登録している場合は以下のように--profileオプションで、使いたいプロファイルを設定する。

$ eb コマンド --profile プロファイル名

EBアプリを作成してそこにデプロイする

Docker プラットフォームの使用に従ってやる。

ところが、、

上記の流れで、カスタムDockerコンテナ利用 & docker-composeでマルチコンテナ利用のアプリをAWS EBにデプロイできるはずだったんですが、いくつか思うように行かないことがありました。
ちなみにマルチコンテナアプリをAmazon Linux 2プラットフォームにデプロイできるようになったのは2020年10月はじめのことのようなのでかなり最近です。それまではマルチコンテナ Docker プラットフォーム (Amazon Linux AMI) の使用を利用しなければならず、こちらだとdocker-compose.ymlはそのまま使えなかったみたいです。

で、まだリリースされたばかりで不具合があるのか、単に私がちゃんと使い方や設定方法を理解していないだけなのか分かりませんが、2つうまくいかないことがあり、

1. docker-compose.ymlでマルチコンテナの場合、Dockerfileからのビルドはできない

Dockerの設定を読むと、『…Dockerfileを含むdocker-compose.yml…』と書かれているから対応していると思ったのですが、やってみたらデプロイが失敗してうまくいきませんでした。しかしエラーの直接の原因をちゃんと特定できなかったので、単に私のやり方に何か問題があった可能性もあります。

そこで、docker-compose.yml+Dockerfileではなく、カスタムイメージをあらかじめ作ってDocker hubに置き、docker-compose.ymlではそのイメージを指定するだけにしたら、デプロイが成功しました。

2. docker-compose.ymlを使う場合、eb local runは使えない

上記の方法で、eb create [env-name]またはeb deploy [env-name]でEBにデプロイすることはできるのですが、eb local runでローカル実行での動作確認をしようとすると、以下のエラーが出て動きませんでした。

ERROR: NotFoundError - The EB CLI cannot find Dockerfile or the Dockerrun.aws.json file in the application root directory.

このエラーを見ると、eb-cliがまだ最新の仕様に対応していないように見えます。Dockerプラットフォームの使用を見ると、docker-compose.yml(またはDockerrun.aws.json)を作成すれば動くと書かれています。私がこれを試した時のeb-cliのバージョンはEB CLI 3.19.2 (Python 3.7.2)です。ソースからのビルドではなく簡単にセットアップできるスクリプトでインストールしたため、最新のバージョンではなかったという可能性もあります。

補足:EBアプリ・環境の作成方法

上記の手順内で、EBアプリ・環境EB環境をEB CLIで作成している。EBコンソールから作成することもできる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です