準備
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コンソールから作成することもできる。
- EBコンソールで作成する方法:Elastic Beanstalk の開始方法
- EB CLIで作成する方法:Elastic Beanstalk コマンドラインインターフェイス (EB CLI) の使用