ECS マネージド Docker の設定 - AWS Elastic Beanstalk

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ECS マネージド Docker の設定

Dockerrun.aws.json は、Elastic Beanstalk 環境の ECS クラスターでホストされる一連の Docker コンテナをデプロイする方法を記述する Elastic Beanstalk 設定ファイルです。Elastic Beanstalk プラットフォームは、ECS コンテナ定義を含む ECS タスク定義を作成します。これらの定義は Dockerrun.aws.json 設定ファイルに記述されます。

Dockerrun.aws.json ファイル内のコンテナ定義は、ECS クラスター内の各 Amazon EC2 インスタンスにデプロイするコンテナを記述します。この場合、Amazon EC2 インスタンスは Docker コンテナをホストするため、ホストコンテナインスタンスとも呼ばれます。設定ファイルは、Docker コンテナがマウントするホストコンテナインスタンス上に作成するデータボリュームも記述します。Elastic Beanstalk 上の ECS マネージド Docker 環境のコンポーネントの詳細と図については、この章の前半の「ECS マネージド Docker プラットフォーム」を参照してください。

Dockerrun.aws.json ファイルは単独で使用するか、1 つのアーカイブに追加のソースコードとともに圧縮できます。Dockerrun.aws.json でアーカイブされるソースコードは Amazon EC2 コンテナインスタンスにデプロイされ、/var/app/current/ ディレクトリでアクセスできます。

Dockerrun.aws.json v2

Dockerrun.aws.json ファイルには次のセクションが含まれています。

AWSEBDockerrunVersion

ECS マネージド Docker 環境のバージョン番号として値 2 を指定します。

ボリューム

Amazon EC2 コンテナインスタンスのフォルダから、またはソースバンドル (/var/app/current にデプロイ) からボリュームを作成します。containerDefinitions セクションで mountPoints を使用している Docker コンテナ内のパスにこれらのボリュームをマウントします。

containerDefinitions

コンテナ定義の配列。

認証 (オプション)

プライベートリポジトリの認証データが含まれる .dockercfg ファイルの Amazon S3 内の場所です。

Dockerrun.aws.json の「containerDefinitions」と「volumes」のセクションは、Amazon ECS タスク定義ファイルの対応するセクションと同じ形式を使用します。タスク定義の形式およびタスク定義パラメータの完全な一覧については、「Amazon Elastic Container Service デベロッパーガイド」の「Amazon ECS タスク定義」を参照してください。

ボリュームフォーマット

volume パラメータは、Amazon EC2 コンテナインスタンス内のフォルダ、またはソースバンドル (/var/app/current にデプロイされている) のいずれかからボリュームを作成します。

ボリュームは次の形式で指定します:

"volumes": [ { "name": "volumename", "host": { "sourcePath": "/path/on/host/instance" } } ],

コンテナ定義の mountPoints を使用して、これらのボリュームを Docker コンテナ内のパスにマウントします。

Elastic Beanstalk は、コンテナごとにログ用の追加のボリュームを設定します。これらのボリュームは、ホストインスタンスにログを書き込むために、Docker コンテナによってマウントされる必要があります。

詳細については、次の「コンテナ定義の形式」セクションの「mountPoints」フィールドを参照してください。

コンテナの定義形式

次の例は、[containerDefinitions] セクションで一般的に使用されるパラメータのサブセットを示しています。そのほかのオプションパラメータも使用可能です。

Beanstalk プラットフォームは、ECS コンテナ定義を含む ECS タスク定義を作成します。Beanstalk は、ECS コンテナ定義のパラメータのサブセットをサポートします。詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「コンテナ定義」を参照してください。

Dockerrun.aws.json ファイルには、次のフィールドとともに 1 つ以上のコンテナ定義オブジェクトの配列が含まれます。

name

コンテナの名前。最大長と使用できる文字については、「標準のコンテナ定義のパラメータ」を参照してください。

イメージ

Docker コンテナの構築元となるオンライン Docker リポジトリの Docker イメージの名前。次の規則があります。

  • Docker ハブの公式リポジトリのイメージでは、1 つの名前 (例: ubuntumongo) を使用します。

  • Docker ハブの他のリポジトリのイメージは、組織名で修飾されます(例: amazon/amazon-ecs-agent)。

  • 他のオンラインリポジトリのイメージは、さらにドメイン名で修飾されます (例: quay.io/assemblyline/ubuntu)。

環境

コンテナに渡す環境変数の配列。

たとえば、次のエントリでは、Container という名前と PHP という値を使用して環境変数を定義しています。

"environment": [ { "name": "Container", "value": "PHP" } ],
essential

コンテナが失敗した場合にタスクを停止する場合は True。重要でないコンテナは、インスタンスで他のコンテナに影響を与えることなく、終了またはクラッシュできます。

メモリ

コンテナ用に予約するコンテナインスタンスのメモリの量。コンテナ定義で memorymemoryReservation パラメータの一方または両方に 0 以外の整数を指定します。

memoryReservation

コンテナ用に予約するメモリのソフト制限 (MiB 単位)。コンテナ定義で memorymemoryReservation パラメータの一方または両方に 0 以外の整数を指定します。

mountPoints

マウントする Amazon EC2 コンテナインスタンスのボリュームと、それらをマウントする Docker コンテナファイルシステム上の場所。アプリケーションコンテンツを含むボリュームをマウントすると、コンテナはソースバンドルにアップロードしたデータを読み取ることができます。ログデータを書き込むためのログボリュームをマウントすると、Elastic Beanstalk は、これらのボリュームからログデータを収集することができます。

Elastic Beanstalk はコンテナインスタンスにログボリュームを作成します。Docker コンテナごとに 1 つ、場所は /var/log/containers/containername です。これらのボリュームの名前は awseb-logs-containername で、ログが書き込まれるコンテナファイル構造内の場所にマウントします。

たとえば、次のマウントポイントは、コンテナの nginx ログの場所を、nginx-proxy コンテナ用に Elastic Beanstalk が生成したボリュームにマッピングします。

{ "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" }
portMappings

コンテナのネットワークポートをホストのポートにマッピングします。

links

リンク先のコンテナのリスト。リンクされたコンテナはお互いを検出し、安全に通信できます。

volumesFrom

別コンテナからのボリュームをすべてマウントします。たとえば、web という名前のコンテナからボリュームをマウントするには、次の手順を実行します。

"volumesFrom": [ { "sourceContainer": "web" } ],

認証形式 – プライベートリポジトリからのイメージを使用

authentication セクションには、プライベートリポジトリの認証データが含まれています。このエントリはオプションです。

認証ファイルを authentication ファイルの Dockerrun.aws.json パラメータ内に含む Amazon S3 バケットに関する情報を追加します。authentication パラメータに有効な Amazon S3 バケットとキーが含まれていることを確認します。Amazon S3 バケットは、バケットを使用している環境と同じリージョンでホストする必要があります。Elastic Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードしません。

以下の形式が使用されます。

"authentication": { "bucket": "DOC-EXAMPLE-BUCKET", "key": "mydockercfg" },

認証ファイルの生成とアップロードの詳細については、この章の「環境設定」トピックの「プライベートリポジトリからのイメージの使用」を参照してください。

Dockerrun.aws.json v2 の例

以下のスニペットは、2 つのコンテナを持つインスタンスの Dockerrun.aws.json ファイルの構文を示す例です。

{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "environment": [ { "name": "Container", "value": "PHP" } ], "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" } ] } ] }