安全更新您的图
按照推荐顺序升级组件以避免错误
您的supergraph由多个独立版本化的组件组成:
- GraphOS 路由器GraphOS 路由器基于 Apollo Router Core 的一个版本。
- GraphOS 构建管道GraphOS build pipeline使用特定版本的 Apollo Federation 来组合你的 router 的 supergraph schema。
- 如果你使用 Rover CLI 来组合你的 supergraph schema,这一点也适用于 Rover。在这种情况下,你实际上维护了自己的构建管道。
- 你的 子图模式可能分别使用针对 Apollo Federation 的特定版本首次引入的特殊 指令。
这些组件的每个都针对支持 Apollo Federation 的特定版本,这是每个 supergraph 的基础架构。因此,在更新各个组件时,确保这些不同的 Federation 版本保持兼容性非常重要。
推荐更新顺序
为了避免运行时或 组合错误,你的 supergraph 的组件应始终保持以下 Apollo Federation 版本之间的以下关系:
ⓘ 注意
(Router fed.版本) ≥ (构建管道 fed.版本) ≥ (子图 fed.版本)
为了维持这种关系,始终按照从左到右的顺序更新这些 supergraph 组件:
1. 更新你的路由器
你更新路由器的方法取决于你有多少种 supergraph:
如果你有一个 自托管 supergraph,你需要在你的路由器运行的所有环境中 下载最新的 Apollo Router Core 二进制文件。
如果您有一个 云超图,GraphOS 将在相应版本更改时 自动更新您的 router 至最新支持的版本。
- 您可以通过访问 云路由器部分,在您变体的 设置页面的 工作室。
有关每个 router版本对应的 Apollo Federation版本详情,请参阅 这篇文章。
2. 更新您的构建管道
每当您对 图进行操作更改(如 发布子图模式的更改),GraphOS 就会 启动一个构建来组合您的图的新超图模式。从 GraphOS工作室,您可以配置构建管道使用哪个 Apollo Federation 版本来执行此组合。
ⓘ 注意
GraphOS 允许您在 Federation 的次要版本之间进行选择(如2.1
)。每个选项都自动使用该次要版本的最新支持的补丁版本(如 2.1.4
)。
尽管补丁版本更新是自动的,但您必须手动将图的构建管道移动到不同的次要版本。
访问您的变体的 设置页面,然后找到 常规 > 构建管道部分。
点击 升级。
在出现的对话框中,从下拉菜单中选择一个 Federation 版本,然后点击 保存。
GraphOS 会立即使用所选的 Federation 版本启动一个新的构建。所有未来的构建也将使用所选版本。成功构建完成将触发一个 启动,将更新后的模式发送到您的 router。
使用 Rover CLI 进行组合
如果您在本地托管您的 GraphOS 路由器实例,您可以使用 Rover CLI通过 执行 rover supergraph compose
命令来构建其 supergraph 架构。
ⓘ 注意
不建议使用 GraphOS 路由器进行 Rover进行组合。相反,建议通过 GraphOS 构建管道执行组合,以确保在所有环境中的 graph's 架构 delivery过程始终如一。
如果您确实使用 rover supergraph compose
进行组合,该命令将使用您通过 YAML 配置文件中的 federation_version
键指定的确切版本进行组合:
rover supergraph compose --config ./supergraph.yaml
federation_version: =2.3.2subgraphs:# ...
此值必须针对特定的修补程序版本(2.3.1
、2.3.2
等)进行,并且必须以等号(=
)开头。
⚠️ 注意
如果您未为 federation_version
提供值,Rover 会打印警告并根据 此逻辑选择一个 composition 版本。这可能会引发失败。Rover 可能会使用比您的 路由器支持的新版本 composition 版本,导致超级图模式引发路由器启动失败。
3. 更新subgraph模式(如有需要)
在您的路由器和构建流程均支持Apollo Federation的特定最低版本后,您的 router 和 build流程可以采用自该版本首次引入的功能。
ⓘ 注意
不需要更新未使用新引入的Apollo Federation功能的任何 subgraph模式。不同的subgraph模式可以按照需要针对不同的Federation版本。最终,您的 build流程将决定用于创建超级图模式的 composition 版本。
例如,@interfaceObject
指令首次在Federation 2.3中引入。要在子图中使用此 directive,请执行以下步骤:
确保所选 subgraph 库已通过查阅 此表添加了对
@interfaceObject
指令的支持。- 如果您的库尚未支持该 directive,请联系其维护者以添加支持。
将您的 subgraph 库升级到最新版本,以确保使用支持
@interfaceObject
的版本。修改以下子图模式中的
@link
指令extend schema@link(url: "https://specs.apollo.dev/federation/v2.3"import: ["@key", "@shareable", "@interfaceObject"])请注意,
url
参数 指向 Apollo Federation 规范的v2.3
版本,并且@interfaceObject
被包含在import
列表中。将
@interfaceObject
指令应用于子图模式的相关位置。
因为您已经更新了您的 路由器 和 构建管道,下一次您部署子图并将其模式发布到 GraphOS 时,超图超级图的每个组件都将准备就绪,以与包括您添加的 @interfaceObject
指令 的模式进行交互。
为什么更新顺序很重要?
GraphOS 超图 使用 Apollo Federation 2 架构。Federation 2 本身是一个版本化技术(2.2、2.3 等),并且每个版本都会 introduce 支持的 子图指令 集的新变化和添加。
GraphOS 路由器的每个版本都是针对 Federation 2 的特定版本编译的(有关详细信息,请 参阅此表)。任何给定的路由器版本与 Federation 之前的版本向后兼容。但是,它与新版本不兼容。
因此,在超级图组件开始使用较新的 Federation 2 版本之前,重要的是先更新您的路由器。否则,您可能会通过提供一个不支持的超图模式来破坏路由器。
您的图形的 Supergraph Pipeline Track 设置在 GraphOS Studio 中决定用于组合您的超图模式的 Federation 2 的哪个版本。如果您的子图模式之一使用在所选管道轨道引入 Federation 版本之后的指令,则此组合过程将失败。
- 如果构建失败,GraphOS会继续为您的路由器提供最近成功构建的超级图模式。
最后,子图模式是您实际应用新的Federation 2指令的位置。您需要将子图库更新到可识别您方案中所有指令的版本。
您应在最后执行此更新,以确保您的超级图的每个其他组件都已准备好与任何新引入的指令交互。