

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

# Dockerrun.aws.json v2 ファイルの設定
<a name="create_deploy_docker_v2config"></a>

`Dockerrun.aws.json v2` は、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 プラットフォームの概要](create_deploy_docker_ecs.md#create_deploy_docker_ecs_platform)」を参照してください。

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

**Topics**
+ [`Dockerrun.aws.json` v2](#create_deploy_docker_v2config_dockerrun)
+ [ボリュームフォーマット](#create_deploy_docker_v2config_volume_format)
+ [実行ロール ARN 形式](#create_deploy_docker_v2config_executionRoleArn_format)
+ [コンテナの定義形式](#create_deploy_docker_v2config_dockerrun_format)
+ [認証形式 – プライベートリポジトリからのイメージを使用](#docker-multicontainer-dockerrun-privaterepo)
+ [Dockerrun.aws.json v2 の例](#create_deploy_docker_v2config_example)

## `Dockerrun.aws.json` v2
<a name="create_deploy_docker_v2config_dockerrun"></a>

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

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

**executionRoleArn **  
アカウントに関連付けられた、さまざまな目的とサービスのタスク実行 IAM ロールを指定します。アプリケーションが[シークレットとして保存されている Elastic Beanstalk 環境変数](AWSHowTo.secrets.env-vars.md)を使用するには、必要なアクセス許可を付与するタスク実行ロールの ARN を指定する必要があります。その他の一般的なユースケースでも、このパラメータが必要になる場合があります。詳細については、「[実行ロール ARN 形式](#create_deploy_docker_v2config_executionRoleArn_format)」を参照してください。

**ボリューム**  
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 タスク定義](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html)」を参照してください。

## ボリュームフォーマット
<a name="create_deploy_docker_v2config_volume_format"></a>

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

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

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

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

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

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

## 実行ロール ARN 形式
<a name="create_deploy_docker_v2config_executionRoleArn_format"></a>

アプリケーションが[シークレットとして保存されている Elastic Beanstalk 環境変数](AWSHowTo.secrets.env-vars.md)を使用するには、タスク実行 IAM ロールを指定する必要があります。ロールは、機密データを参照する AWS Secrets Manager シークレットまたは Parameter Store AWS Systems Manager パラメータを使用してユーザーに代わって AWS API コールを行うアクセス許可を Amazon ECS コンテナに付与する必要があります。アカウントに必要なアクセス許可を持つタスク実行 IAM ロールを作成する手順については、「Amazon Elastic Container Service デベロッパーガイド」の「[Amazon ECS タスク実行 IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)」を参照してください。

```
{
"AWSEBDockerrunVersion": 2,
  "executionRoleArn": "arn:aws:iam::{{111122223333}}:role/ecsTaskExecutionRole",
```

### Amazon ECS マネージド Docker プラットフォームに必要な追加のアクセス許可
<a name="create_deploy_docker_v2config_executionRoleArn_format_passRole"></a>

**EC2 インスタンスプロファイルが `iam:PassRole` を ECS に付与する**  
EC2 インスタンスプロファイルがこのロールを ECS コンテナに付与できるようにするには、次の例に示す `iam:PassRole` アクセス許可を含める必要があります。`iam:PassRole` は、EC2 インスタンスのアクセス許可がタスク実行ロールを ECS コンテナに*渡す*ことができるようにします。

この例では、ロールを ECS サービスにのみ渡すように EC2 インスタンスを制限しています。この条件は必須ではありませんが、ベストプラクティスに従って共有されたアクセス許可の範囲を減らすために追加します。これを行うには、`Condition` 要素を使用します。

**注記**  
ECS IAM タスク実行ロールを使用するには、`iam:PassRole` アクセス許可が必要です。ECS タスク実行マネージドサービスロールを必要とするその他の一般的なユースケースがあります。詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「[Amazon ECS タスク実行 IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)」を参照してください。



**Example `iam:PassRole` アクセス許可を持つポリシー**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "{{iam:PassRole}}",
            "Resource": [
                "{{arn:aws:iam::123456789012:role/ecs-task-execution-role}}"
            ],
            "Condition": {
                "StringLike": {
                    "{{iam:PassedToService}}": "{{ecs-tasks.amazonaws.com}}"
                }
            }
        }
    ]
}
```





**Amazon ECS コンテナエージェントにシークレットとパラメータへのアクセス権を付与する**  
Amazon ECS タスク実行 IAM ロールには、シークレットとパラメータストアにアクセスするアクセス許可も必要です。EC2 インスタンスプロファイルロールの要件と同様に、ECS コンテナエージェントには、必要な Secrets Manager または Systems Manager リソースをプルするアクセス許可が必要です。詳細については、「*Amazon Elastic Container Service デベロッパーガイド*」の「[Secrets Manager または Systems Manager のアクセス許可](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html#task-execution-secrets)」を参照してください

**Elastic Beanstalk EC2 インスタンスにシークレットとパラメータへのアクセス権を付与する**  
環境変数として設定されたシークレットをサポートするには、EC2 インスタンスプロファイルにアクセス許可を追加する必要もあります。詳細については、「[Elastic Beanstalk 環境変数へのシークレットとパラメータのフェッチ](AWSHowTo.secrets.env-vars.md)」および「[Secrets Manager で必要な IAM アクセス許可](AWSHowTo.secrets.IAM-permissions.md#AWSHowTo.secrets.IAM-permissions.secrets-manager)」を参照してください。

次の例では、前の `iam:PassRole` 例と、参照先の [Secrets Manager で必要な IAM アクセス許可](AWSHowTo.secrets.IAM-permissions.md#AWSHowTo.secrets.IAM-permissions.secrets-manager) で提供されている例を組み合わせています。EC2 インスタンスが にアクセスして AWS Secrets Manager AWS Systems Manager シークレットとパラメータデータを取得して、シークレット用に設定された Elastic Beanstalk 環境変数を初期化するために必要なアクセス許可を追加します。

**Example `iam:PassRole` アクセス許可と組み合わせた Secrets Manager ポリシー**    
****  

```
{
    "Version": "{{2012-10-17}}",
    "Statement": [
       {
            "Effect": "Allow",
            "Action": "{{iam:PassRole}}",
            "Resource": [
                "{{arn:aws:iam::123456789012:role/ecs-task-execution-role}}"
            ],
            "Condition": {
                "StringLike": {
                    "{{iam:PassedToService}}": "{{ecs-tasks.amazonaws.com}}"
               }
            } 
        },
        {
            "Effect": "{{Allow}}",
            "Action": [
                "{{secretsmanager:GetSecretValue}}",
                "{{kms:Decrypt}}"          
            ],
            "Resource": [
                "{{arn:aws:secretsmanager:us-east-1:{{111122223333}}:secret:my-secret}}",
                "{{arn:aws:kms:us-east-1:{{111122223333}}:key/my-key}}"
            ]
        }
    ]
}
```

**Example `iam:PassRole` アクセス許可と組み合わせた Systems Manager ポリシー**    
****  

```
{
    "Version": "{{2012-10-17}}",
    "Statement": [
       {
            "Effect": "Allow",
            "Action": "{{iam:PassRole}}",
            "Resource": [
                "{{arn:aws:iam::123456789012:role/ecs-task-execution-role}}"
            ],
            "Condition": {
                "StringLike": {
                    "{{iam:PassedToService}}": "{{ecs-tasks.amazonaws.com}}"
               }
            } 
        },
        {
            "Effect": "{{Allow}}",
            "Action": [
                "{{ssm:GetParameter}}",
                "{{kms:Decrypt}}"
            ],
            "Resource": [
                "{{arn:aws:ssm:us-east-1:{{111122223333}}:parameter/my-parameter}}",
                "{{arn:aws:kms:us-east-1:{{111122223333}}:key/my-key}}"
            ]
        }
    ]
}
```

## コンテナの定義形式
<a name="create_deploy_docker_v2config_dockerrun_format"></a>

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

Beanstalk プラットフォームは、ECS *コンテナ定義*を含む ECS *タスク定義*を作成します。Beanstalk は、ECS コンテナ定義のパラメータのサブセットをサポートします。詳細については、「*Amazon Elastic Container Service デベロッパーガイド*」の「[コンテナ定義](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definitions)」を参照してください。

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

**name**  
コンテナの名前。最大長と使用できる文字については、「[標準のコンテナ定義のパラメータ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#standard_container_definition_params)」を参照してください。

**イメージ**  
Docker コンテナの構築元となるオンライン Docker リポジトリの Docker イメージの名前。次の規則があります。  
+  Docker ハブの公式リポジトリのイメージでは、1 つの名前 (例: `ubuntu`、`mongo`) を使用します。
+ Docker ハブの他のリポジトリのイメージは、組織名で修飾されます（例: `amazon/amazon-ecs-agent`）。
+ 他のオンラインリポジトリのイメージは、さらにドメイン名で修飾されます (例: `quay.io/assemblyline/ubuntu`)。

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

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

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

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

**memoryReservation**  
コンテナ用に予約するメモリのソフト制限 (MiB 単位)。コンテナ定義で `memory` と `memoryReservation` パラメータの一方または両方に 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"
  }
],
```

## 認証形式 – プライベートリポジトリからのイメージを使用
<a name="docker-multicontainer-dockerrun-privaterepo"></a>

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

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

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

```
"authentication": {
    "bucket": "{{amzn-s3-demo-bucket}}",
    "key": "{{mydockercfg}}"
  },
```

認証ファイルの作成とアップロードについては、「[イメージリポジトリを使用した認証の使用 AWS Secrets Manager](docker-configuration.remote-repo.md)」を参照してください。

## Dockerrun.aws.json v2 の例
<a name="create_deploy_docker_v2config_example"></a>

以下のスニペットは、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"
        }
      ]
    }
  ]
}
```