You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/source/routing/license.mdx
+55-16Lines changed: 55 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -70,6 +70,20 @@ Offline license support is available on an as-needed basis to Enterprise organiz
70
70
71
71
</Tip>
72
72
73
+
<Caution>
74
+
75
+
An offline license is valid for the duration of your contract or one year, whichever is shorter. It includes a grace period of 28 days.
76
+
77
+
<br/><br/>
78
+
79
+
Keep your offline license files up to date by [renewing your license](#renew-an-offline-license).
80
+
81
+
<br/><br/>
82
+
83
+
See [Grace period for expired plans](#grace-period-for-expired-plans) for details on what happens when your license expires.
84
+
85
+
</Caution>
86
+
73
87
Running your GraphOS Router fleet while fully connected to GraphOS is the best choice for most Apollo users. However, some scenarios can prevent your routers from connecting to GraphOS for an extended period, ranging from disasters that break connectivity to isolated sites operating with air-gapped networks. If you need to restart or rapidly scale your entire router fleet, but you're unable to communicate with Apollo Uplink, new router instances won't be able to serve traffic.
74
88
75
89
To support long-term disconnection scenarios, GraphOS supports __offline licenses__ for the GraphOS Router. An offline license enables routers to start and serve traffic without a persistent connection to GraphOS. Instead of fetching its supergraph schema from Apollo Uplink, an offline router gets its supergraph schema from a local supergraph schema file.
@@ -84,14 +98,6 @@ An offline license can be retrieved from GraphOS with the [`rover license fetch`
84
98
85
99
With an offline license, a router can either be fully disconnected from GraphOS or configured to connect to GraphOS on a best-effort basis so that it can send graph usage metrics. Apollo recommends configuring your router to report graph usage metrics to GraphOS whenever possible. Since your router sends metrics in a best-effort fashion, it incurs no performance or uptime penalties while enabling several powerful GraphOS features, such as operation checks, field insights, operation traces, and contracts.
86
100
87
-
<Note>
88
-
89
-
A router using an offline license requires [the use of local manifests](/graphos/routing/security/persisted-queries#local_manifests) when using [safelisting with persisted queries](/graphos/routing/security/persisted-queries), otherwise it will not work as designed when the router is disconnected from Uplink.
90
-
91
-
</Note>
92
-
93
-
An offline license is valid for the lesser of the duration of your contract with Apollo, or one year, with an added grace period of 28 days. You are responsible for keeping your offline license files up to date within your infrastructure by rerunning `rover license fetch` to fetch updated license files.
94
-
95
101
### Set up offline license for the GraphOS Router
96
102
97
103
Follow these steps to configure an GraphOS Router to use an offline license:
@@ -103,7 +109,6 @@ Follow these steps to configure an GraphOS Router to use an offline license:
103
109
```
104
110
105
111
1. Provide the offline license to your router on startup. The router accepts an offline license in a few ways:
106
-
107
112
1. [`--license <license_path>`](/graphos/reference/router/configuration#--license) CLI option, with an argument containing an absolute or relative path to an offline license file
108
113
1. [`APOLLO_ROUTER_LICENSE_PATH`](/graphos/reference/router/configuration#--license) environment variable, containing an absolute or relative path to an offline license file
109
114
1. [`APOLLO_ROUTER_LICENSE`](/graphos/reference/router/configuration#--license) environment variable, containing the stringified contents of an offline license file
@@ -121,26 +126,50 @@ Follow these steps to configure an GraphOS Router to use an offline license:
121
126
* [`APOLLO_SUPERGRAPH_PATH`](/graphos/reference/router/configuration#-s----supergraph) environment variable, containing an absolute or relative path to supergraph schema file
122
127
* [`APOLLO_SUPERGRAPH_URLS`](/graphos/reference/router/configuration#-s----supergraph) environment variable, containing URLs to supergraph schemas
123
128
129
+
<Note>
130
+
131
+
Update your local supergraph schema files using your CI/CD pipelines. Failing to propagate schema changes can lead to schema drift, unexpected errors, or outages.
132
+
133
+
</Note>
134
+
124
135
1. Configure the router to report usage metrics to GraphOS in a best-effort basis by setting both the [`APOLLO_KEY`](/graphos/reference/router/configuration#apollo_key) and [`APOLLO_GRAPH_REF`](/graphos/reference/router/configuration#apollo_graph_ref) environment variables.
125
136
126
137
These metrics are necessary for several important GraphOS features (operations checks, field insights, operation traces, contracts). Sending them best-effort incurs no performance or uptime penalties.
127
138
128
-
## Troubleshooting
139
+
### Renew an offline license
129
140
130
-
**If your router doesn't successfully connect to GraphOS,** it logs an error that begins with one of the following strings if any GraphOS features are enabled:
141
+
Because the router does not auto-fetch updated licenses, you need to keep license files current across all deployments.
131
142
132
-
| Error Message | Description |
133
-
|-----------------------------|-------------|
134
-
| `Not connected to GraphOS.` | At least one of the `APOLLO_KEY` and `APOLLO_GRAPH_REF` environment variables wasn't set on router startup. |
135
-
| `License not found.` | The router connected to GraphOS with credentials that are not associated with a GraphOS plan. |
136
-
| `License has expired.` | Your organization's GraphOS subscription has ended. **Your router will stop processing incoming requests at the end of the standard [grace period](#grace-period-for-expired-plans).** |
143
+
Failure to rotate licenses before they expire causes the router to degrade. See [Grace period for expired plans](#grace-period-for-expired-plans).
144
+
145
+
Follow these steps to rotate your license regularly and safely:
146
+
147
+
1. Schedule a [`rover license fetch` job](/rover/commands/license) as part of every subscription renewal cycle.
148
+
2. Securely distribute the newly generated license file to all router instances.
149
+
3. Replace the existing license file immediately after the contract is renewed.
150
+
4. Ensure your CI/CD or configuration management system includes this rotation step as a standard operational procedure.
151
+
152
+
### Stop using an offline license
153
+
154
+
If you no longer want the router to rely on an offline license, move back to online validation through Uplink or disable GraphOS features entirely to avoid license enforcement. Do this when routers regain reliable connectivity, when you want to eliminate manual license rotation, or when Apollo Support confirms your account should no longer operate in offline-licensed mode.
155
+
156
+
Follow these steps to stop using an offline license:
157
+
158
+
1. Remove any `--license` flags and unset all `APOLLO_ROUTER_LICENSE*` environment variables.
159
+
1. Ensure that `APOLLO_KEY` and `APOLLO_GRAPH_REF` are set correctly so the router can authenticate with Uplink and retrieve entitlements automatically.
160
+
161
+
Once online, license renewal is handled through GraphOS without the need to manually rotate files.
162
+
163
+
If you prefer not to reconnect to Uplink and do not plan to renew the offline license, you must disable all GraphOS features that require entitlements before the grace period ends. Otherwise, once the license expires, the router will stop processing requests.
137
164
138
165
## Turning off GraphOS features
139
166
140
167
To turn off an GraphOS feature, remove all of its associated configuration keys from your router's [YAML config file](/graphos/reference/router/configuration#yaml-config-file).
141
168
142
169
## Grace period for expired plans
143
170
171
+
An offline license is valid for the lesser of the duration of your contract with Apollo, or one year, with an added grace period of 28 days. Keep your offline license files up to date by [renewing your license](#renew-an-offline-license).
172
+
144
173
If your organization terminates its GraphOS subscription, your router's license is considered expired at the end of your final paid subscription period. GraphOS provides a grace period for expired licenses so that you can turn off GraphOS features before they produce breaking errors in your router.
145
174
146
175
If your router has an expired GraphOS license, its behavior degrades according to the following schedule, _if_ any GraphOS features are still enabled:
@@ -150,3 +179,13 @@ If your router has an expired GraphOS license, its behavior degrades according t
150
179
- **After 28 days,** your router begins a **hard outage**. It no longer processes incoming client requests and continues emitting logs and metrics from the soft outage.
151
180
152
181
Your router resumes normal functioning whenever you renew your GraphOS subscription or turn off all [GraphOS features](/graphos/routing/graphos-features).
182
+
183
+
## Troubleshooting
184
+
185
+
If your router doesn't successfully connect to GraphOS, it logs an error that begins with one of the following strings if any GraphOS features are enabled:
186
+
187
+
| Error Message | Description |
188
+
|-----------------------------|-------------|
189
+
| `Not connected to GraphOS.` | At least one of the `APOLLO_KEY` and `APOLLO_GRAPH_REF` environment variables wasn't set on router startup. |
190
+
| `License not found.` | The router connected to GraphOS with credentials that are not associated with a GraphOS plan. |
191
+
| `License has expired.` | Your organization's GraphOS subscription has ended. Your router will stop processing incoming requests at the end of the standard [grace period](#grace-period-for-expired-plans). |
0 commit comments