翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
QuickStart: Docker Compose アプリケーションを Elastic Beanstalk にデプロイする
この QuickStart チュートリアルでは、複数コンテナの Docker Compose アプリケーションを作成し、 AWS Elastic Beanstalk 環境にデプロイするプロセスについて説明します。nginx リバースプロキシを使用して Flask ウェブアプリケーションを作成し、Docker Compose が複数のコンテナのオーケストレーションを簡素化する方法を示します。
注記
チュートリアルの例は、デモンストレーションを目的としています。本番トラフィックにアプリケーションを使用しないでください。
セクション
AWS アカウント
まだ AWS のお客様でない場合は、 AWS アカウントを作成する必要があります。サインアップすると、Elastic Beanstalk やその他の必要な AWS サービスにアクセスできます。
AWS アカウントを既にお持ちの場合は、「」に進むことができます前提条件。
にサインアップする AWS アカウント
がない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
オンラインの手順に従います。
サインアップ手順の一環として、電話またはテキストメッセージを受け取り、電話キーパッドで検証コードを入力します。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティベストプラクティスとして、ユーザーに管理アクセス権を割り当て、ルートユーザーアクセスが必要なタスクの実行にはルートユーザーのみを使用するようにしてください。
AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 を保護し AWS IAM Identity Center、 を有効にして管理ユーザーを作成します。
を保護する AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、IAM ユーザーガイドの AWS アカウント 「ルートユーザー (コンソール) の仮想 MFA デバイスを有効にする」を参照してください。
管理アクセスを持つユーザーを作成する
-
IAM アイデンティティセンターを有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、AWS IAM Identity Center 「 ユーザーガイド」の「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。
IAM Identity Center ユーザーを使用してサインインする方法については、AWS サインイン 「 ユーザーガイド」の AWS 「 アクセスポータルにサインインする」を参照してください。
前提条件
このガイドの手順に従うには、run commands のためのコマンドラインターミナルまたはシェルが必要になります。コマンドは、該当する場合、プロンプト記号 ($) と現在のディレクトリの名前が前に付けられて、リストに示されます。
~/eb-project$ this is a command
this is output
Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、Linux 用の Windows サブシステムをインストール
EB CLI
このチュートリアルでは、Elastic Beanstalk コマンドラインインターフェイス (EB CLI) を使用します。EB CLI をインストールおよび設定する手順の詳細については、「セットアップスクリプトを使用して EB CLI をインストールする (推奨)」および「EB CLI の設定」を参照してください。
Docker と Docker Compose
このチュートリアルに従うには、Docker と Docker Compose のローカルインストールが必要です。詳細については、Docker ドキュメントウェブサイトの「Get
次のコマンドを実行して、Docker と Docker Compose がインストールされ、実行されていることを確認します。
~$ docker info
~$ docker compose version
ステップ 1: Docker Compose アプリケーションを作成する
この例では、Flask ウェブアプリケーションと nginx リバースプロキシで構成される Docker Compose を使用してマルチコンテナアプリケーションを作成します。これは、Docker Compose が連携する複数のコンテナのオーケストレーションを簡素化する方法を示しています。
アプリケーションには、Elastic Beanstalk が nginx プロキシから詳細なアプリケーションメトリクスを収集できるようにするヘルスモニタリング設定が含まれています。
アプリケーションは次の構造で構成されます。
~/eb-docker-compose-flask/
|-- docker-compose.yml
|-- web/
| |-- Dockerfile
| |-- app.py
| `-- requirements.txt
|-- proxy/
| |-- Dockerfile
| `-- nginx.conf
`-- .platform/
`-- hooks/
`-- postdeploy/
`-- 01_setup_healthd_permissions.sh
ディレクトリ構造を作成し、次のファイルを追加します。
まず、サービスとその関係を定義するメインdocker-compose.yml
ファイルを作成します。
例 ~/eb-docker-compose-flask/docker-compose.yml
services: web: build: ./web expose: - "5000" nginx-proxy: build: ./proxy ports: - "80:80" volumes: - "/var/log/nginx:/var/log/nginx" depends_on: - web
web
ディレクトリに Flask ウェブアプリケーションを作成します。app.py
ファイルに次の内容を追加します。
例 ~/eb-docker-compose-flask/web/app.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello Elastic Beanstalk! This is a Docker Compose application'
ウェブサービス に次のコンテンツを追加しますDockerfile
。
例 ~/eb-docker-compose-flask/web/Dockerfile
FROM public.ecr.aws/docker/library/python:3.12 COPY . /app WORKDIR /app RUN pip install Flask==3.1.1 EXPOSE 5000 CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
proxy
ディレクトリに nginx リバースプロキシを作成します。nginx.conf
ファイルに次の内容を追加します。
この設定には、Elastic Beanstalk が詳細なアプリケーションメトリクスを収集できるようにするヘルスモニタリング設定が含まれています。ヘルスモニタリングログ形式のカスタマイズの詳細については、「」を参照してください拡張ヘルスログ形式。
例 ~/eb-docker-compose-flask/proxy/nginx.conf
events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; map $http_upgrade $connection_upgrade { default "upgrade"; } # Health monitoring log format for Elastic Beanstalk log_format healthd '$msec"$uri"$status"$request_time"$upstream_response_time"$http_x_forwarded_for'; upstream flask_app { server web:5000; } server { listen 80 default_server; root /usr/share/nginx/html; # Standard access log access_log /var/log/nginx/access.log; # Health monitoring log for Elastic Beanstalk if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; } access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; location / { proxy_pass http://flask_app; proxy_http_version 1.1; proxy_set_header Connection $connection_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
プロキシサービス に次のコンテンツを追加しますDockerfile
。
例 ~/eb-docker-compose-flask/proxy/Dockerfile
FROM public.ecr.aws/nginx/nginx:alpine COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80
最後に、プラットフォームフックスクリプトを作成して、ヘルスモニタリングに必要なログディレクトリとアクセス許可を設定します。プラットフォームフックを使用すると、デプロイプロセス中にカスタムスクリプトを実行できます。プラットフォームフックの詳細については、「」を参照してくださいプラットフォームフック。
例 ~/eb-docker-compose-flask/.platform/hooks/postdeploy/01_setup_healthd_permissions.sh
#!/bin/bash set -ex NGINX_CONTAINER=$(docker ps --filter "name=nginx-proxy" -q) if [ -z "$NGINX_CONTAINER" ]; then echo "Error: No nginx-proxy container found running" exit 1 fi NGINX_UID=$(docker exec ${NGINX_CONTAINER} id -u nginx) NGINX_GID=$(docker exec ${NGINX_CONTAINER} id -g nginx) mkdir -p /var/log/nginx/healthd chown -R ${NGINX_UID}:${NGINX_GID} /var/log/nginx
ステップ 2: アプリケーションをローカルに実行する
docker compose updocker-compose.yml
ファイルで定義されたサービスを開始します。
~/eb-docker-compose-flask$
docker compose up --build
--build オプションにより、Docker Compose はサービスを開始する前にコンテナイメージを構築できます。ウェブサービスと nginx-proxy サービスの両方が起動していることを示す出力が表示されます。
ブラウザhttp://localhost
で に移動します。次のテキストが表示されます。「Hello Elastic Beanstalk! これは Docker Compose アプリケーションです」。nginx プロキシは、ポート 80 でリクエストを受け取り、ポート 5000 で実行されている Flask アプリケーションに転送します。
テストが完了したら、Ctrl+Cターミナルで を押してアプリケーションを停止するか、別のターミナルで次のコマンドを実行します。
~/eb-docker-compose-flask$
docker compose down
ステップ 3: EB CLI を使用して Docker Compose アプリケーションをデプロイする
次のコマンドを実行して、このアプリケーションの Elastic Beanstalk 環境を作成します。
環境を作成し、Docker Compose アプリケーションをデプロイするには
-
eb init コマンドを使用して EB CLI リポジトリを初期化します。
~/eb-docker-compose-flask$
eb init -p docker docker-compose-tutorial --region
Application docker-compose-tutorial has been created.us-east-2
このコマンドは、
docker-compose-tutorial
という名前のアプリケーションを作成し、ローカルリポジトリを設定して最新の Docker プラットフォームバージョンで環境を作成します。 -
(オプション) eb init を再度実行してデフォルトのキーペアを設定し、アプリケーションを実行している EC2 インスタンスに SSH を使用して connect できるようにします。
~/eb-docker-compose-flask$
eb init
Do you want to set up SSH for your instances? (y/n):y
Select a keypair. 1) my-keypair 2) [ Create new KeyPair ]1 つのキーペアがすでにある場合はそれを選択するか、またはプロンプトに従ってキーペアを作成します。プロンプトが表示されないか設定を後で変更する必要がない場合は、eb init -i を実行します。
-
環境を作成し、eb create を使用してそこにアプリケーションをデプロイします。Elastic Beanstalk は
docker-compose.yml
ファイルを自動的に検出し、マルチコンテナアプリケーションをデプロイします。~/eb-docker-compose-flask$
eb create docker-compose-tutorial
Elastic Beanstalk が環境を作成し、マルチコンテナアプリケーションをデプロイするまでに約 5 分かかります。
ステップ 4: Elastic Beanstalk でアプリケーションをテストする
環境を作成するプロセスが完了したら、eb open でウェブサイトを開きます。
~/eb-docker-compose-flask$ eb open
素晴らしい!Elastic Beanstalk でマルチコンテナの Docker Compose アプリケーションをデプロイしました。これにより、アプリケーション用に作成されたドメイン名を使用してブラウザ Window が開きます。nginx リバースプロキシを介して提供される Flask アプリケーションからのメッセージが表示されます。
ステップ 5:クリーンアップ
アプリケーションでの作業が終了したら、環境を終了できます。Elastic Beanstalk は、環境に関連付けられているすべての AWS リソースを終了します。
EB CLI を使用して Elastic Beanstalk 環境を終了するには、次のコマンドを実行します。
~/eb-docker-compose-flask$ eb terminate
AWS アプリケーションの リソース
複数のコンテナを実行する単一のインスタンスアプリケーションを作成しました。1 つの EC2 インスタンスを持つ簡単なサンプルアプリケーションとして動作するため、ロードバランシングや自動スケーリングは必要ありません。単一インスタンスアプリケーションの場合、Elastic Beanstalk は次の AWS リソースを作成します。
-
EC2 インスタンス – 選択したプラットフォームでウェブアプリケーションを実行するよう設定された Amazon EC2 仮想マシン。
各プラットフォームは、それぞれ特定の言語バージョン、フレームワーク、ウェブコンテナ、またはそれらの組み合わせをサポートするための、さまざまなソフトウェア、設定ファイル、スクリプトを実行します。ほとんどのプラットフォームでは、ウェブアプリケーションの前にウェブトラフィックを処理するリバースプロキシとして Apache または nginx のいずれかを使用します。そのプロキシがリクエストをアプリケーションに転送し、静的アセットを提供して、アクセスログとエラーログを生成します。
-
インスタンスセキュリティグループ – ポート 80 上の受信トラフィックを許可するよう設定された Amazon EC2 セキュリティグループ。このリソースでは、ロードバランサーからの HTTP トラフィックが、ウェブ・アプリケーションを実行している EC2 インスタンスに達することができます。デフォルトでは、トラフィックは他のポート上で許可されません。
-
Amazon S3 バケット – Elastic Beanstalk の使用時に作成されるソースコード、ログ、その他のアーティファクトの保存場所。
-
Amazon CloudWatch アラーム – 環境内のインスタンスの負荷を監視する 2 つの CloudWatch アラーム。負荷が高すぎる、または低すぎる場合にトリガーされます。アラームがトリガーされると、Auto Scaling グループはレスポンスとしてスケールアップまたはダウンを行います。
-
AWS CloudFormation スタック – Elastic Beanstalk は AWS CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、AWS CloudFormation コンソール
に表示できるテンプレートで定義されます。 -
ドメイン名 – ウェブ・アプリケーションまでのルートとなるドメイン名であり、
subdomain
.region
.elasticbeanstalk.com の形式です。
Elastic Beanstalk は、これらのリソースをすべて管理します。環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。Docker Compose アプリケーションは、単一の EC2 インスタンスで複数のコンテナを実行し、Elastic Beanstalk がオーケストレーションを自動的に処理します。
次のステップ
アプリケーションを実行する環境を手に入れた後、アプリケーションの新しいバージョンや、異なるアプリケーションをいつでもデプロイできるようになります。新しいアプリケーションバージョンのデプロイは、プロビジョニングや EC2 インスタンスの再開が必要ないため、非常に素早く行えます。Elastic Beanstalk コンソールを使用して新しい環境を調べることもできます。詳細な手順については、このガイドの「開始方法」の章の「環境を探索する」を参照してください。
サンプルアプリケーションを 1 つか 2 つデプロイし、Docker Compose アプリケーションの開発と実行をローカルで開始する準備ができたら、「」を参照してくださいElastic Beanstalk へのデプロイ用に Docker イメージを準備する。
Elastic Beanstalk コンソールでデプロイする
Elastic Beanstalk コンソールを使用して Docker Compose アプリケーションを起動することもできます。ファイルdocker-compose.yml
と関連するすべてのディレクトリとファイルを含む ZIP ファイルを作成し、新しいアプリケーションを作成するときにアップロードします。詳細な手順については、このガイドの「開始方法」の章の「サンプルアプリケーションを作成する」を参照してください。