← Cloudflare Workers / workers / versions-and-deployments
Переопределения версий
С помощью 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"'Убедитесь, что переопределения версий применены
Есть несколько причин, по которым переопределение версии для запроса может не применяться. Например:
- Деплой может не содержать указанную версию. После недавнего изменения может пройти до нескольких секунд, прежде чем оно станет доступно по всему миру.
- Значение заголовка может оказаться недействительным Dictionary ↗.
Если переопределение версии для запроса не применяется, запрос маршрутизируется согласно процентным долям, заданным в конфигурации постепенного развёртывания.
Версию 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;
},
};Дополнительные материалы
- Привязка к версии - Используйте cookies и заголовки, чтобы закреплять пользователей за конкретной версией во время постепенного деплоя.
- Постепенные развёртывания - Узнайте, как работает распределение трафика на основе процентов.
- Service bindings - Как Workers взаимодействуют друг с другом.
- Привязка метаданных версии - доступ к идентификатору версии и тегу изнутри вашего Worker.