

# コンソールを使用した Amazon ECS タスク定義の作成
<a name="create-task-definition"></a>

タスクまたはサービスとして実行するアプリケーションを定義できるように、タスク定義を作成します。

外部起動タイプのタスク定義を作成するときは、JSON エディタを使用してタスク定義を作成し、`requireCapabilities` パラメータを `EXTERNAL` に設定する必要があります。

タスク定義は、コンソールエクスペリエンスを使用するか、JSON ファイルを指定して作成できます。JSON エディタを使用すると、Amazon Q に推奨値を提供させることができます。詳細については、[Amazon Q Developer を使用して Amazon ECS コンソールでタスク定義のレコメンデーションを生成する](using-amazon-q.md)を参照してください。

## JSON 検証
<a name="json-validate-for-create"></a>

Amazon ECS コンソールの JSON エディタは、JSON ファイル内で以下を検証します。
+ ファイルが有効な JSON ファイルであること。
+ ファイルに外部キーが含まれていないこと。
+ ファイルに `familyName` パラメータが含まれていること。
+ `containerDefinitions` の下に少なくとも 1 つのエントリがあること。

## CloudFormation スタック
<a name="cloudformation-stack"></a>

次の動作は、2023 年 1 月 12 日以前に新しい Amazon ECS コンソールで作成されたタスク定義に適用されます。

タスク定義の作成時、Amazon ECS コンソールは、名前が `ECS-Console-V2-TaskDefinition-` で始まる CloudFormation スタックを自動的に作成します。AWS CLI または AWS SDK を使用してタスク定義を登録解除した場合は、手動でタスク定義スタックを削除する必要があります。詳細については、「*CloudFormation ユーザーガイド*」の「[スタックの削除](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)」を参照してください。

2023 年 1 月 12 日以降に作成されたタスク定義では、CloudFormation スタックの自動的な作成は行われません。

## 手順
<a name="create-task-procedure"></a>

------
#### [ Amazon ECS console ]

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

1. ナビゲーションペインで、**タスクの定義** を選択します。

1. **[新しいタスク定義の作成]** メニューで、**[新しいタスク定義を作成する]** を選択します。

1. **[Task definition family]** (タスク定義ファミリー) を使用する場合、タスク定義ファミリーには、タスク定義に一意の名前を指定します。

1. **[起動タイプ]** で、アプリケーション環境を選択します。コンソールのデフォルトは、**AWS Fargate** (サーバーレス) です。Amazon ECS は、この値を使用して検証を実行し、タスク定義パラメータがインフラストラクチャタイプに対して有効であることを確認します。

1. **[Operating system/Architecture]** (オペレーティングシステム/アーキテクチャ) を使用する場合、タスクのオペレーティングシステムと CPU アーキテクチャを選択します。

   タスクを 64 ビット ARM アーキテクチャで実行するには、**[Linux/ARM64]** を選択します。詳細については、「[ランタイムプラットフォーム](task_definition_parameters.md#runtime-platform)」を参照してください。

   Windows コンテナで **AWS Fargate** タスクを実行するには、サポートされている Windows オペレーティングシステムを選択します。詳細については、「[オペレーティングシステムとアーキテクチャ](fargate-tasks-services.md#fargate-task-os)」を参照してください。

1. **[Task size]** (タスクサイズ) では、タスク用に予約する CPU とメモリの値を選択します。CPU 値は vCPUs として指定され、メモリは GB として指定されます。

   Fargate でホストされるタスクの場合、次の表に有効な CPU とメモリの組み合わせを示します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-task-definition.html)

   EC2 インスタンスまたは外部インスタンスを使用するタスクの場合、サポートされるタスク CPU 値は 128 CPU ユニット (0.125 vCPU) から 196608 CPU ユニット (192 vCPU) の範囲となります。

   メモリ値を GB 単位で指定するには、数字に続けて **[GB]** と入力します。たとえば、**[メモリ値]** を 3 GB に設定するには、**[3GB]** と入力します。
**注記**  
タスクレベル CPU およびメモリのパラメータは Windows コンテナでは無視されます。

1. **[Network mode]** (ネットワークモード) の場合、使用するネットワークモードを選択します。デフォルトは、**awsvpc** モードです。詳細については、[Amazon ECS タスクネットワーキング](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)を参照してください。

   **[ポートマッピング]** で、**[ホストポート]** に **[ブリッジ]** を選択した場合は、コンテナ用に予約するコンテナインスタンスのポート番号を入力します。

1. (オプション) **[タスクロール]** セクションを展開してタスク向け AWS Identity and Access Management (IAM) ロールを設定できます。

   1. **[Task role]** (タスクロール) では、タスクに割り当てる IAM ロールを選択します。タスク IAM ロールは、タスク内のコンテナが AWS API 操作を呼び出すアクセス許可を提供します。

   1. **[タスク実行ロール]** で、ロールを選択します。

      タスク実行ロールをいつ使用するかの詳細については、「[Amazon ECS タスク実行IAM ロール](task_execution_IAM_role.md)」を参照してください。ロールが不要な場合は、**[なし]** を選択します。

1. (オプション) **タスク配置** セクションを展開して、配置の制約を追加します。タスク配置の制約により、組み込み属性またはカスタム属性を使用して、タスクの配置に使用されるコンテナインスタンスをフィルタリングできます。

1. (オプション) **フォールトインジェクション** セクションを展開して、フォールトインジェクションを有効にします。フォールトインジェクションを使用すると、特定の障害シナリオに対するアプリケーションの反応をテストできます。

1. タスク定義で定義するコンテナごとに、以下のステップを実行します。

   1. **[Name]** (名前) に、コンテナの名前を入力します。

   1. **[Image URI]** (イメージ URI) には、コンテナの開始に使用するイメージを指定します。Amazon ECR Public Gallery レジストリ内のイメージは、Amazon ECR Public レジストリ名の使用でのみ指定することができます。例えば、`public.ecr.aws/ecs/amazon-ecs-agent:latest` が指定されている場合は、Amazon ECR Public Gallery でホストされている Amazon Linux コンテナが使用されます。他のすべてのリポジトリの場合は、`repository-url/image:tag` または `repository-url/image@digest` の形式を使用してリポジトリを指定します。

   1. イメージが Amazon ECR の外部のプライベートレジストリにある場合は、**[プライベートレジストリ]** で **[プライベートレジストリ認証]** をオンにします。その後、**[Secrets Manager ARN または名前]** で、シークレットの Amazon リソースネーム (ARN) を入力します。

   1. **[基本コンテナ]** の場合、もしタスク定義に 2 つ以上のコンテナが定義されていれば、そのコンテナを基本と見なすかどうかを指定できます。コンテナが **[基本]** とマークされている場合は、そのコンテナが停止するとタスクは停止します。各タスク定義には、少なくとも 1 つの基本コンテナを含む必要があります。

   1. ポートマッピングにより、コンテナはホスト上のポートにアクセスしてトラフィックを送受信できるようになります。**[Port mappings]** (ポートマッピング) で、次のいずれかを実行]ます。
      + **[awsvpc]** ネットワークモードを使用する場合、**[Container port]** (コンテナポート) と **[Protocol]** (プロトコル) で、コンテナに使用するポートマッピングを選択します。
      + **[bridge]** ネットワークモードを使用する場合、**[Container port]** (コンテナポート) と **[Protocol]** (プロトコル) で、コンテナに使用するポートマッピングを選択します。

      追加のコンテナポートマッピングを指定するには、**[Add more port mappings]** (ポートマッピングを追加) を選択します。

   1. コンテナにルート ファイル システムへの読み取り専用アクセスを付与するには、**[読み取り専用ルートファイルシステム]** で **[読み取り専用]** を選択します。

   1. (オプション) **[リソース割り当て制限]** のタスクレベルの値とは異なるコンテナ レベルの CPU、GPU、およびメモリの制限を定義するには、次の手順を実行します。
      + **[CPU]** には、Amazon ECS コンテナエージェントがそのコンテナ用に予約している CPU ユニット数を入力します。
      + **[GPU]** では、コンテナインスタンス用の GPU ユニット数を入力します。

        GPU サポートを使用する Amazon EC2 インスタンスには、各 GPU について 1 つの GPU ユニットが装備されます。詳細については、「[GPU ワークロード向けの Amazon ECS タスク定義](ecs-gpu.md)」を参照してください。
      + **[メモリのハード制限]** には、コンテナに提供するメモリの量を GB 単位で入力します。コンテナがハード制限を超えようとすると、コンテナは停止します。
      + Docker 20.10.0 以降のデーモンではコンテナ用に最低 6 MiB のメモリを予約するため、コンテナ用に 6 MiB 未満のメモリを指定しないでください。

        Docker 19.03.13-ce 以前のデーモンではコンテナ用に最低 4 MiB のメモリを予約するため、コンテナ用に 4 MiB 未満のメモリを指定しないでください。
      + **[メモリのソフト制限]** に、コンテナに予約するメモリのソフト制限 (GB 単位) を入力します。

        システムメモリに競合がある場合、Docker はコンテナのメモリ量をこのソフト制限値内に維持しようとします。タスクレベルのメモリを指定しない場合は、**[メモリのハード制限]** と **[メモリのソフト制限]** の一方または両方にゼロ以外の整数を指定する必要があります。両方を指定する場合は、**[メモリのハード制限]** がメモリの **[ソフト制限]** より大きい必要があります。

        この機能は Windows コンテナではサポートされません。

   1. (オプション) **[環境変数]** セクションを展開し、コンテナに挿入する環境変数を指定します。環境変数は、キー値ペアを使用して個別に指定するか、Amazon S3 バケットでホストされている環境変数ファイルを指定して一括で指定できます。環境変数ファイルのフォーマット方法については、「[個々の環境変数を Amazon ECS コンテナに渡す](taskdef-envfiles.md)」を参照してください。

      シークレットストレージの環境変数を指定するときは、**[キー]** にシークレット名を入力します。次に、**[ValueFrom]** に、Systems Manager パラメータストアシークレットまたは Secrets Manager シークレットの完全な ARN を入力します。

   1. (オプション) **[Use log collection]** (ログコレクションを使用) を選択し、ログ構成を指定します。使用可能なログドライバーごとに、指定するログドライバーオプションがあります。デフォルトのオプションでは、コンテナログを Amazon CloudWatch Logs に送信します。その他のログドライバーオプションは、AWS FireLens を使用して設定されます。詳細については、「[Amazon ECS ログを AWS サービスまたは AWS Partner に送信する](using_firelens.md)」を参照してください。

      以下では、各コンテナログの送信先について詳しく説明します。
      + **Amazon CloudWatch** — コンテナログを CloudWatch Logs に送信するようにタスクを設定します。デフォルトのログドライバーオプションが提供され、ユーザーに代わり CloudWatch ロググループを作成します。別のロググループ名を指定するには、ドライバーオプションの値を変更します。
      + **Splunk へのログのエクスポート** — リモートサービスにログを送信する Splunk ドライバーにコンテナログを送信するタスクを設定します。Splunk Web サービスの URL を入力する必要があります。Splunk トークンは機密データとして扱われる可能性があるため、シークレットのオプションとして指定します。
      + **[Amazon Data Firehose へのログのエクスポート]** — Firehose にコンテナログを送信するようタスクを設定します。Firehose 配信ストリームにログを送信するデフォルトのログドライバーオプションが提供されています。別の配信ストリーム名を指定するには、ドライバーオプションの値を変更します。
      + **Amazon Kinesis Data Streams へのログのエクスポート** — Kinesis Data Streams にコンテナログを送信するようタスクを設定します。Kinesis Data Streams のストリームにログを送信するデフォルトのログドライバーオプションが提供されています。別のストリーム名を指定するには、ドライバーオプションの値を変更します。
      + **Amazon OpenSearch Service へのログのエクスポート** — コンテナログを OpenSearch Service ドメインに送信するようタスクを設定します。ログドライバーオプションを提供する必要があります。
      + **Amazon S3 へのログのエクスポート** — Amazon S3 バケットにコンテナログを送信するようタスクを設定します。デフォルトのログドライバーオプションが提供されていますが、有効な Amazon S3 バケット名を指定する必要があります。

   1. (オプション) コンテナの追加パラメータを設定します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-task-definition.html)

   1. (オプション) **[コンテナを追加する]**をクリックして、タスク定義にコンテナを追加します。

1. (オプション) **[ストレージ]** セクションを使用して、Fargate でホストされるタスクの一時ストレージ量を拡張することができます。またこのセクションを使用して、タスクのデータボリューム設定を追加することもできます。

   1. Fargate タスクに使用可能なエフェメラルストレージをデフォルト値の 20 gibibytes (GiB) を超えて拡張するには、**[Amount]** (量) に最大で 200 GiB までの値を入力します。

1. (オプション) タスク定義のデータ ボリューム構成を追加するには、**[ボリュームの追加]** を選択し、以下のステップを実行します。

   1. **[Volume name]** (ボリューム名) には、データボリュームの名前を入力します。データボリューム名は、コンテナマウントポイントを作成するときに使用されます。

   1. **[ボリューム設定]** では、ボリュームをタスク定義の作成時に設定するのか、デプロイ時に設定するのかを選択します。
**注記**  
タスク定義の作成時に設定できるボリュームには、バインドマウント、Docker、Amazon EFS、Amazon FSx for Windows File Server などがあります。デプロイ時にタスクを実行するとき、またはサービスを作成または更新するときに設定できるボリュームには Amazon EBS が含まれます。

   1. **[ボリュームタイプ]**では、選択した設定タイプと互換性のあるボリュームタイプを選択し、ボリュームタイプを設定します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/create-task-definition.html)

1. 別のコンテナからボリュームを追加するには、**[以下からボリュームを追加:]** を選択し、次のように構成します。
   + **[コンテナ]** で、対象のコンテナを選択します。
   + **[ソース]** で、マウントするボリュームが含まれるコンテナを選択します。
   + **[読み取り専用]** では、コンテナがボリュームに対して読み取り専用アクセスを持つかどうかを選択します。

1. (オプション) AWS Distro for OpenTelemetry 統合を使用してアプリケーショントレースとメトリクス収集設定を構成するには、**[モニタリング]** を展開し、**[メトリクス収集を使用]** を選択してタスクのメトリクスを収集し、Amazon CloudWatch または Amazon Managed Service for Prometheus に送信します。このオプションを選択すると、Amazon ECS はアプリケーションメトリクスの送信向けに事前設定された AWS Distro for OpenTelemetry コンテナサイドカーを作成します。詳細については、「[アプリケーションメトリクスを使用して Amazon ECS アプリケーションのパフォーマンスを相関させる](metrics-data.md)」を参照してください。

   1. **[Amazon CloudWatch]** を選択した場合、カスタムアプリケーションメトリクスはカスタムメトリクスとして CloudWatch にルーティングされます。詳細については、「[アプリケーションメトリクスを Amazon CloudWatch にエクスポートする](application-metrics-cloudwatch.md)」を参照してください。
**重要**  
Amazon CloudWatch にアプリケーションメトリクスをエクスポートする場合、タスク定義には、必要なアクセス権限を持つタスク IAM ロールが必要です。詳細については、「[OpenTelemetry 用 AWS Distro と Amazon CloudWatch の統合に必要な IAM 許可](application-metrics-cloudwatch.md#application-metrics-cloudwatch-iam)」を参照してください。

   1. **[Amazon Managed Service for Prometheus (Prometheus libraries instrumentation)]** (Prometheus 向け Amazon マネージドサービス (Prometheus ライブラリ計測)) を選択した場合、タスクレベルの CPU、メモリ、ネットワーク、ストレージのメトリクスとカスタムアプリケーションメトリクスが Amazon Managed Service for Prometheus にルーティングされます。**[Workspace のリモート書き込み用エンドポイント]** には、Prometheus ワークスペースのリモート書き込みエンドポイント URL を入力します。**[スクレイピングターゲット]** には、AWS  Distro for OpenTelemetry コレクターがメトリクスデータをスクレイプするために使用できるホストとポートを入力します。詳細については、「[アプリケーションメトリクスを Amazon Managed Service for Prometheus にエクスポートする](application-metrics-prometheus.md)」を参照してください。
**重要**  
Amazon Managed Service for Prometheus にアプリケーションメトリクスをエクスポートする場合、タスク定義には、必要なアクセス権限を持つタスク IAM ロールが必要です。詳細については、「[OpenTelemetry 用 AWS Distro と Amazon Managed Service for Prometheus の統合に必要な IAM 許可](application-metrics-prometheus.md#application-metrics-prometheus-iam)」を参照してください。

   1. **[Amazon Managed Service for Prometheus (OpenTelemetry 計測)]** を選択した場合、タスクレベルの CPU、メモリ、ネットワーク、ストレージのメトリクスとカスタムアプリケーションメトリクスが Amazon Managed Service for Prometheus にルーティングされます。**[Workspace のリモート書き込み用エンドポイント]** には、Prometheus ワークスペースのリモート書き込みエンドポイント URL を入力します。詳細については、「[アプリケーションメトリクスを Amazon Managed Service for Prometheus にエクスポートする](application-metrics-prometheus.md)」を参照してください。
**重要**  
Amazon Managed Service for Prometheus にアプリケーションメトリクスをエクスポートする場合、タスク定義には、必要なアクセス権限を持つタスク IAM ロールが必要です。詳細については、「[OpenTelemetry 用 AWS Distro と Amazon Managed Service for Prometheus の統合に必要な IAM 許可](application-metrics-prometheus.md#application-metrics-prometheus-iam)」を参照してください。

1. (オプション) **[Tags]** (タグ) を展開します。タグをキーバリューペアとしてタスク定義に追加します。
   + [タグを追加] **[Add tag]** (タグを追加) を選択し、以下を実行します。
     + [**キー**] にはキー名を入力します。
     + [**値**] にキー値を入力します。
   + [タグの削除] タグの横にある [**タグの削除**] を選択します。

1. **[作成]** を選択してタスク定義を登録します。

------
#### [ Amazon ECS console JSON editor ]

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

1. ナビゲーションペインで、**タスクの定義** を選択します。

1. **[新しいタスク定義の作成]** メニューで、**[JSON で新しいタスク定義を作成する]** を選択します。

1. JSON エディタボックスで、JSON ファイルを編集し、

   JSON は、[JSON 検証](#json-validate-for-create) で指定された検証チェックに合格する必要があります。

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

------