亚马逊云科技 CDK 正在拆分构造库和 CLI

作者: 里科·休伊伯斯 |

亚马逊云科技 CDK 是一个开源软件开发框架,用于在代码中定义云基础架构,并通过 Amazon CloudFormation 进行配置。它由两个主要组件组成:您在编程语言中用于对亚马逊云科技应用程序进行建模的构造库和一个 CLI。构造库将您的应用程序模型"合成"到磁盘上的一个目录中,然后 CLI 读取该目录的文件以将您的应用程序部署到亚马逊云科技。

从 2025 年 2 月起,CDK CLI 和 CDK 构造库将不再同步发布。相反,它们都有自己的独立发布节奏,这意味着它们的版本号将有所不同。这不会对 CDK API 或用户体验产生任何影响。

这不会从根本上改变 CDK 的工作方式或您使用 CDK 的方式:最新版本的 CLI 将始终支持之前发布的 CDK 构造库的所有版本。您可以随时继续免费将 CLI 升级到最新版本。此次更改带来的最大区别是,我们正在将 CLI 和相关组件的源代码移至新的 GitHub 存储库。新的存储库将是 https://github.com/aws/aws-cdk-cli,它将在迁移完成后向公众开放。

新版本行上的 CDK CLI 的第一个新版本将作为 2.1000.0 发布,下一个版本为 2.1001.0 等。CDK 构造库将继续使用其当前版本系列,以 2.174.02.175.02.176.0 等形式发布。

我们为什么要改变这个?

CDK CLI 和 CDK 构造库一直是 CDK 开发框架的独立部分。它们历来位于同一个存储库中,因为这使我们更容易和更快地进行迭代。现在 CDK 已经成熟,我们发现不同组件的更改以不同的速度进行,需要不同的测试策略。这种变化还将使我们能够在不影响另一个子项目的发布节奏的情况下更改一个子项目的发布节奏,这将使整个项目更具灵活性。

CLI 的基本兼容性模型保持不变:CLI 可以处理与其一起发布或之前发布的所有构造库的输出。这曾经表现为始终 CLI version >= Lib version 是有效版本组合的规则。由于版本将不再同步发布,因此新规则将按原样发布为 CLI release date >= Lib release date。从版本号中一目了然地发现这些信息并不容易,但我们将在 cdk.out 清单中包括所需的最低 CLI 版本号,这样错误消息就会包含所需的版本,并将包含每个版本的兼容性信息的表格发布到 GitHub。

为了表明版本行连续性中断,我们将在 CLI 的版本号中留下一个很大的明显中断。版本 2.174.0 发布后,CLI 将跳到 2.1000.0 然后继续执行 2.1001.0。希望在我们不更改主要版本号的情况下,这将清楚地表明版本行不再相关。

CDK 构造库将继续使用其当前版本,以 2.175.02.176.0 等形式发布。

我们没有改变什么?

我们没有更改主要版本号:我们发布 CDK CLI 并不是为了表示版本控制连续性的中断而使用 3.x,原因有两个:

  • 大多数客户会像 "aws-cdk": "^2.174.0" 这样在他们的项目中有依赖范围。如果我们将主要版本号更改为 3.x,这些项目将停止自动使用 CLI 更新,从而导致下次架构更改时出现 CLI 兼容性错误。通过保留主要版本 2,新版本将继续匹配指定的依赖范围并自动安装。
  • 为了避免有任何机会将其解释为 "CDKv3" 发行版(本次更改不代表这种情况),我们暂时不会将 CLI 的主要版本更改为 3。这并不是我们永远不会提高 CLI 的主要版本号的承诺。如果将来有充分的理由对其进行更改,我们毕竟可能会这样做。如果我们这样做,我们将以最小影响的方式这样做。至少,未来的任何 CLI v3 都将与构造库的未过时 2.x 版本保持兼容。

我们不会更改您提交问题的位置:即使 CDK CLI 代码将移至不同的存储库,并且必须针对该其他存储库提交 Pull Requests,但您可以继续在主 aws/aws-cdk 存储库中提交 CDK 的任何问题。我们希望让您能够轻松地在单一的地方报告更广泛的 CDK 框架中的问题,无论这些问题来自哪个组件。亚马逊云科技 CDK 团队将监控所有存储库中的问题,并在必要时将问题移至不同的存储库。这与我们用于其他 CDK 组件(例如 jsii)的操作程序相同。

我们没有改变兼容性模型:兼容性模型没有改变。CLI 将始终能够读取之前发布的构造库的非过时版本生成的所有 cdk.out 目录。为确保兼容性,我们建议您使用 npm upgrade 升级 CLI 版本的频率至少与升级构造库版本的频率相同。

这里有一些有用的提示可以用来确保兼容性。要遵循的简单规则是 CLI release date >= Lib release date,这可以保证行之有效。要遵循的更复杂但仍然正确的规则是,在 lib 版本发布之前的最新 CLI 版本可以保证正常运行,任何更新的版本也可以运行。如果不对 cdk.out 目录中文件的格式进行任何更改,则旧版本也可以使用,但不能保证兼容性。

对你有什么影响?

作为 CDK 用户:你会注意到 CDK CLI 和 CDK 构造库的版本已不再相同。我们建议您将 CDK 构造库的版本视为 CDK 的"版本",因为该版本对您使用 CDK 的日常体验影响最大。我们还建议您将 CDK CLI 版本保持在最新版本,以确保您始终拥有支持您正在使用的构造库版本的 CLI 版本。任何假定只有一个"CDK 版本"可以同时安装构造库和 CLI 的脚本都需要重写:

# This no longer works, there will be two different versions
$ CDK_VERSION=2.714.0
$ npm install aws-cdk-lib@$CDK_VERSION
$ npm install aws-cdk@$CDK_VERSION
# Do this instead (install the latest 2.x)
$ npm install aws-cdk@^2
Bash

作为 CDK 贡献者:与 CLI 相关的问题应继续存档在 aws-cdk 存储库中,但您需要向新存储库提出任何拉取请求。同时涉及 CLI 和构造库的更改需要发送到两个存储库,并分别合并。在合并构造库 PR 之前,需要发布 CLI 更改。新的 https://github.com/aws/aws-cdk-cli 存储库中描述了确切的工作流程。

结论

由于这一变化,我们能够以更快的速度改善 CDK,我们感到非常兴奋。尽管我们知道这可能需要客户做好准备或更新脚本,但我们预计对用户的影响将微乎其微。如果您有任何疑问或想参与有关变更的讨论,请查看讨论该变更的 GitHub 问题,或直接通过 Amazon Support 或 Slack 联系我们。



里科·休伊伯斯

里科·休伊伯斯

Rico 是亚马逊云科技云开发套件团队的软件开发工程师。他认为计算机的存在是为了防止我们犯错误,并且喜欢静态类型检查。


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