亚马逊AWS官方博客

为 Amazon ECS 构建 Spinnaker 功能

Spinnaker 项目徽标。

在过去的一年里,AWS 容器服务一直在 Spinnaker 中提供 Amazon ECS 支持,Spinnaker 是一款流行的云端持续交付平台。Spinnaker 最初是 Netflix 在 2015 年推出的一个开源平台,现已成为一款卓越的 CI/CD 解决方案,可帮助客户在多个平台对部署流程进行标准化,还可与 Jenkins 或 TravisCI 等现有工具进行集成。

2018 年初,Lookout 和其他社区成员通过管道将容器映像部署到了 Amazon ECS,这使得通过 Spinnaker 部署到 Amazon ECS 成为可能。当年晚些时候,Amazon ECS 团队开始探索各种开源工具(包括 Spinnaker),以发现可以在哪些方面提供帮助,改进与 ECS 的开源集成。我们与 Spinnaker 社区积极沟通,并开始询问我们的客户他们希望在与 Spinnaker 的 ECS 集成中实现何种功能。客户告诉我们,他们需要功能更全面的体验,就像直接部署到 Amazon ECS 时可执行的操作那样。例如,一些客户提到,希望在 AWS Fargate 上部署他们的 Amazon ECS 服务,但是还不能从 Spinnaker 管道配置所需的设置。一些客户还希望服务运行方式更加灵活,例如不使用负载均衡器,或者使用放置约束,这些选项或是缺失,或是在当时使用硬编码值。

AWS 首席软件工程师 Clare Liguori 是 Amazon ECS 团队成员,他从 2018 年 8 月开始着手解决其中的一些缺陷。从那时起,我们通过 5 个 Spinnaker 存储库提交了 50 多个 pull 请求,添加了对 AWS Fargate、AWS Cloud Map 服务发现资源标记和任务放置约束等服务功能的支持。

我们还通过使用任务定义构件,添加了对所有任务定义字段和多容器应用程序的支持。此功能尤其令人兴奋,因为它使客户能够完全控制任务定义的内容,并且更轻松地自动部署新配置。例如,现在可以在 GitHub 中将任务定义存储为 JSON 文件,并将 Spinnaker 管道设置为在对该存储库进行更改时触发。这意味着,当编辑任务定义(例如,增加一个容器的内存限制)并推送此更改时,Spinnaker 管道会自动启动一个新部署,以将此更改应用于 ECS 服务! 此外,还可以在任务定义中定义多达 10 个容器,而在管道配置中只能定义一个容器。

使用文件存储任务定义还意味着,启动新 Amazon ECS 功能与在 Spinnaker 中使用这些功能之间的时间间隔将大大缩短。在此之前,100 多个可用的任务定义属性中,只有约 25% 可在 Spinnaker 中配置,而且随着新功能的发布,可能会添加新属性。为每个新字段和现有字段单独构建支持将在客户和他们使用这些功能之间投入大量的时间和实施大量的工程工作。通过将任务定义作为文件存储和检索,所有 Spinnaker 维护人员只需升级 AWS SDK 版本即可,且客户可以开始向任务定义添加新功能,并将其部署到 Amazon ECS 服务。

在这些贡献下,客户现在可以利用所有受支持的任务定义属性,更快地采用新功能,在 EC2 或 AWS Fargate 上运行 Amazon ECS 服务,以及利用各种服务选项,所有这些都可以在现有的 Spinnaker 管道中实现。

目前的工作

我们仍在努力将所有 Amazon ECS 服务功能引入 Spinnaker,包括最近推出的对每个服务多个目标组的支持,以及现有的计划选项,如守护程序集和自定义放置策略。

但我们也意识到,除了添加缺少的服务功能之外,还有更多的工作要做。随着越来越多的客户在 Spinnaker 中试用 ECS 提供程序,我们已经意识到我们需要支持更多客户,使用更多的资源,并解决间歇性问题,比如争用状况和缓存效率低下,随着服务的增加,这些问题将会产生更大的影响。因此,我们将在性能增强方面进行投资,使 Amazon ECS 客户能够更轻松地根据应用程序需求扩展 Spinnake 托管的服务。

最后,与客户和更大的 Spinnaker 社区的合作仍是一项必不可少的工作。为了确保我们的工作与社区的优先级保持一致,我们与 ArmoryNetflix 合作,成立了 Spinnaker AWS 特殊兴趣组 (SIG)。AWS SIG 的目标是分享开展中工作的更新,并为社区提供另一个进行提问、提供反馈和观看新功能演示的渠道。AWS SIG 每月在 Google Hangouts 上召开一次会议,欢迎参加! 我们的团队将利用这些会议作为论坛,讨论 Spinnaker 路线图上的 Amazon ECS,并根据客户需求对所做的贡献进行优先级排序。

欢迎参加!

Amazon ECS 对 Spinnaker 的支持完全由客户驱动。如果您已在使用 Spinnaker 部署到 Amazon ECS,并希望与我们合作开发新功能,请加入我们的 Slack #ecs,并告诉我们您眼下的工作! 我们还欢迎通过 GitHub 问题提出功能请求、提供错误报告或其他反馈。非常感谢所有的 Spinnaker 社区成员,他们已经帮助 Amazon ECS 提供程序实现了当今的成就!

如果您是初次接触 Spinnaker 或 ECS,但有兴趣进行尝试,请查看 AWS 快速入门指南和 Amazon ECS 设置文档以开始使用。