利用 亚马逊云科技 Fargate 任务停用通知提高运营可见度

简介

用于容器化工作负载的无服务器计算引擎 亚马逊云科技 Fargat e 消除了保护和修补底层基础设施的无差别繁重工作。在这篇博客文章中,我们深入探讨了 亚马逊云科技 Fargate 任务停 用 ,这是 亚马逊云科技 保持基础设施安全和最新的方式之一。

亚马逊云科技 最近更新了 亚马逊云科技 Fargate 任务停用流程,整合了 客户收到的有关即将停用的 通知 ,并推出了一种机制,允许客户控制 从收到 通知到任务停用之间的时间 。 在这篇文章中,我们将更详细地探讨这些变化,并举例说明如何使用这些通知来实现 卓越 运营

背景

在 亚马逊云科技 Fargate 上部署 亚马逊弹性容器服务 (Amazon ECS) 任务时,会在 亚马逊 ECS 服务 或独立任务 API 调 用中指定 平台版本 。 平台版本是指主机操作系统的运行时环境,即内核和容器运行时的组合。在平台版本中,有一个称为平台版本修订版的内部结构。平台版本版本是不可变的,会随着运行环境的发展而发布,例如,如果有内核错误修复或安全更新。每次在 亚马逊云科技 Fargate 上安排新任务时,它都会在指定平台版本的最新修订版上启动。

随着时间的推移,亚马逊云科技 可能会决定需要停用支持正在运行的任务的现有平台版本修订。修订版停用后,亚马逊云科技 Fargate 将停止在该修订版上运行的所有任务。可能需要停用修订版的原因有很多,包括安全漏洞和性能改进。过去,亚马逊云科技 Fargate 每月停用一到两个平台版本修订,但是没有针对特定平台版本修订的固定支持期。由于平台版本修订版的生命周期通常较长,因此与任务运行多周的客户相比,工作负载较短的客户遇到的任务停用次数要少得多。

platform_version_revision_lifecycle

上图显示了 亚马逊云科技 Fargate 平台版本修订版的完整生命周期。新的平台版本修订版启动后,所有新任务都将安排在此修订版中。已经计划并正在运行的现有任务将在任务期间保留在原来的版本上,并且不会迁移到新修订版。如果任务被替换,例如在 ECS 服务 更新 或 亚马逊云科技 Fargate 任务停用期间,则新任务将改为启动时可用的最新平台版本版本。

任务停用

下图显示了 亚马逊云科技 Fargate 任务停用的端到端流程。

task_retirement_process

当 亚马逊云科技 将平台版本修订版标记为需要停用时,我们会识别所有 亚马逊云科技 区域在该平台版本修订版上运行的所有任务。然后,我们会向每个地区的每个账户发送一条通知,重点说明受影响的任务或服务以及退出的开始日期。该通知通过电子邮件发送给 亚马逊云科技 账户的主要电邮联系人以及 亚马逊云科技 Healt h Dash board 。发送到 亚马逊云科技 Health 控制面板的通知可以通过 亚马逊 Ev ent Bridge 转发 到 亚马逊云科技 服务或第三方工具

发送通知后,如果客户想要控制 亚马逊云科技 Fargate 启动自动任务停用流程之前的确切时间,则他们需要一段时间(称为任务停用等待期)采取手动措施。当 亚马逊云科技 Fargate 停止某项任务时,如果该任务是 ECS 服务的一部分,则该任务将按照该服务的 min im umHealthyPercent 值停止。对于 独立任务 ,客户有责任监控正在运行的任务的状态并开始替换。

为了最大限度地减少 亚马逊云科技 Fargate 任务停用的影响,应按 照 Amazon EC S 最佳实践部署工作负载。 例如,将无状态应用程序部署为 Amazon ECS 服务(例如 Web 或 API 服务器)时,客户应部署多个任务副本并将 min imumHealth yPercent 设置为 100%。因此,当 亚马逊云科技 Fargate 开始停用任务时,Amazon ECS 将首先安排一个新任务并等待其 运行 ,然后再停用旧任务。

有关任务停用流程的更多信息,请参阅 亚马逊云科技 Fargate 文档

任务停用等待期

任务停用等待期的时长现在可以由新的 亚马逊 ECS 账户设置 Far gateTaskRetirementWaitPerio d 来控制。在 亚马逊云科技 Fargate 停止任务以停用任务之前,客户可以利用任务停用等待期按自己的计划停止任务,例如,如果他们的工作负载只能在特定窗口中停止。

任务停用等待期可以配置为下表中设置的时间间隔之一。我们建议尽可能缩短等待期,以便更快地获得新的平台版本修订版。

Days Action
0 亚马逊云科技 sends the notification and immediately starts to retire affected tasks.
7 亚马逊云科技 sends the notification and waits 7 calendar days before starting to retire affected tasks.
14 亚马逊云科技 sends the notification and waits 14 calendar days before starting to retire affected tasks.

在罕见的关键安全更新的情况下,亚马逊云科技 Fargate 可能会覆盖此任务停用等待期,发送任务停用通知并立即停用受影响的任务。 反映了将 FargateTas k RetirementWaitPeriod 设置为 0 的效果。

可以使用 aws ecs list-account-s ettings 命令查看现有的 fargateTaskRetirementWait period 值。

$ aws ecs list-account-settings \
    --name fargateTaskRetirementWaitPeriod \
    --effective-settings
{
    "settings": [
        {
            "name": " fargateTaskRetirementWaitPeriod",
            "value": "14",
            "principalArn": "arn:aws:iam::123456789012:root"
        }
    ]
}

FargateTaskRetirementWait Period 可以使用 aws ecs put-account-setting-default 命令进行

$ aws ecs put-account-setting-default \
    --name fargateTaskRetirementWaitPeriod \
    --value 14

有关任务停用等待时间的更多信息,请参阅任务停用 和 Amazon ECS 账户设置 文档。

解决方案概述:捕获任务停用通知

当任务即将停用时,亚马逊云科技 会向 亚马逊云科技 Healt h D ashboard 和 亚马逊云科技 账户的主要电子邮件联系人发送任务停用通知 。亚马逊云科技 Health Dashboard 提供了与其他 亚马逊云科技 服务的许多集成, 包括亚马逊 EventBridge 。通过利用 Amazon EventBridge,客户可以根据任务停用通知实现自动化,例如通过将消息转发到 ChatOps 工具来提高对即将到来的退役的知名度。

亚马逊云科技 Health Aw are 是展示 亚马逊云科技 Health Dashboard 的强大功能以及如何在整个组织中分配通知的绝佳资源。在本演练中,我们从该项目中汲取灵感,并将任务停用通知转发到聊天应用程序 Slack。这些通知由 EventBridge 规则捕获,该规则查找的事件详细信息类型 为 “AWS 健康事件” , 事件详细信息类型代码为 “AWS _ECS_TASK_PATCHING_RETIREM EN T”。 规则捕获通知后,它将触发一个 亚马逊云科技 L am bda 函数,该函数解析受影响资源的事件并将其转发到 Slack Incoming Webhook。

下图显示了该解决方案的高级架构。

task_retirement_notifications_walkthrough_architecture

先决条件

要完成演练,需要满足以下先决条件:

  • 安装并启用了 传入 Webhook Slack 应用程序的现有 Slac k 工作区。
  • 具有部署亚马逊 EventBridge 规则和 亚马逊云科技 Lambda 函数的相关权限的 亚马逊云科技 账户。
  • 在本地开发工作站上 安装和配置了 亚马逊云科技 SAM CLI

解决方案演练

  1. 演练的示例代码存储在 GitHub 存储库 中。本演练的第一步是将存储库克隆到本地开发工作站。
$ git clone https://github.com/aws-samples/capturing-aws-fargate-task-retirement-notifications.git
$ cd capturing-aws-fargate-task-retirement-notifications
  1. 接下来,我们将构建和部署 Lambda 函数以及在 AWS SAM 模板 cloudformation.yaml 中定义的 EventBridge 规则。 请注意,你需要在部署向导中输入参数,包括你的 Slack 工作空间 URI 和 Slack 频道。
$ sam build --template cloudformation.yaml 
$ sam deploy --guided
Configuring SAM deploy
======================

     Looking for config file [samconfig.toml] :  Not found

    Setting default arguments for 'sam deploy'
    =========================================
    Stack Name [sam-app]: FargateTaskRetirementNotifications
    AWS Region [eu-west-1]: eu-west-1
    Parameter SlackWorkspaceURL []: https://hooks.slack.com/services/workspace/app/token
    Parameter SlackChannel []: platform-eng
    #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
    Confirm changes before deploy [y/N]: y
    #SAM needs permission to be able to create roles to connect to the resources in your template
    Allow SAM CLI IAM role creation [Y/n]:        
    #Preserves the state of previously provisioned resources when an operation fails
    Disable rollback [y/N]: 
    Save arguments to configuration file [Y/n]: 
    SAM configuration file [samconfig.toml]: 
    SAM configuration environment [default]:
  1. 测试一下!在这里,我们向亚马逊 EventBridge 发送了两个示例事件,以确保一切正常运行。由于我们无法模拟 亚马逊云科技 运行状况通知,因此我们将通过创建与 EventBridge 规则匹配的 EventBridge 事件来触发工作流程。示例存储库中有两个事件,一个用于连接到 Amazon ECS 服务的任务,另一个用于独立任务。
$ aws events put-events --entries file://sample_service_event.json
$ aws events put-events --entries file://sample_task_event.json
  1. 在你的 Slack 工作区中,你现在应该看到两条 Slack 通知,每个测试事件对应一个。

task_retirement_slack_1

task_retirement_slack_2

清理

要清理示例演练,请使用 亚马逊云科技 SAM CLI 删除 $ sam CLI 删除 CloudFormation 堆栈 。

结论

在这篇博客文章中,我们深入探讨了 亚马逊云科技 Fargate 任务停用流程。我们已经展示了如果客户想要控制从收到通知到停用之间的时间,可以如何调整任务停用等待期。最后,我们展示了客户如何使用亚马逊 EventBridge 和 亚马逊云科技 Lambda 捕获任务停用通知。要了解有关 亚马逊云科技 Fargate 任务停用的更多信息,请参阅 A WS Far gate 文档

Olly Pomeroy

Olly Pomeroy

Olly 是亚马逊网络服务的开发者倡导者。他是容器团队的一员,负责开发 亚马逊云科技 Fargate、容器运行时和容器相关项目。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。