1
0

EB CLIを使って、Elastic Beanstalkでコンテナを動かす

Posted at

はじめに

前回、Elastic Beanstalkをコンテナから作ることを、コンソールから行いました。

今回はEC CLIから行ってみました。

概要

  • 以下の2つの手法がある。
    • ECRにコンテナをPUSHし、URIを記載した設定ファイルDockerrun.aws.jsonを、Elastic Beanstalkに渡して実行
    • Dockerファイルやソースファイルを直接使用
  • 今回は公式のサンプルと、いつも作ってる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分くらいでデプロイされます。

URLに/Theloniousを付与してアクセスします。
image.png

片付け

以下のコマンドを実行し、環境名を指定することで、環境が削除されます。

eb terminate

アプリケーションはコンソールから削除しました。

image.png

ECRのコンテナを実行

いつも使っている以下のplumberのコンテナを動かします。

前回、zipで固めたファイル群から構築しようとした際ビルドでタイムアウトになる、と書きました。
これはEB CLIでも同じで、タイムアウトで作成できませんでした。タイムアウトの値を指定する方法もないようでしたので、ECRにPUSHして、それをEB CLIから使ってみます。

前回と同じようにECRにPUSHします。

コンテナをBuildして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

ヘルスチェックには失敗していますが、環境は作成されています。
image.png

接続

image.png

ドメインのURLに/helloを追加して確認します。
image.png

その他、/hello/jiro/21の場合。
image.png

/fn?x=2の場合。
image.png

/plotの場合。
image.png

ヘルスチェックパスを指定

ヘルスチェックをOKにするために、以下のページを参考に、ヘルスチェックパスを指定してみます。

mkdir .ebextensions
touch .ebextensions/alb.config
.ebextensions/alb.config
option_settings:
  aws:elasticbeanstalk:environment:process:default: # ヘルスチェック設定
    HealthCheckPath: /hello # ヘルスチェックするパス

反映するのは以下のコマンドです。

eb deploy

正常にデプロイされると、OKになりました。
image.png

片付け

サンプルの時と同様、以下のコマンドで削除します。

eb terminate

おわりに

前回コンソールから行ったことを、EB CLIから行いました。
ビルドのタイムアウト値を伸ばせるかと期待していたのですが、見つけられませんでした。
どなたかご存じの方いらっしゃいましたら、教えていただけると助かります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0