我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
CyberArk 如何使用 亚马逊云科技 应用程序配置实现功能标志
由 CyberA
功能标志是一个强大的工具,允许您更改软件行为。此外,功能标志可以通过启用 A/B 测试等功能来改善您的 CI/CD 管道,从而使其成为 DevOps 的推动者以及任何 CI/CD 管道的关键部分。但是,如果操作不正确,功能标记可能会变得复杂,因此需要最佳实践和适当的工具。
在这篇博客文章中,你将了解
虽然示例描述了 Lambda 函数的实现,但其他 SaaS 实现,例如弹性计算云 (Amazon EC2) 和基于容器的解决方案,也可以使用提议的解决方案。
业务挑战
CyberArk 是身份安全领域的全球领导者。它成立于1999年,目前在全球拥有2700多名员工。近年来,CyberArk产品主要侧重于SaaS和云原生解决方案。
CyberArk 服务开发新功能,为其客户提供更好的价值。CyberArk 的 SaaS 服务使用配置来定义其在运行时的行为。常见的做法是使用环境变量或静态配置文件来定义服务行为。功能标志是服务配置的子集。但是,由于静态配置的静态性质,只能通过使用新的配置值重新部署服务来更改静态配置。此过程需要时间才能完成服务 CI/CD 管道,这降低了公司快速进行更改的灵活性。需要一种更快、更有活力的方法。
在生产环境中发布和部署新功能的过程带来了几项挑战:
- 如何在不重新部署服务的情况下更改服务行为
- 如何建立自动功能标志发布流程。
- 如何增强对功能质量和功能发布过程的信心。
- 在出现生产错误的情况下,如何回滚/快速禁用停机时间为零的功能。
提议的解决方案将为这些挑战提供答案,但首先,让我们回顾一下解决方案需求。
CyberArk 的功能标志解决方案要求
所选功能标志解决方案必须:
- 提供应用程序编程接口 (API) 以按名称获取功能标志。
- 支持功能 A/B 测试——为某些客户启用功能但为其他客户禁用这些功能——为不同的客户和用户(管理员用户与非管理员等)提供不同的体验。
- 即使有大量功能标志,也能保持高性能。
- 完全托管,高度可用,并支持自动扩展。
- 支持以金丝雀方式部署新配置,并在出现错误时自动回滚。
- 获得 FedRAMP 高级澳大利亚税务局认证。
解决方案概述
解决方案概述可以分为四个部分:
- 如何开发和编写功能标志配置。
- 如何存储和部署功能标志。
- 如何在运行时评估功能标志。
- 定义功能标志最佳实践。
功能标志解决方案使用存储在 亚马逊云科技 AppConfig 中的 JSON 配置文件,这些文件使用专用 CI/CD 管道(作为动态配置)进行部署,并由服务在运行时使用 亚马逊云科技 Lambda Powertools 功能标记实用程序进行评估。
亚马逊云科技 AppConfig 提供 3 到 6 的解决方案需求,而 亚马逊云科技 Lambda Powertools 则提供第 1 和第 2 项需求。
亚马逊云科技 Lambda Powertools 功能标志实用程序可用于其他非基于 亚马逊云科技 Lambda 函数的服务。

图 1。解释了 亚马逊云科技 Lambda、AppConfig 和 CI/CD 管道之间通信的示意图。
如何开发和编写功能标志
在深入研究解决方案细节之前,让我们首先了解如何定义和存储功能标志配置。
功能标志会改变服务行为,功能标志的天真实现可能如下所示:
当 feature_flag 变量被评估为 “真” 时,代码将调用 handle_new_feature_logic () 并运行新的业务逻辑。但是,当它被评估为 “错误” 时,常规业务将正常运行。本质上,更改功能标志评估值将改变服务行为。
静态配置还不够好
更改服务行为简化为更改配置。
定义此类配置的一种常见方法是使用静态配置:配置文件(例如,JSON 文件)或与服务捆绑在一起的环境变量。虽然易于实现,但主要缺点是,对于任何服务行为更改,即配置更改,都需要完整的服务重新部署/代码推送。此类操作会触发服务 CI/CD 管道,这可能需要大量时间。

图 2。该图显示了 CI/CD 管道如何推送静态配置数据,这可能需要很多时间。
另一方面,动态配置允许快速进行更改。

图 3。该图显示了动态配置,可以在运行时更新,速度要快得多。
专用管道比服务管道快得多,因为除了将新配置部署到 亚马逊云科技 之外,它的逻辑为零。
此外,无需重新部署服务。该服务在运行时通过 API 调用获取配置,并根据配置行事。部署新的配置版本时,该服务将获取新配置并更改其行为。
如何存储和部署功能标志
CyberArk 服务使用与主服务管道分开的专用的 CI/CD 管道,该管道获取 JSON 配置文件并将其作为 亚马逊云科技 AppConfig 配置部署到 亚马逊云科技。这是在 AppConfig
每项服务都被定义为 亚马逊云科技 AppConfig 应用程序,每个账户(“开发”、“测试”、“生产”)都被定义为 AppConfig 环境。每项服务都定义一个配置,但这要由服务团队来决定。一项服务可以由多个微服务组成,每个微服务在 “主” 服务 AppConfig 应用程序下都有不同的配置。
专用配置 CI/CD 管道利用了 亚马逊云科技 AppConfig 功能,例如:
- 架构验证器-防止上传会在运行时中断服务的格式错误的配置。
-
Canary 部署 新配置 - 如果触发 亚马逊云科技 CloudWatch 警报,则 在
配置部署 期间自动回滚。 - 配置版本控制 — 每个配置都有一个版本,亚马逊云科技 AppConfig 提供所有先前版本的可见性。
如何评估功能标志
亚马逊云科技 Lambda Powertools 功能标志实用程序使该服务能够:
- 提取 亚马逊云科技 AppConfig 上存储的基于 JSON
- 将 JSON 配置存储在内存缓存中,以减少对 亚马逊云科技 AppConfig 的频繁调用并降低总成本。
- 使用简单的 API 按名称评估功能标志。
- 使用其内部规则引擎实现 A/B 测试。规则引擎将某些客户的功能标志评估为 “真”,但对其他客户评估为 “假” ——根据会话上下文更改功能标志值。
功能标志最佳实践
本节介绍功能标志的最佳实践,涵盖功能发布的多个方面:测试、发布、部署和停用。
测试
开发人员通常将测试重点放在显而易见的用例上:启用该功能并测试围绕它的新逻辑:验证业务逻辑是否得到正确处理以及副作用是否符合预期。如果代码覆盖面很彻底,他们还将确保尽可能高的代码覆盖率。
但是,当功能标志的值为 False 时,验证该功能的逻辑是否 未 运行也很重要 。这可能看起来很明显,但是当功能的标志设置为 False 时运行该功能的逻辑可能会产生可怕的结果。这可能是由错误或未处理的边缘情况引起的。
创建这两个测试变体的最简单方法是模拟从 亚马逊云科技 AppConfig 返回的配置;第一个测试使用功能标志设置为 True 的模拟配置,而第二个测试将其模拟为 False。模拟为测试提供了一致性,因此当你的账户中的实际配置发生变化时,它不会改变。
发布/部署
假设你没有直接部署到生产环境,那么明智的做法是先将功能标记作为 “禁用” 部署到所有非 “开发” 环境。当你准备好并且可以进行测试和调试时,请在至少一个模拟真实生产环境的环境中发布功能标志—— “暂存”。如果你的模拟测试漏掉了一些边缘案例,这可能会导致 E2E 测试失败。在这种情况下,请添加缺失的测试并继续发布。
当您确信该功能已准备好投入生产时,请使用金丝雀部署策略将其部署到生产环境。
计划退休
功能标志强大且令人上瘾。但是,添加的越多,代码的复杂性和测试开销就会增加。尽管如此,你不会永远受这些功能标志的束缚。没关系, 建议 在他们达到成熟和稳定性后 “给他们斧头”。开发团队应 每月安排一次长达 一小时的会议 , 以审查功能标志的当前状态并决定哪些功能可以停用。
以下是选择合适的退休候选人的一些经验法则:
- 该功能已在 “X” 周内向 100% 的客户部署。使用常识来定义 “X”
- 该功能已经稳定了 “X” 周——没有已知问题/错误。
- 客户反馈是积极的,没有悬而未决的问题。
- 预计该功能不会经过任何重构/添加。
- 您的产品团队不再使用它或认为它不再是必需的。
应该注意的是,亚马逊云科技 AppConfig 在其功能标志中具有原生功能,工程师可以将标志设置为 “短期”,还可以为该标志添加可选的目标弃用日期。然后,您可以搜索和筛选短期标志,并对其进行优先排序,以便进行清理。
摘要
Aws AppConfig 通过将功能标记整合到其 CI/CD 管道和服务中,增强了 CyberArk 发布新功能的信心。亚马逊云科技 AppConfig 提供带架构验证的功能标志部署、出现错误时自动回滚以及金丝雀部署。此外,亚马逊云科技 Lambda Powertools 允许 CyberArk 的服务使用简单 API 来实现 A/B 测试和获取动态配置。
入门的关键资源:
-
亚马逊云科技 应用程序配置研讨会 -
亚马逊云科技 应用程序配置功能标志 -
适用于 Lambda 的电动工具
作者简介:
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。