はじめに
前回、Elastic Beanstalkをコンテナから作ることを、コンソールから行いました。
今回はEC CLIから行ってみました。
概要
- 以下の2つの手法がある。
- ECRにコンテナをPUSHし、URIを記載した設定ファイル
Dockerrun.aws.json
を、Elastic Beanstalkに渡して実行 - Dockerファイルやソースファイルを直接使用
- ECRにコンテナをPUSHし、URIを記載した設定ファイル
- 今回は公式のサンプルと、いつも作ってるplumberのコンテナの2つをデプロイする。
- サンプルは、Dockerファイルやソースファイルを直接使用
- plumberのコンテナは、Elastic Beanstalkのデプロイ中にビルドするとタイムアウトになるため、ECRにPUSHする方法を使用
やってみた
環境はCloud9(t3.small)でやっています。
$ python -V
Python 3.7.16
Pythonのバージョンは以下には3.11とありますが、eb local run
以外は動きましたので、3.7で続けていきます。
Pythonを3.11に上げるとEB CLIがインストールできませんでした。Cloud9の問題かもしれませんので、実行される方は確認ください。
IAMロール、インスタンスプロファイル
Elastic BeanstalkのIAMロールを用意しておきます。
自動で作られているかもしれませんが、なければ上記のページを参考に作成します。
- 信頼関係
- elasticbeanstalk.amazonaws.com
- ポリシー
- AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
- AWSElasticBeanstalkEnhancedHealth
- 名前
- aws-elasticbeanstalk-service-role
EC2のインスタンスプロファイルは、前回と同様に作成します。
EB CLIのインストール
以下のページにインストールの方法があります。
pip install --upgrade pip
pip install awsebcli --upgrade --user
eb --version
サンプルを実行
まず、以下のページのサンプルを実行してみます。
フォルダとファイルを作ります。ファイルの中身は上記ページにあるコードをコピーします。
mkdir eb-docker-flask && cd eb-docker-flask
touch Dockerfile
touch application.py
eb init
でアプリケーションを作成します。この時点でリージョンを指定します。リージョンを指定しないと私の場合はus-west-2に作られました。
eb init -p docker sample-app --region ap-northeast-1
ローカル実行したかったのですが、以下は動きませんでした。
# これはうごかない
eb local run --port 5000
環境を構築します。ここで、最初に作成したIAMロールとインスタンスプロファイルを指定します。
- ARNではなく、名前を指定します。
- pathがある場合は、pathから指定します。
eb create sample-env --service-role service-role/aws-elasticbeanstalk-service-role --instance_profile aws-elasticbeanstalk-ec2-role
5分くらいでデプロイされます。
片付け
以下のコマンドを実行し、環境名を指定することで、環境が削除されます。
eb terminate
アプリケーションはコンソールから削除しました。
ECRのコンテナを実行
いつも使っている以下のplumberのコンテナを動かします。
前回、zipで固めたファイル群から構築しようとした際ビルドでタイムアウトになる、と書きました。
これはEB CLIでも同じで、タイムアウトで作成できませんでした。タイムアウトの値を指定する方法もないようでしたので、ECRにPUSHして、それをEB CLIから使ってみます。
前回と同じようにECRにPUSHします。
次はイメージを作ったフォルダとは別の場所を作って作業します。
cd ..
mkdir test-plumber-app && cd test-plumber-app
touch Dockerrun.aws.json
Dockerrun.aws.json
も、前回と同様に作ります。
設定ファイル作成
あとはサンプル作成時と同様に、アプリケーションと環境を作っていきます。
eb init -p docker test-plumber-app --region ap-northeast-1
eb create test-plumber-env --service-role service-role/aws-elasticbeanstalk-service-role --instance_profile aws-elasticbeanstalk-ec2-role
ヘルスチェックには失敗していますが、環境は作成されています。
接続
ヘルスチェックパスを指定
ヘルスチェックをOKにするために、以下のページを参考に、ヘルスチェックパスを指定してみます。
mkdir .ebextensions
touch .ebextensions/alb.config
option_settings:
aws:elasticbeanstalk:environment:process:default: # ヘルスチェック設定
HealthCheckPath: /hello # ヘルスチェックするパス
反映するのは以下のコマンドです。
eb deploy
片付け
サンプルの時と同様、以下のコマンドで削除します。
eb terminate
おわりに
前回コンソールから行ったことを、EB CLIから行いました。
ビルドのタイムアウト値を伸ばせるかと期待していたのですが、見つけられませんでした。
どなたかご存じの方いらっしゃいましたら、教えていただけると助かります。