タスク定義の作成 - Amazon Elastic Container Service

タスク定義の作成

Docker コンテナを Amazon ECS で実行するには、タスク定義を作成する必要があります。1 つのタスク定義に複数のコンテナとデータボリュームを定義できます。タスク定義で使用できるパラメータの詳細については、「タスク定義パラメータ」を参照してください。

新しいタスク定義を作成するには

  1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。

  2. ナビゲーションペインで [Task Definitions (タスク定義)]、[Create new Task Definition (新しいタスク定義の作成)] の順に選択します。

  3. [Select compatibilities] ページで、タスクで使用する起動タイプを選択し、[Next step] を選択します。

    注記

    Fargate は Windows コンテナと互換性がありません。

  4. 選択した起動タイプに応じて、以下のいずれかのタブのステップに従います。

Fargate launch type

Fargate 起動タイプの互換性テンプレートの使用

[Fargate] を選択した場合は、以下の手順を実行します。

  1. (オプション) JSON 形式のタスク定義の場合は、以下の手順を実行します。

    1. [Configure task and container definitions] ページで、ページの下部までスクロールし、[Configure via JSON] を選択します。

    2. JSON 形式のタスク定義をテキスト領域に貼り付け、[Save] を選択します。

    3. 情報を確認し、[Create] を選択します。

    ページの末尾までスクロールし、[Configure via JSON] を選択します。

  2. [タスク定義名] に、タスク定義の名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

  3. (オプション) [タスクロール] で、お客様に代わって、AWS API オペレーションを呼び出すためのアクセス許可をタスクのコンテナに付与する IAM ロールを選択します。詳細については、「タスク用の IAM ロール」を参照してください。

    注記

    ここには、[Amazon EC2 Container Service Task Role] 信頼関係があるロールのみが表示されます。タスク用の IAM ロールを作成する方法の詳細については、タスク用の IAM ロールとポリシーの作成 を参照してください。

  4. [Task execution IAM ロール] で、タスク実行ロールを選択するか、[新しいロールの作成] を選択してコンソールで自動的に作成します。詳細については、「Amazon ECS タスク実行 IAM ロール」を参照してください。

  5. [Task size] で、[Task memory (GB)] および [Task CPU (vCPU)] の値を選択します。次の表では、有効な組み合わせを示しています。

    CPU の値 メモリの値
    256 (.25 vCPU) 512 MB、1 GB、2 GB
    512 (.5 vCPU) 1 GB、2 GB、3 GB、4 GB
    1024 (1 vCPU) 2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB
    2048 (2 vCPU) 4 GB ~ 16 GB (1 GB のインクリメント)
    4096 (4 vCPU) 8 GB~30 GB (1 GB のインクリメント)
  6. タスク定義内のコンテナごとに、以下の手順を実行します。

    1. [コンテナの追加] を選択します。

    2. コンテナの定義で使用するために、それぞれの必須のフィールドと任意のオプションフィールドに入力します。その他のコンテナの定義パラメータは、[詳細コンテナ設定] メニューより設定できます。詳細については、「タスク定義パラメータ」を参照してください。

    3. [追加] を選択して、タスク定義にコンテナを追加します。

  7. (オプション) サービス統合の場合、App Mesh 統合のパラメータを構成するには、[Enable App Mesh integration (App Mesh 統合を有効にする)] を選択してから、次の手順を実行します。

    1. [Application container name (アプリケーションコンテナ名)] で、App Mesh アプリケーションに使用するコンテナ名を選択します。このコンテナは、タスク定義内ですでに定義されている必要があります。

    2. [Envoy image (Envoy イメージ)] で、「840364872350.dkr.ecr.region-code.amazonaws.com/aws-appmesh-envoy:v1.12.4.0-prod」を入力します。

    3. [Mesh name (メッシュ名)] に、App Mesh サービスメッシュの名前を指定します。これを表示するには、事前に作成しておく必要があります。詳細については、AWS App Mesh ユーザーガイド の「サービスメッシュ」を参照してください。

    4. [Virtual node name (仮想ノード名)] で App Mesh 仮想ノードの名前を選択します。これを表示するには、事前に作成しておく必要があります。詳細については、AWS App Mesh ユーザーガイド の「仮想ノード」を参照してください。

    5. [Virtual node por (仮想ノードポート)] には、仮想ノードで設定されたリスナーポートが事前に入力されます。

    6. [Apply (適用)]、Confirm (確認)] を順に選択します。これにより、タスク定義に対する新しい Envoy プロキシコンテナと、それをサポートする設定が作成されます。次に、次のステップのために App Mesh プロキシ設定が事前に入力されます。

  8. (オプション) [プロキシ設定] に事前に入力されたすべての値を確認します。これらのフィールドの詳細については、「更新サービス」の JSON タブを参照してください。

  9. (オプション) [Log Router Integration (ログルーター統合)] の場合、カスタムログルーティング設定を追加できます。[Enable FireLens integration (FireLens 統合を有効にする)] を選択し、以下を実行します。

    1. [Type (タイプ)] で、使用するログルーターのタイプを選択します。

    2. [Image (イメージ)] で、ログルーターコンテナのイメージ URI を入力します。fluentbit ログルータータイプを選択した場合は、[Image (イメージ)] フィールドに AWS for Fluent Bit イメージが事前入力されています。詳細については、「AWS for Fluent Bit イメージの使用」を参照してください。

    3. [Apply] を選択します。これにより、log_router という名前のタスク定義に新しいログルーターコンテナが作成され、それをサポートする設定が適用されます。ログルーター統合フィールドを変更した場合は、もう一度、[Apply (適用)] を選択して FireLens コンテナを更新します。

  10. (オプション) タスクのデータボリュームを定義するには、[ボリュームの追加] を選択します。詳細については、「タスクでのデータボリュームの使用」を参照してください。

    1. [名前] に、ボリュームの名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

  11. [Tags (タグ)] セクションで、タスク定義に関連付ける各タグのキーと値を指定します。詳細については、「Amazon ECS リソースにタグを付ける」を参照してください。

  12. [Create] を選択します。

EC2 launch type

EC2 起動タイプの互換性テンプレートの使用

[EC2] を選択した場合は、以下の手順を実行します。

  1. (オプション) JSON 形式のタスク定義の場合は、以下の手順を実行します。

    1. [Configure task and container definitions] ページで、ページの下部までスクロールし、[Configure via JSON] を選択します。

    2. JSON 形式のタスク定義をテキスト領域に貼り付け、[Save] を選択します。

    3. 情報を確認し、[Create] を選択します。

    ページの末尾までスクロールし、[Configure via JSON] を選択します。

  2. [Task Definition Name (タスク定義名)] に、タスク定義の名前を入力します。 最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

  3. (オプション) [Task Role (タスクロール)] で、AWS API を呼び出すためのアクセス権限をタスクのコンテナに付与する IAM ロールを選択します。詳細については、「タスク用の IAM ロール」を参照してください。

    EC2 起動タイプを使用するタスクの場合、これらのアクセス権限は通常、Amazon ECS コンテナインスタンスの IAM ロールによって付与されます。詳細については、「Amazon ECS コンテナインスタンス IAM ロール」を参照してください。

    注記

    ここには、[Amazon EC2 Container Service Task Role] 信頼関係があるロールのみが表示されます。タスク用の IAM ロールを作成する方法の詳細については、タスク用の IAM ロールとポリシーの作成 を参照してください。

  4. (オプション) [Network Mode] で、タスクのコンテナに使用する Docker ネットワークモードを選択します。使用可能なネットワークモードは、Docker run リファレンスの「Network settings」で説明しているものと同じです。次のステップで [Enable App Mesh integration] を選択する場合は、[awsvpc] を選択する必要があります。

    デフォルトの Docker ネットワークモードは bridge です。ネットワークモードを none に設定した場合、コンテナ定義にポートマッピングを指定することはできず、タスクのコンテナに外部接続がなくなります。ネットワークモードが awsvpc の場合、タスクに Elastic Network Interface が割り当てられます。host および awsvpc ネットワークモードでは、コンテナのネットワークパフォーマンスは最大限に高まります。bridge モードとは異なり、仮想化ネットワークスタックではなく、Amazon EC2 ネットワークスタックを使用するためです。ただし、公開されるコンテナポートは対応するホストポートに直接マッピングされるため、ポートマッピングが使用されている場合は、1 つのコンテナインスタンスで同じタスクの複数のインスタンスを実行することはできません。

  5. (オプション) [Task execution role (タスク実行ロール)] で、AWS API を呼び出すためのアクセス権限をタスクのコンテナに付与する IAM ロールを選択します。

    EC2 起動タイプを使用するタスクの場合、これらのアクセス権限は通常、[Task Role (タスクロール)] として先ほど指定した Amazon ECS コンテナインスタンスの IAM ロールによって付与されます。タスク実行ロールを指定する必要はありません。詳細については、「Amazon ECS タスク実行 IAM ロール」を参照してください。

  6. (省略可能) [Task size] で、[Task memory (GB)] および [Task CPU (vCPU)] の値を選択します。サポートされている Task CPU (vCPU) の値は 128 CPU ユニット (0.125 vCPU) ~ 10240 CPU ユニット (10 vCPU) です。

    注記

    タスクレベル CPU およびメモリのパラメータは Windows コンテナでは無視されます。Windows コンテナではコンテナレベルリソースを指定することをお勧めします。

  7. タスク定義内のコンテナごとに、以下の手順を実行します。

    1. [Add container] を選択します。

    2. コンテナ定義で使用する必須のフィールドとオプションのフィールドにそれぞれ入力します (コンテナ定義のその他のパラメータは [Advanced container configuration] メニューから使用できます)。詳細については、「タスク定義パラメータ」を参照してください。

    3. [Add] を選択して、タスク定義にコンテナを追加します。

  8. (オプション) [Constraint] で、このタスク定義から作成されるタスクがクラスターにどのように配置されるかを定義します。EC2 起動タイプを使用するタスクの場合、アベイラビリティーゾーン、インスタンスタイプ、またはカスタム属性に基づいたタスク配置の制約を使用できます。詳細については、「Amazon ECS タスク配置の制約事項」を参照してください。

  9. (オプション) サービス統合の場合、App Mesh 統合のパラメータを構成するには、[Enable App Mesh integration (App Mesh 統合を有効にする)] を選択してから、次の手順を実行します。

    1. [Application container name (アプリケーションコンテナ名)] で、App Mesh アプリケーションに使用するコンテナ名を選択します。このコンテナは、タスク定義内ですでに定義されている必要があります。

    2. [Envoy image (Envoy イメージ)] で、「840364872350.dkr.ecr.region-code.amazonaws.com/aws-appmesh-envoy:v1.12.4.0-prod」を入力します。

    3. [Mesh name (メッシュ名)] に、App Mesh サービスメッシュの名前を指定します。これを表示するには、事前に作成しておく必要があります。詳細については、AWS App Mesh ユーザーガイド の「サービスメッシュ」を参照してください。

    4. [Virtual node name (仮想ノード名)] で App Mesh 仮想ノードの名前を選択します。これを表示するには、事前に作成しておく必要があります。詳細については、AWS App Mesh ユーザーガイド の「仮想ノード」を参照してください。

    5. [Virtual node por (仮想ノードポート)] には、仮想ノードで設定されたリスナーポートが事前に入力されます。

    6. [Apply (適用)]、Confirm (確認)] を順に選択します。これにより、タスク定義に対する新しい Envoy プロキシコンテナと、それをサポートする設定が作成されます。次に、次のステップのために App Mesh プロキシ設定が事前に入力されます。

  10. (オプション) [プロキシ設定] に事前に入力されたすべての値を確認します。これらのフィールドの詳細については、「更新サービス」の JSON タブを参照してください。

  11. (オプション) [Log Router Integration (ログルーター統合)] の場合、カスタムログルーティング設定を追加できます。[Enable FireLens integration (FireLens 統合を有効にする)] を選択し、以下を実行します。

    1. [Type (タイプ)] で、使用するログルーターのタイプを選択します。

    2. [Image (イメージ)] で、ログルーターコンテナのイメージ URI を入力します。fluentbit ログルータータイプを選択した場合は、[Image (イメージ)] フィールドに AWS for Fluent Bit イメージが事前入力されています。詳細については、「AWS for Fluent Bit イメージの使用」を参照してください。

    3. [Apply] を選択します。これにより、log_router という名前のタスク定義に新しいログルーターコンテナが作成され、それをサポートする設定が適用されます。ログルーター統合フィールドを変更した場合は、もう一度、[Apply (適用)] を選択して FireLens コンテナを更新します。

  12. (オプション) タスクのデータボリュームを定義するには、[Add volume] を選択します。バインドマウントまたは Docker ボリュームを作成できます。詳細については、「タスクでのデータボリュームの使用」を参照してください。

    1. [名前] に、ボリュームの名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

    2. (オプション) バインドマウントボリュームを作成するには、[Source path (ソースパス)] に、コンテナに渡すホストコンテナインスタンスのパスを入力します。このフィールドを空のままにした場合、Docker デーモンによってホストパスが割り当てられます。ソースパスを指定した場合、手動で削除するまで、データボリュームはホストコンテナインスタンス上の指定した場所に保持されます。ソースパスがホストコンテナインスタンスに存在しない場合、Docker デーモンによってそのパスが作成されます。その場所が存在する場合は、ソースパスフォルダの内容がコンテナにエクスポートされます。

    3. Docker ボリュームを作成するには、[Specify a volume driver (ボリュームドライバーの指定)] を選択します。

      1. [Driver (ドライバー)] で、使用する Docker ボリュームドライバーを選択します。ドライバーの値と、Docker によって指定されたドライバー名が一致する必要があります。ドライバー名を取得するには、コンテナインスタンスで docker plugin ls を使用します。

      2. [スコープ] で、Docker ボリュームのライフサイクルを指定するオプションを選択します。Docker ボリュームの範囲が task の場合は、タスクが開始すると自動的にプロビジョンされ、タスクが停止すると破棄されます。Docker ボリュームの範囲が shared の場合は、タスク停止後も維持されます。

      3. Docker ボリュームが存在しない場合は、[Enable auto-provisioning (自動プロビジョニングの有効化)] を選択して作成します。このオプションは、shared 範囲を指定したボリュームにのみ利用できます。

      4. [Driver options (ドライバーオプション)] で、ドライバー固有のキーの値を指定します。

      5. [Volume labels (ボリュームラベル)] で、Docker ボリュームに追加するカスタムのメタデータを指定します。

  13. [Tags (タグ)] セクションで、タスク定義に関連付ける各タグのキーと値を指定します。詳細については、「Amazon ECS リソースにタグを付ける」を参照してください。

  14. [作成] を選択します。

タスク定義テンプレート

以下に示しているのは、空のタスク定義テンプレートです。このテンプレートを使用してタスク定義を作成します。これにより、コンソールの JSON 入力領域に貼り付けるか、ファイルに保存して AWS CLI の --cli-input-json オプションで使用できるようになります。詳細については、「タスク定義パラメータ」を参照してください。

{ "family": "", "taskRoleArn": "", "executionRoleArn": "", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "", "image": "", "repositoryCredentials": { "credentialsParameter": "" }, "cpu": 0, "memory": 0, "memoryReservation": 0, "links": [ "" ], "portMappings": [ { "containerPort": 0, "hostPort": 0, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "" ], "command": [ "" ], "environment": [ { "name": "", "value": "" } ], "environmentFiles": [ { "value": "", "type": "s3" } ], "mountPoints": [ { "sourceVolume": "", "containerPath": "", "readOnly": true } ], "volumesFrom": [ { "sourceContainer": "", "readOnly": true } ], "linuxParameters": { "capabilities": { "add": [ "" ], "drop": [ "" ] }, "devices": [ { "hostPath": "", "containerPath": "", "permissions": [ "read" ] } ], "initProcessEnabled": true, "sharedMemorySize": 0, "tmpfs": [ { "containerPath": "", "size": 0, "mountOptions": [ "" ] } ], "maxSwap": 0, "swappiness": 0 }, "secrets": [ { "name": "", "valueFrom": "" } ], "dependsOn": [ { "containerName": "", "condition": "HEALTHY" } ], "startTimeout": 0, "stopTimeout": 0, "hostname": "", "user": "", "workingDirectory": "", "disableNetworking": true, "privileged": true, "readonlyRootFilesystem": true, "dnsServers": [ "" ], "dnsSearchDomains": [ "" ], "extraHosts": [ { "hostname": "", "ipAddress": "" } ], "dockerSecurityOptions": [ "" ], "interactive": true, "pseudoTerminal": true, "dockerLabels": { "KeyName": "" }, "ulimits": [ { "name": "msgqueue", "softLimit": 0, "hardLimit": 0 } ], "logConfiguration": { "logDriver": "awslogs", "options": { "KeyName": "" }, "secretOptions": [ { "name": "", "valueFrom": "" } ] }, "healthCheck": { "command": [ "" ], "interval": 0, "timeout": 0, "retries": 0, "startPeriod": 0 }, "systemControls": [ { "namespace": "", "value": "" } ], "resourceRequirements": [ { "value": "", "type": "GPU" } ], "firelensConfiguration": { "type": "fluentd", "options": { "KeyName": "" } } } ], "volumes": [ { "name": "", "host": { "sourcePath": "" }, "dockerVolumeConfiguration": { "scope": "task", "autoprovision": true, "driver": "", "driverOpts": { "KeyName": "" }, "labels": { "KeyName": "" } }, "efsVolumeConfiguration": { "fileSystemId": "", "rootDirectory": "", "transitEncryption": "ENABLED", "transitEncryptionPort": 0, "authorizationConfig": { "accessPointId": "", "iam": "ENABLED" } } } ], "placementConstraints": [ { "type": "memberOf", "expression": "" } ], "requiresCompatibilities": [ "EC2" ], "cpu": "", "memory": "", "tags": [ { "key": "", "value": "" } ], "pidMode": "task", "ipcMode": "none", "proxyConfiguration": { "type": "APPMESH", "containerName": "", "properties": [ { "name": "", "value": "" } ] }, "inferenceAccelerators": [ { "deviceName": "", "deviceType": "" } ] }

このタスク定義テンプレートは、以下の AWS CLI コマンドを使用して生成できます。

aws ecs register-task-definition --generate-cli-skeleton