INTEGRITY Документация

Переопределения версий

С помощью version overrides можно отправить запрос к конкретной версии Worker в текущем деплое, даже если для неё настроено 0% трафика.

Как задать переопределения версий

Чтобы указать переопределение версии в запросе, задайте Cloudflare-Workers-Version-Overrides заголовок в запросе к вашему Worker. Cloudflare-Workers-Version-Overrides это Dictionary Structured Header который может содержать несколько пар ключ-значение. Каждый ключ указывает имя Worker, к которому должно применяться переопределение. значение указывает ID версии, которая должна использоваться, и должен быть String. Например:

curl -s https://example.com -H 'Cloudflare-Workers-Version-Overrides: my-worker-name="dc8dcd28-271b-4367-9840-6c244f84cb40"'

Убедитесь, что переопределения версий применены

Есть несколько причин, по которым переопределение версии для запроса может не применяться. Например:

Если переопределение версии для запроса не применяется, запрос маршрутизируется согласно процентным долям, заданным в конфигурации постепенного развёртывания.

Версию Worker, которая была вызвана, можно посмотреть с помощью Observability, в том числе в таких функциях, как Logpush. Как вариант, если нужно сообщать клиентам, какую версию они использовали (например, для более быстрой и прозрачной отладки), можно использовать привязка метаданных версии и вернуть ID версии в ответе Worker.

Пример smoke-теста

Возможно, вы захотите протестировать новую версию в продакшене, прежде чем постепенно раскатывать её на всё большую долю внешнего трафика. Такой подход обычно называют «smoke test».

В этом примере развёртывание изначально настроено на маршрутизацию всего трафика на одну версию:

ID версии Процент
db7cd8d3-4425-4fe7-8c81-01bf963b6067 100%

Создайте новое развёртывание с помощью wrangler versions deploy и укажите 0% для новой версии, оставив предыдущую версию на 100%.

ID версии Процент
dc8dcd28-271b-4367-9840-6c244f84cb40 0%
db7cd8d3-4425-4fe7-8c81-01bf963b6067 100%

Теперь протестируйте новую версию с переопределением версии, прежде чем постепенно довести её долю до 100%:

curl -s https://example.com -H 'Cloudflare-Workers-Version-Overrides: my-worker-name="dc8dcd28-271b-4367-9840-6c244f84cb40"'

Service bindings

Можно задать Cloudflare-Workers-Version-Overrides заголовок при выполнении вложенного запроса от одного Worker к другому с помощью привязка к сервису. Это позволяет протестировать конкретную версию нижестоящего Worker из вышестоящего Worker.

Если вы пересылаете исходный объект запроса, переопределённый заголовок передается автоматически:

// The override header from the inbound request is forwarded to the downstream Worker.
export default {
	async fetch(request, env) {
		return env.MY_SERVICE.fetch(request);
	},
};
// The override header from the inbound request is forwarded to the downstream Worker.
export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		return env.MY_SERVICE.fetch(request);
	},
};

Также вы можете явно задать переопределяющий заголовок:

// Replace the version ID with the target version from `wrangler versions list`.
export default {
	async fetch(request, env) {
		const response = await env.MY_SERVICE.fetch("https://example.com/", {
			headers: {
				"Cloudflare-Workers-Version-Overrides":
					'my-downstream-worker="dc8dcd28-271b-4367-9840-6c244f84cb40"',
			},
		});
		return response;
	},
};
// Replace the version ID with the target version from `wrangler versions list`.
export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const response = await env.MY_SERVICE.fetch("https://example.com/", {
			headers: {
				"Cloudflare-Workers-Version-Overrides":
					'my-downstream-worker="dc8dcd28-271b-4367-9840-6c244f84cb40"',
			},
		});
		return response;
	},
};