AWS Elastic Beanstalk
開発者ガイド

単一コンテナの Docker 環境

AWS Elastic Beanstalk は、Dockerfile で記述されているイメージを構築することによって、またはリモート Docker イメージをプルすることによって、単一コンテナ Docker 環境を起動できます。リモート Docker イメージをデプロイする場合、Dockerfile を含める必要はありません 。代わりに、使用するイメージと追加の設定オプションを指定する Dockerrun.aws.json ファイルを使用します。

前提条件

このチュートリアルでは、Elastic Beanstalk の基本的なオペレーション、Elastic Beanstalk コマンドラインインターフェイス(EB CLI)、および Docker についてある程度の知識があることを前提としています。このチュートリアルを実行するには、ローカルに Docker がインストールされている必要があります。Docker のインストールの詳細については、Docker インストールガイドを参照してください。

まだ起動していない場合は、Elastic Beanstalk の使用開始の指示に従って、最初の Elastic Beanstalk 環境を起動します。このチュートリアルでは EB CLI を使用しますが、Elastic Beanstalk コンソール を使用して環境を作成し、アプリケーションをアップロードすることもできます。単一コンテナ Docker 環境の設定の詳細については、単一コンテナの Docker の設定を参照してください。

Elastic Beanstalk アプリケーションをコンテナ化する

この例では、Elastic Beanstalk への Flask アプリケーションのデプロイ からサンプルの Flask アプリケーションの Docker イメージを作成します。アプリケーションは、1 つのメインファイル application.py で構成されます。Dockerfile も必要です。両方のファイルをディレクトリのルートに配置します。

~/eb-docker-flask/ |-- Dockerfile |-- application.py

~/eb-docker-flask/application.py

from flask import Flask # Print a nice greeting def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # Some bits of text for the page header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # Elastic Beanstalk looks for an 'application' that is callable by default application = Flask(__name__) # Add a rule for the index page application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # Add a rule when the page is accessed with a name appended to the site # URL application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # Run the application if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production application. application.debug = True application.run(host="0.0.0.0")

~/eb-docker-flask/Dockerfile

FROM python:3.6 COPY . /app WORKDIR /app RUN pip install Flask==1.0.2 EXPOSE 5000 CMD ["python", "application.py"]

コンテナをローカルでテストする

Elastic Beanstalk CLI (EB CLI) を使用して、Elastic Beanstalk にデプロイするローカルリポジトリを設定し ます。ディレクトリのルートにあるアプリケーションの Dockerfile を設定します。

~/eb-docker-flask$ eb init -p docker application-name

(オプション) eb local run を使用して、コンテナを構築し、ローカルで実行します。eb local コマンドの詳細については、eb localを参照してください。eb local コマンドは Windows はサポートされません。または、docker build コマンドと docker run コマンドを使用してコンテナを構築して実行することもできます。詳細については、Docker ドキュメントを参照してください。

~/eb-docker-flask$ eb local run --port 5000

(オプション) コンテナが実行しているときに、eb local open コマンドを使用して、ウェブブラウザでアプリケーションを表示します。または、ウェブブラウザで http://localhost:5000/ を開きます。

~/eb-docker-flask$ eb local open

Dockerfile を使用してコンテナをデプロイする

アプリケーションをローカルでテストした後、Elastic Beanstalk 環境にデプロイします。Elastic Beanstalk は、Dockerfile 内の命令に従ってイメージを構築して実行します。

EB CLI を使用して、環境を作成し、アプリケーションをデプロイします。

~/eb-docker-flask$ eb create environment-name

環境が起動したら、eb open を使用してウェブブラウザで表示します。

~/eb-docker-flask$ eb open

リモート Docker イメージをテストする

次に、前のセクションから Flask アプリケーションの Docker イメージを構築し、Docker Hub にプッシュします。

注記

以下のステップでは、一般利用可能な Docker イメージを作成します。

イメージを構築してプッシュしたら、Dockerrun.aws.json ファイルで Elastic Beanstalk にデプロイできます。Flask アプリケーションの Docker イメージを構築して、Docker Hub にプッシュするには、次のコマンドを実行します。前の例と同じディレクトリを使用しますが、アプリケーションのコードを使用して任意のディレクトリを使用できます。

~/eb-docker-flask$ docker build -t docker-username/beanstalk-flask:latest . ~/eb-docker-flask$ docker push docker-username/beanstalk-flask:latest

注記

イメージをプッシュする前に、docker login を実行しなければならないことがあります。

これで、Dockerrun.aws.json ファイルのみを使用してアプリケーションをデプロイできます。Dockerrun.aws.json ファイルの詳細については、単一コンテナの Docker の設定を参照してください。

新しいディレクトリを作成し、Dockerrun.aws.json ファイルを作成します。

~/remote-docker/Dockerrun.aws.json

{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "username/beanstalk-flask", "Update": "true" }, "Ports": [ { "ContainerPort": "5000" } ] }

EB CLI を使用して、Elastic Beanstalk にデプロイするローカルリポジトリを設定し ます。

~/remote-docker$ eb init -p docker application-name

(オプション) eb local run を使用して、コンテナを構築し、ローカルで実行します。eb local コマンドの詳細については、eb localを参照してください。

~/remote-docker$ eb local run --port 5000

(オプション) コンテナが実行しているときに、eb local open コマンドを使用して、ウェブブラウザでアプリケーションを表示します。または、ウェブブラウザで http://localhost:5000/ を開きます。

~/remote-docker$ eb local open

リモート Docker イメージを Elastic Beanstalk にデプロイする

コンテナをローカルでテストした後、Elastic Beanstalk 環境にデプロイします。Elastic Beanstalk は、Dockerrun.aws.json ファイルを使用して、イメージをプルし、実行します。

EB CLI を使用して、環境を作成し、イメージをデプロイします。

~/remote-docker$ eb create environment-name

環境が起動したら、eb open を使用してウェブブラウザで表示します。

~/remote-docker$ eb open

クリーンアップ

Elastic Beanstalk の操作を終了したら、 環境を終了できます。Elastic Beanstalk は、Amazon EC2 インスタンスデータベースインスタンスロードバランサー、セキュリティグループ、アラームなど、お客様の環境に関連付けられているすべての AWS リソースを終了します。

Elastic Beanstalk 環境を終了するには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [アクション] を選択してから、[環境の終了] を選択します。

  4. 画面上のダイアログボックスを使用して、環境の終了を確認します。

Elastic Beanstalk を使用すると、いつでもアプリケーション用の新しい環境を簡単に作成できます。

EB CLI の場合:

~/remote-docker$ eb terminate environment-name