Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

更新服务

您可以更新正在运行的服务以更改该服务维护的任务数、任务使用哪个任务定义,如果您的任务使用的是 Fargate 启动类型,也可以更改服务使用的平台版本。如果您有需要更多容量的应用程序,则可以扩展服务。如果您有要缩减的未使用容量,则可以减少服务中的所需任务的数量并释放资源。

如果您已更新应用程序的 Docker 镜像,则可使用该镜像创建新的任务定义并将此定义部署到您的服务。

注意

如果您使用与服务的现有任务定义中的相同标记更新了 Docker 映像 (例如,my_image:latest),则无需创建任务定义的新版本。您可以使用以下过程更新服务,保留服务的当前设置,以及选择 Force new deployment (强制实施新部署)。由部署启动的新任务将在启动时,从存储库中提取当前映像/标记组合。在指定 LATEST 来更新 Fargate 以使用最新的平台版本时,也会使用 Force new deployment (强制实施新部署) 选项。例如,如果您指定了 LATEST 并且您正在运行的任务使用 1.0.0 平台版本,而您希望使用较新的平台版本重新启动时。

服务计划程序将使用最小正常百分比和最大百分比参数(在服务的部署配置中)确定部署策略。

如果服务使用滚动更新 (ECS) 部署类型,最小正常百分比以预期任务数的百分比形式表示部署期间必须保持在 RUNNING 状态的服务中的任务数的下限(向上取整到最近的整数)。如果服务包含使用 EC2 启动类型的任务,则在任何容器实例处于 DRAINING 状态时,此参数也适用。此参数使您不必使用额外的集群容量就能部署。例如,如果您的服务的预期任务数为 4,最小正常百分比为 50%,则计划程序可能在开始两个新任务之前停止两个现有任务以释放集群容量。服务任务的状态如果为 RUNNING,而且未使用负载均衡器,即为运行正常。如果使用负载均衡器的服务任务处于 RUNNING 状态,并且该负载均衡器将其报告为正常,则这些服务任务被视为正常。最小正常百分比的默认值为 100%。

如果服务使用滚动更新 (ECS) 部署类型,最大百分比参数以预期任务数的百分比形式表示部署期间允许处于 RUNNINGPENDING 状态的服务中的任务数的上限(向下取整到最近的整数)。如果服务包含使用 EC2 启动类型的任务,则在任何容器实例处于 DRAINING 状态时,此参数也适用。此参数使您能够定义部署批次大小。例如,如果您的服务的预期任务数为 4,最大百分比值为 200%,则计划程序可能在停止 4 个旧任务之前开始 4 个新任务。这样做的前提是具有执行此操作所需的集群资源。最大百分比的默认值为 200%。

如果服务使用蓝/绿 (CODE_DEPLOY) 部署类型和使用 EC2 启动类型的任务,最小正常百分比最大百分比值将设置为默认值。它们只用于定义在容器实例处于 DRAINING 状态时保持在 RUNNING 状态的服务中的任务数的下限和上限。如果服务中的任务使用 Fargate 启动类型,则不使用最小正常百分比和最大百分比值。目前,它们在描述您的服务时可见。

当服务计划程序在更新期间替换某个任务时,服务首先会从负载均衡器(如果使用了)中删除此任务并等待连接耗尽。然后,将向此任务中运行的容器发出 docker stop 的等效项。这将产生 SIGTERM 信号和 30 秒的超时,此后,将发送 SIGKILL 并强制停止容器。如果容器正常处理了 SIGTERM 信号并在收到信号后的 30 秒内退出,则不会发送任何 SIGKILL 信号。服务计划程序将启动并停止您的最小正常百分比和最大百分比设置定义的任务。

重要

如果要在任务定义中更改容器使用的端口,您可能需要更新容器实例安全组以使用更新后的端口。

如果您的服务使用一个负载均衡器,则无法更改创建该负载均衡器时为服务定义的负载均衡器配置。如果您更新服务的任务定义,则创建服务时指定的容器名称和容器端口必须保留在任务定义中。

要更改与服务负载均衡器配置关联的负载均衡器名称、容器名称或容器端口,您必须创建新服务。

Amazon ECS 不会自动更新与 Elastic Load Balancing 负载均衡器或 Amazon ECS 容器实例关联的安全组。

更新运行服务

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航栏上,选择集群所在的区域。

  3. 在导航窗格中,选择 Clusters

  4. 集群页面上,选择您的服务驻留的集群的名称。

  5. Cluster: name 页面上,选择 Services

  6. 选中要更新的服务左侧的框并选择 Update

  7. 配置服务页面上,您的服务信息已预先填充。更改任务定义、平台版本、部署配置或所需任务的数量 (或这些设置的任意组合),然后选择下一步

    注意

    要让服务使用新更新的 Docker 镜像以及与现有任务定义中相同的标签(例如,my_image:latest),或者保留服务的当前设置,请选择 Force new deployment (强制实施新部署)。由部署启动的新任务将在启动时,从存储库中提取当前映像/标记组合。在指定 LATEST 来更新 Fargate 以使用最新的平台版本时,也会使用 Force new deployment (强制实施新部署) 选项。例如,如果您指定了 LATEST 并且您正在运行的任务使用 1.0.0 平台版本,而您希望使用较新的平台版本重新启动时。

  8. Configure deployments (配置部署) 页面上,如果您的服务使用蓝/绿部署类型,则会预先填充您的服务部署的组件。确认以下设置。

    1. 对于 Application name (应用程序名称),选择您的服务属于的 CodeDeploy 应用程序。

    2. 对于 Deployment group name (部署组名称),选择您的服务属于的 CodeDeploy 部署组。

    3. 选择要作为服务部署的新修订的一部分执行的部署生命周期事件挂钩及关联的 Lambda 函数。可用的生命周期挂钩有:

      • BeforeInstall – 在创建替换任务集之前,使用此部署生命周期事件挂钩来调用 Lambda 函数。在此生命周期事件时运行的 Lambda 函数结果不会触发回滚。

      • AfterInstall – 在创建替换任务集之后,使用此部署生命周期事件挂钩来调用 Lambda 函数。在此生命周期事件时运行的 Lambda 函数结果会触发回滚。

      • BeforeAllowTraffic – 在生产流量重新路由到替换任务集之前,使用此部署生命周期事件挂钩来调用 Lambda 函数。在此生命周期事件时运行的 Lambda 函数结果会触发回滚。

      • AfterAllowTraffic – 在生产流量重新路由到替换任务集之后,使用此部署生命周期事件挂钩来调用 Lambda 函数。在此生命周期事件时运行的 Lambda 函数结果会触发回滚。

      有关生命周期挂钩的更多信息,请参阅 AWS CodeDeploy User Guide 中的 AppSpec“hooks”部分

  9. 选择下一步

  10. 配置网络页面上,您的网络信息已预先填充。在 Load balancing (负载均衡) 部分中,如果您的服务使用的是蓝/绿部署类型,请选择要与目标组关联的侦听器。更改运行状况检查宽限期 (如果需要),然后选择下一步

  11. (可选)您可使用服务 Auto Scaling 自动扩展和缩减服务以响应 CloudWatch 警报。

    1. Optional configurations (可选配置) 下,选择 Configure 服务 Auto Scaling (配置服务 Auto Scaling)

    2. 继续执行步骤 5:(可选)将服务配置为使用服务 Auto Scaling

    3. 完成该节中的步骤,然后返回。

  12. 选择 Update Service 以完成并更新服务。