

# 使用控制台创建 Amazon ECS 任务定义
<a name="create-task-definition"></a>

您可以创建任务定义，以便可以定义作为任务或服务运行的应用程序。

为外部启动类型创建任务定义时，需要使用 JSON 编辑器创建任务定义并将 `requireCapabilities` 参数设置为 `EXTERNAL`。

您可以通过使用控制台体验或指定 JSON 文件来创建任务定义。使用 JSON 编辑器时，您可以让 Amazon Q 提供建议。有关更多信息，请参阅 [使用 Amazon Q 开发者版在 Amazon ECS 控制台中提供任务定义建议](using-amazon-q.md)。

## JSON 验证
<a name="json-validate-for-create"></a>

Amazon ECS 控制台 JSON 编辑器会在 JSON 文件中验证以下各项：
+ 该文件是有效的 JSON 文件。
+ 该文件不包含任何无关的键。
+ 该文件包含 `familyName` 参数。
+ `containerDefinitions` 下方至少有一个条目。

## 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. 在导航窗格中，选择 **Task definitions**（任务定义）。

1. 在**创建新任务定义**菜单上，选择**创建新任务定义**。

1. 对于**Task definition family**（任务定义系列）中，为任务定义指定唯一名称。

1. 对于**启动类型**，选择应用程序环境。控制台默认值为 **AWS Fargate**（无服务器）。Amazon ECS 使用此值执行验证，以确保任务定义参数对基础设施类型有效。

1. 对于**操作系统/架构**，为任务选择操作系统和 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 值指定为 vCPU，内存指定为 GB。

   对于 Fargate 上托管的任务，下表显示了有效的 CPU 和内存组合。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/create-task-definition.html)

   对于使用 EC2 实例或外部实例的任务，支持的任务 CPU 值介于 128 个 CPU 单位（0.125 vCPU）和 196608 个 CPU 单位（192 vCPU）之间。

   要以 GB 为单位指定内存值，请在值的后面输入 **GB**。例如，要将**内存值**设置为 3GB，请输入 **3GB**。
**注意**  
Windows 容器将忽略任务级 CPU 和内存参数。

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 公开映像浏览馆注册表中的映像只能使用 Amazon ECR 公开注册表名称来指定。例如，如果 `public.ecr.aws/ecs/amazon-ecs-agent:latest` 已指定，则使用 Amazon ECR 公开映像浏览馆上托管的 Amazon Linux 容器。对于所有其他存储库，请使用 `repository-url/image:tag` 或 `repository-url/image@digest` 格式指定存储库。

   1. 如果您的映像位于 Amazon ECR 之外的私有注册表中，请在**私有注册表**下开启**私有注册表身份验证**。然后，在 **Secrets Manager ARN 或名称**中，输入密钥的 Amazon 资源名称（ARN）。

   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）的内存，因此，请不要为容器指定 6MiB 以下的内存。

        Docker 19.03.13-ce 或较早版本进程守护程序将为容器预留最少 4MiB 的内存，因此，请不要为容器指定 4MiB 以下的内存。
      + 对于**内存软限制**，输入要为容器预留的内存软限制（以 GB 为单位）。

        当系统内存处于争用状态时，Docker 会尝试将容器内存保持在此软限制范围内。如果您未指定任务级内存，则必须为**内存硬限制**和**内存软限制**中的一个或两个指定非零整数。如果同时指定两者，则**内存硬限制**必须大于**内存软限制**。

        Windows 容器不支持此功能。

   1. （可选）展开**环境变量**部分来指定要注入到容器中的环境变量。您可以使用键值对单独指定环境变量，也可以通过指定 Amazon S3 存储桶中托管的环境变量文件来批量指定环境变量。有关如何设置环境变量文件的格式的信息，请参阅[将单个环境变量传递给 Amazon ECS 容器](taskdef-envfiles.md)。

      当您为密钥存储指定环境变量时，请在**密钥**中输入密钥名称。然后，在 **ValueFrom** 中，输入 Systems Manager Parameter Store 密钥或 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/zh_cn/AmazonECS/latest/developerguide/create-task-definition.html)

   1. （可选）选择 **Add more containers**（添加更多容器）将其他容器添加到任务定义。

1. （可选）**存储**部分用于扩展 Fargate 上托管的任务的短暂存储量。您还可以使用此部分为任务添加数据卷配置。

   1. 要将可用的短暂存储扩展到超出您的 Fargate 任务的默认值 20 gibibytes (GiB)，请在 **Amount**（量）中输入一个最高为 200 GiB 的值。

1. （可选）要为任务定义添加数据卷配置，选择**添加卷**，然后按照以下步骤操作。

   1. 对于 **Volume name**（卷名称），输入数据卷的名称。创建容器挂载点时，将使用数据卷名称。

   1. 对于**卷配置**，请选择是要在创建任务定义时还是在部署期间配置卷。
**注意**  
可以在创建任务定义时配置的卷包括绑定挂载、Docker、Amazon EFS 和适用于 Windows File Server 的 Amazon FSx。运行任务或创建或更新服务时可以在部署时配置的卷包括 Amazon EBS。

   1. 对于**卷类型**，选择与所选配置类型兼容的卷类型，然后再配置该卷类型。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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 角色。有关更多信息，请参阅 [AWS Distro for OpenTelemetry 与 Amazon CloudWatch 集成所需的 IAM 权限](application-metrics-cloudwatch.md#application-metrics-cloudwatch-iam)。

   1. 当您选择 **Amazon Managed Service for Prometheus（Prometheus 库埋点）**时，您的任务级 CPU、内存、网络和存储指标以及自定义应用程序指标都将路由到 Amazon Managed Service for Prometheus。对于**工作空间远程写入端点**，为 Prometheus 工作空间输入远程写入端点 URL。对于**抓取目标**，输入 AWS Distro for OpenTelemetry 收集器可用来抓取指标数据的主机和端口。有关更多信息，请参阅 [将应用程序指标导出到 Amazon Managed Service for Prometheus](application-metrics-prometheus.md)。
**重要**  
将应用程序指标导出到 Amazon Managed Service for Prometheus 时，您的任务定义需要具有所需权限的任务 IAM 角色。有关更多信息，请参阅 [AWS Distro for OpenTelemetry 与 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。对于**工作空间远程写入端点**，为 Prometheus 工作空间输入远程写入端点 URL。有关更多信息，请参阅 [将应用程序指标导出到 Amazon Managed Service for Prometheus](application-metrics-prometheus.md)。
**重要**  
将应用程序指标导出到 Amazon Managed Service for Prometheus 时，您的任务定义需要具有所需权限的任务 IAM 角色。有关更多信息，请参阅 [AWS Distro for OpenTelemetry 与 Amazon Managed Service for Prometheus 集成所需的 IAM 权限](application-metrics-prometheus.md#application-metrics-prometheus-iam)。

1. （可选）展开**标签**部分将标签（作为键值对）添加到任务定义中。
   + [添加标签] 选择 **Add tag**（添加标签），然后执行以下操作：
     + 对于 **Key（键）**，输入键名称。
     + 对于**值**，输入键值。
   + [删除标签] 在标签旁，选择**删除标签**。

1. 选择**创建**以注册任务定义。

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

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择 **Task definitions**（任务定义）。

1. 在**创建新的任务定义**菜单上，选择**使用 JSON 创建新的任务定义**。

1. 在 JSON 编辑器框中，编辑您的 JSON 文件，

   JSON 必须通过 [JSON 验证](#json-validate-for-create) 中指定的验证检查。

1. 选择**创建**。

------