使用 亚马逊云科技 AppConfig 版本标签改进您的功能标记

作者: 史蒂夫·赖斯 伊万·加西亚 | 202

亚马逊云科技 AppConfig 是 A WS Systems Manager 的一项功能 ,可帮助您提高软件部署速度和信心。AppConfig 提供动态配置和功能标记,是一款将您的功能发布与代码部署分开的工具。您可以创建新功能并将代码推送到生产环境中,并将新功能隐藏在功能标志后面。准备好让用户试用新功能后,你可以切换功能标志将其打开,起初可能仅限于内部测试人员,然后是测试版用户,最后是所有用户。在发布当天,您可以通过部署配置更改而不是代码更改来启动,如果出现问题,您可以立即回滚该更改。在亚马逊,我们将使用功能标志和动态配置的做法称为 持续配置

在这篇博客文章中,您将学习如何使用一项名为 亚马逊云科技 AppConfig 版本标签 的强大新功能。这使您能够以多种结构化方式管理配置和功能标志数据,并可以简化跨多个维度的工作流程。版本标签使用您自己的标识符对 AppConfig 生成的配置版本号进行补充,使您可以更轻松地跟踪配置数据在流过 AppConfig 并最终被应用程序使用时的变化。

亚马逊云科技 AppConfig 版本标签可以解决什么问题?

首先,简要介绍一下背景。我们推荐的使用 AppConfig 的方法是创建配置文件,使用托管配置版本,允许您直接在 AppConfig 中存储和编辑配置数据,而不是让 AppConfig 在部署时从 S3 等单独的服务中提取数据。使用 托管配置版本 时 ,每个版本都是不可变的,因此每次更改配置数据时,您最终都会保存一个新版本,AppConfig 会自动为其分配版本号——版本 1、版本 2 等。这些版本号很有用,因为稍后当你进行部署时,你需要确切地告诉 AppConfig 要部署哪个版本。但是,在某些情况下,为每个版本提供自己的附加标识符很有用,这就是 版本标签的用武 之地。

版本标签的用例示例

您可以使用版本标签作为每个版本的简写用户友好标识符。例如,在下面的屏幕截图中,我们有四个配置版本,每个版本都有一个版本标签,将该版本与应用程序的主要版本联系起来。这样,几年后就可以很容易地回到过去,看看任何给定版本的配置是什么样子。

Figure 1. Display of Version Labels next to version number in the AWS Management Console

图 1。在 亚马逊云科技 管理控制台的版本号旁边显示版本标签

如果您定期将配置数据从其他版本控制的事实来源(例如 git 存储库)导入 AppConfig,则版本标签允许您将在 AppConfig 中创建的版本与源系统中的等效版本关联起来。例如,您可以提供 git 提交 ID 或标签作为版本标签。这样,就可以轻松地将配置更改一直追溯到其源头。

同样,如果您在多个 亚马逊云科技 区域使用 AppConfig 并尝试将相同的配置数据部署到不同的区域,则可能会遇到不同区域的版本号可能不匹配的问题。例如,假设你在 us-east-1 中有一个配置文件,然后在 us-west-2 中有一个不同的配置文件,还有一些自动化,它会定期将你的配置数据发布到这两个区域。只要两个地区的版本数相同,版本号自然就会相互匹配。但是,如果你随后在其中一个地区手动创建了一个版本但没有在另一个地区创建版本会怎样?然后,下次运行自动化时,可能会在一个区域创建版本 3,但在另一个区域创建版本 4,尽管对你来说它们是同一个版本。版本标签让您的自动化为两个版本提供相同的标签,从而可以轻松查看哪些版本相互对应,从而更容易处理此问题。

如何使用版本标签?

AppConfig 的多个 API 和 Web 控制台屏幕已扩展为版本标签支持。它们按以下顺序排列。

正在创建

createHostedConfigurationVersion API 和用于创建托管配置版本(包括功能标志和自由格式)的 Web 控制台屏幕均已扩展,允许您在创建新版本时提供版本标签。

Figure 2. Adding a new version of a Configuration Profile and where to add the Version Label information

图 2。添加配置文件的新版本以及在何处添加版本标签信息

以下是 Bash shell 示例,说明如何在 Git 存储库中使用 亚马逊云科技 CLI 来创建新的托管配置版本,其中包含给定文件的当前内容,并包括带有最新 git commit 短哈希的版本标签。

aws appconfig create-hosted-configuration-version \
 --application-id <YourAppId> \
 --configuration-profile-id <YourProfileId> \ 
 --content-type "text/plain" 
 --content fileb://configuration.txt --version-label $(git rev-parse --short HEAD) -

消费和调试

getLatest Configuration 是应用程序用来从 AppConfig 检索配置数据的主要 API,如果已部署的配置填充了版本标签字段,它现在会在响应中包含一个版本标签字段。我们强烈建议您在任何调用 getLatestConfiguration 的代码中记录这些版本标签。在日志中添加这些标签是一种强大的调试辅助工具,因为它可以更轻松地跟踪应用程序在给定时间点加载了哪个版本的配置。

正在部署

开始部署时,您可以根据版本标签选择要部署的版本,这使操作员更容易选择正确的版本进行部署。

Figure 3. Deploying a Configuration Profile. In the version dropdown, you can see the Version Label you have added next to the version number

图 3。部署配置文件。在版本下拉列表中,你可以在版本号旁边看到你添加的版本标签

即使你以编程方式开始部署, StartDeploym ent API 也允许你提供版本标签来代替版本号:

aws appconfig start-deployment \
--application-id <YourAppId> \
--configuration-profile-id <YourProfileId> \
--environment-id <YourEnvId> \
--deployment-strategy-id 'AppConfig.Linear50PercentEvery30Seconds' \
--configuration-version '1.0_Preview'

查找和筛选

listHostedConfiguration Versions API 有一个参数,允许您按版本标签筛选版本,可以按完全匹配或前缀(如果包含通配符)进行筛选。

aws appconfig list-hosted-configuration-versions \
--application-id <YourAppId> \
--configuration-profile-id <YourProfileId> \
--version-label '1.0*'
{
    "Items": [
        {
            "ApplicationId": "rd7sjl4",
            "ConfigurationProfileId": "dim47hi",
            "VersionNumber": 4,
            "ContentType": "application/json",
            "VersionLabel": "1.0_Public"
        },
        {
            "ApplicationId": "rd7sjl4",
            "ConfigurationProfileId": "dim47hi",
            "VersionNumber": 3,
            "ContentType": "application/json",
            "VersionLabel": "1.0_Preview"
        }
    ]
}

指示、限制和注意事项

关于版本标签,还有其他一些值得强调的内容:

  • 版本标签是可选的。你可以有一个配置文件,其中一些版本有版本标签,而其他版本没有。
  • 在给定配置文件中的所有托管配置版本中,版本标签必须是唯一的。它们不必在不同的配置文件中是唯一的。
  • 版本标签和整个托管配置版本是不可变的。因此,您只能在创建新版本时指定版本标签。除非删除并重新创建整个托管配置版本,否则之后您无法添加、移除或更改版本标签。
  • 版本标签是自由格式的文本字段。允许使用空格,也允许使用特殊字符,但不允许使用星号 (*)。
  • 版本标签仅适用于托管配置版本,不适用于其他类型的配置文件,例如 S3 源配置文件。

结论

在管理功能标志和动态配置数据时,使用 亚马逊云科技 AppConfig 版本标签为简化工作流程打开了大门。设置和引用版本标签的功能允许配置数据的跨账户、跨区域和跨源同步。使用版本标签还可以提供额外的安全保障,使您可以更好地了解和查看自己的配置数据,从而更安全地使用功能标志。

您可以在以下链接中阅读有关 亚马逊云科技 AppConfig 的更多信息:

  • 使用 亚马逊云科技 AppConfig 功能标志 博客文章
  • 亚马逊云科技 AppConfig 功能标志研讨会
  • 什么是 亚马逊云科技 AppConfig? 文档
  • “以音速连续配置” 博客文章
ivan garcia

Ivan Garcia

Ivan 是 Aws AppConfig 的软件开发工程师,他喜欢开发安全、易于使用并能防范人为错误的软件。作为一个孩子的骄傲父亲,他的爱好包括躲猫猫、被追逐和睡眠不足。

steve rice

斯蒂夫·赖斯

史蒂夫·赖斯是 亚马逊云科技 AppConfig 的总经理。他喜欢开发能够改善工程师生活的产品,并热衷于功能标志、动态配置和持续配置。他与妻子、3 个孩子和 2 只狗住在华盛顿特区。


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