

# Amazon ECS 独立任务
<a name="standalone-tasks"></a>

如果您具有执行某些工作然后再停止（例如批处理进程）的应用程序，则您可以将应用程序作为任务运行。如果您想运行一次任务，则可以使用控制台、AWS CLI、API 或 SDK。

如果您需要按基于费率、基于 cron 的计划或一次性计划运行应用程序，则可以使用 EventBridge 计划程序创建计划。

## 任务工作流程
<a name="task-workflow"></a>

当您启动 Amazon ECS 任务（独立任务或 Amazon ECS 服务执行的任务）时，会创建一项任务且最初会将其移至 `PROVISIONING` 状态。当任务处于 `PROVISIONING` 状态时，任务和容器都不存在，因为 Amazon ECS 需要找到用于放置任务的计算容量。

Amazon ECS 会根据您的启动类型或容量提供程序配置为您的任务选择合适的计算容量。您可以在 Fargate 和 EC2 中使用容量提供程序和容量提供程序策略。使用 Fargate，您不必考虑集群容量的预调配、配置和扩展。Fargate 负责您的任务的所有基础设施管理。对于 EC2，您可以通过将 Amazon EC2 实例注册到集群来管理集群容量，也可以使用集群自动扩缩来简化计算容量管理。集群自动扩缩负责动态扩展集群容量，以便您可以专注于正在运行的任务。Amazon ECS 根据您在任务定义中指定的要求（例如 CPU 和内存）以及您的放置约束和策略确定将任务放置在何处。有关更多信息，请参阅[Amazon ECS 如何将任务放置在容器实例上](task-placement.md)。

如果您使用启用了托管式扩缩的容量提供程序，则由于缺乏计算容量而无法启动的任务将移至 `PROVISIONING` 状态，而不是立即失败。找到放置任务的容量后，Amazon ECS 会预调配必要的附件（例如，`awsvpc` 模式下任务的弹性网络接口（ENI））。它使用 Amazon ECS 容器代理提取您的容器映像，然后再启动您的容器。预调配完成且相关容器启动后，Amazon ECS 会将任务移至 `RUNNING` 状态。有关任务状态的信息，请参阅 [Amazon ECS 任务生命周期](task-lifecycle-explanation.md)。

# 将应用程序作为 Amazon ECS 任务运行
<a name="standalone-task-create"></a>

您可以使用 AWS 管理控制台 为一次性过程创建任务。

**要创建独立任务（AWS 管理控制台）**

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

1. Amazon ECS 控制台允许您通过集群详细信息页面或任务定义修订列表创建独立任务。根据您选择的资源页面，使用以下步骤来创建您的独立任务。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/standalone-task-create.html)

1. 对于**现有集群**，选择该集群。

   选择**创建集群**，以在新集群上运行该任务

1. 选择任务在集群基础设施中的分发方式。在**计算配置**下，选择您的选项。要使用容量提供程序策略，您必须在集群级别配置容量提供程序。

   如果您尚未将集群配置为使用容量提供程序，则请改用启动类型。

   如果要在 Amazon ECS 托管实例上运行工作负载，则必须使用容量提供程序策略选项。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/standalone-task-create.html)

1. 在**部署配置**下，执行以下操作：

   1. 对于**任务定义**，输入该任务定义。
**重要**  
控制台验证选择内容，确保所选任务定义系列和修订版与定义的计算配置兼容。

   1. 对于 **Desired tasks**（预期任务），请输入要启动的任务数量。

   1. 对于**任务组**，键入任务组名称。

1. 如果您的任务定义使用 `awsvpc` 网络模式，请展开 **Networking**（联网）。使用以下步骤指定自定义配置。

   1. 对于 **VPC**，选择要使用的 VPC。

   1. 对于 **Subnets**（子网），选择 VPC 中的一个或多个子网，任务计划程序在放置任务时会考虑这些子网。

   1. 对于**安全组**，您可以选择现有安全组或创建新安全组。要使用现有安全组，请选择该安全组并移至下一步。要创建新安全组，请选择**创建新安全组**。您必须指定安全组名称、说明，然后为该安全组添加一个或多个入站规则。

   1. 对于**公有 IP**，选择是否向任务的弹性网络接口（ENI）自动分配公有 IP 地址。

      在公有子网中运行时，可以为 AWS Fargate 任务分配一个公有 IP 地址，以便它们具有通往互联网的路由。无法使用此字段为 EC2 任务分配公有 IP。有关更多信息，请参阅 [Fargate 的 Amazon ECS 任务联网选项](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-networking.html)和[为 Amazon ECS 任务分配网络接口](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking-awsvpc.html)。

1. 如果您的任务使用的数据卷与部署时的配置兼容，则可以通过扩展**卷**来配置该卷。

   卷名称和卷类型在创建任务定义修订时配置，在运行独立任务时无法更改。要更新卷名称和类型，您必须创建新的任务定义修订并使用新修订运行任务。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/standalone-task-create.html)

1. （可选）要使用默认策略之外的其他任务放置策略，请展开 **Task Placement**（任务放置），然后从以下选项中进行选择。

    有关更多信息，请参阅 [Amazon ECS 如何将任务放置在容器实例上](task-placement.md)。
   + **AZ 均衡分散** – 在各个可用区以及每个可用区中的各个容器实例中分配任务。
   + **AZ 均衡装填** – 在各个可用区以及具有最低可用内存的容器实例中分配任务。
   + **装填** – 根据 CPU 或内存的最低可用量来分配任务。
   + **每个主机一项任务** – 在每个容器实例中最多可放置服务的一个任务。
   + **自定义** – 定义您自己的任务放置策略。

   如果您选择了 **Custom**（自定义），请定义放置任务的算法和任务放置过程中要考虑的规则。
   + 在 **Strategy**（策略）下，对于 **Type**（类型）和 **Field**（字段），选择算法和用于该算法的实体。

     您最多可输入 5 个策略。
   + 在**约束**下，对于**类型**和**表达式**，选择要用于该约束的规则和属性。

     例如，要设置在 T2 实例上放置任务的约束，对于 **Expression**（表达式），输入 **attribute:ecs.instance-type =\$1 t2.\$1**。

     您最多可输入 10 个约束。

1. （可选）要覆盖任务定义中定义的任务 IAM 角色或任务执行角色，请展开 **Task overrides**（任务覆盖），然后完成以下步骤：

   1. 对于**任务角色**，请选择此任务的 IAM 角色。有关更多信息，请参阅 [Amazon ECS 任务 IAM 角色](task-iam-roles.md)。

      此处只显示具有 `ecs-tasks.amazonaws.com` 信任关系的角色。有关如何为任务创建 IAM 角色的说明，请参阅 [创建任务 IAM 角色](task-iam-roles.md#create_task_iam_policy_and_role)。

   1. 对于**任务执行角色**，请选择任务执行角色。有关更多信息，请参阅 [Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md)。

1. （可选）要覆盖容器命令和环境变量，请展开 **Container Overrides**（容器覆盖），然后展开容器。
   +  要向容器发送任务定义命令以外的命令，请在**命令覆盖**中输入 Docker 命令。
   + 要添加环境变量，请选择 **Add Environment Variable**（添加环境变量）。对于 **Key**，键入您的环境变量名称。对于**值**，输入环境值的字符串值，不使用双引号（`" "`）。

     AWS 用双引号（" "）括起字符串，并按以下格式将字符串传递给容器：

     ```
     MY_ENV_VAR="This variable contains a string."
     ```

1. （可选）为了帮助识别您的任务，请展开**标签**部分，然后配置您的标签。

   要让 Amazon ECS 使用集群名称和任务定义标签自动标记全部新启动的任务，选择 **Turn on Amazon ECS managed tags**（启用 Amazon ECS 托管标签），然后选择 **Task definitions**（任务定义）。

   添加或删除标签。
   + [添加标签] 选择 **Add tag**（添加标签），然后执行以下操作：
     + 对于 **Key（键）**，输入键名称。
     + 对于**值**，输入键值。
   + [删除标签] 在标签旁，选择**删除标签**。

1. 选择**创建**。

# 使用 Amazon EventBridge 调度器计划 Amazon ECS 任务
<a name="tasks-scheduled-eventbridge-scheduler"></a>

EventBridge 调度器是一个无服务器调度器，使您能够从一个中央托管服务创建、运行和管理任务。它提供独立于事件总线和规则的一次性和重复性计划功能。EventBridge Scheduler 具有高度可定制性，与 EventBridge 计划规则相比，可扩展性更高，目标 API 操作和 AWS 服务范围更广。EventBridge Scheduler 提供以下计划，您可以在 EventBridge Scheduler 控制台中为您的任务配置这些计划：
+ 基于速率 
+ 基于 Cron

  您可以在任何时区配置基于 cron 的计划。
+ 一次性计划

  您可以在任何时区配置一次性的计划。

您可以使用 Amazon EventBridge 调度器计划 Amazon ECS。

尽管您可以在 Amazon ECS 控制台中创建计划任务，但目前 EventBridge 调度器控制台提供了更多功能。

在计划任务之前，完成以下步骤：

1. 使用 VPC 控制台，获取任务运行所在的子网 ID 和子网的安全组 ID。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [VPC 的子网](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html)和[使用安全组控制指向 AWS 资源的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)。

1. 配置 EventBridge Scheduler 执行角色。有关更多信息，请参阅《Amazon EventBridge 调度器用户指南》**中的[设置执行角色](https://docs.aws.amazon.com/scheduler/latest/UserGuide/setting-up.html#setting-up-execution-role)。

1. 如果要使用容量提供程序策略来运行任务，则必须拥有与集群关联的容量提供程序。

**要使用控制台创建新计划**

1. 打开 Amazon EventBridge 调度器控制台，网址为：[https://console.aws.amazon.com/scheduler/home](https://console.aws.amazon.com/scheduler/home/)。

1.  在**计划**页面，选择**创建计划**。

1.  在**指定计划详细信息**页面，在**计划名称和描述**部分中，执行以下操作：

   1. 对于**计划名称**，输入计划的名称。例如 **MyTestSchedule**。

   1. （可选）对于**描述**，输入对计划的描述。例如 **TestSchedule**。

   1. 对于**计划组**，请选择一个计划组。如果您没有计划组，选择**默认**。要创建计划组，选择**创建自己的计划**。

      您可以使用计划组将标签添加到计划组。

1. 选择计划选项。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/tasks-scheduled-eventbridge-scheduler.html)

1. （可选）如果您在上一步中选择**定期计划**，在**时间范围**部分，请执行以下操作：

   1. 对于**时区**，请选择时区。

   1. 对于**开始日期和时间**，请输入 `YYYY/MM/DD` 格式的有效日期，然后指定 24 小时 `hh:mm` 格式的时间戳。

   1. 对于**结束日期和时间**，请输入 `YYYY/MM/DD` 格式的有效日期，然后指定 24 小时 `hh:mm` 格式的时间戳。

1. 选择**下一步**。

1. 在**选择目标**页面上，执行以下操作：

   1. 选择**所有 API**，然后在搜索框中输入 **ECS**。

   1. 选择 **Amazon ECS**。

   1. 在搜索框中输入 **RunTask**，然后选择 **RunTask**。

   1. 对于 **Cluster**，选择集群。

   1. 对于 **ECS 任务**，请选择要用于任务的任务定义。

   1. 选择任务在集群基础设施中的分发方式。展开**计算选项**，然后选择以下选项之一    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/tasks-scheduled-eventbridge-scheduler.html)

   1. 对于**子网**，请输入要在其中运行任务的子网 ID。

   1. 对于**安全组**，请输入子网的安全组 ID。

   1. （可选）要使用默认策略之外的其他任务放置策略，请展开**置放约束**，然后输入约束。

       有关更多信息，请参阅 [Amazon ECS 如何将任务放置在容器实例上](task-placement.md)。

   1. （可选）为了帮助识别您的任务，请在**标签**下配置您的标签。

      要让 Amazon ECS 使用任务定义标签自动标记全部新启动的任务，选择**启用 Amazon ECS 托管标签**。

1. 选择**下一步**。

1. 在**设置**页面上，执行以下操作：

   1. 要打开计划，在**计划状态**下，切换**启用计划**。

   1. 要为计划配置重试策略，在**重试策略和死信队列（DLQ）**下，请执行以下操作：
      + 切换**重试**。
      + 对于**事件的最长保留时间**，输入 EventBridge Scheduler 器必须保留未处理事件的最长**小时**和**分钟**数。
      + 最长时间为 24 小时。
      + 对于**最大重试次数**，输入在目标返回错误的情况下，EventBridge  调度器重试计划的最大次数。

         最大值为 185 次重试。

      配置重试策略后，如果计划未能调用其目标，EventBridge 调度器将重新运行该计划。如果已配置，则必须为计划设置最长保留时间和最大重试次数。

   1. 选择 EventBridge 调度器存储未送达事件的位置。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/tasks-scheduled-eventbridge-scheduler.html)

   1. 要使用客户托管密钥加密目标输入，在**加密**下，选择**自定义加密设置（高级）**。

      如果选择此选项，请输入现有的 KMS 密钥 ARN 或选择**创建一个 AWS KMS key** 以导航到 AWS KMS 控制台。有关 EventBridge 调度器如何加密静态数据的更多信息，请参阅 *Amazon EventBridge 调度器用户指南* 中的 [静态加密](https://docs.aws.amazon.com/scheduler/latest/UserGuide/encryption-rest.html)。

   1. 对于**权限**，选择**使用现有角色**，然后选择角色。

      要让 EventBridge 调度器为您创建新的执行角色，请选择**为此计划创建新角色**。然后，在**角色名称**中输入名称。如果您选择此选项，EventBridge 调度器会将模板化目标所需的必要权限附加到该角色。

1. 选择**下一步**。

1.  在**查看并创建计划**页面上，查看计划的详细信息。在每个部分中，选择**编辑**返回到该步骤并编辑其详细信息。

1. 选择**创建计划**。

   您可以在**计划**页面上查看新的和现有的计划列表。在**状态**列下，验证新计划是否**已启用**。

## 后续步骤
<a name="eventbridge-scheduler-next-steps"></a>

您可以使用 EventBridge Scheduler 控制台或 AWS CLI 来管理计划。有关更多信息，请参阅《Amazon EventBridge 调度器用户指南》**中的[管理计划](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-schedule.html)。

# 停止 Amazon ECS 任务
<a name="standalone-task-stop"></a>

如果您不再需要保持独立任务的运行状态，则可以停止该任务。Amazon ECS 控制台可以轻松停止一项或多项任务。

无法重启已停止的独立实例。

如果您想停止服务，请参阅[使用控制台删除 Amazon ECS 服务](delete-service-v2.md)。

**要停止独立任务（AWS 管理控制台）**

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

1. 在导航窗格中，选择**集群**。

1. 在**集群**页面上，选择要导航到集群详细信息页面的集群。

1. 在集群详细信息页面上，选择**任务**选项卡。

1. 您可以使用**筛选启动类型**列表按启动类型筛选任务。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/standalone-task-stop.html)