段階的デプロイでは、トラフィックをバージョン間で分割し、Worker の新しい バージョン を少しずつ公開できます。新しいバージョンへ一度にすべてのトラフィックを切り替えず、一部のリクエストだけを新バージョンへ送り、残りは前のバージョンで処理できます。
段階的デプロイでは、次のことができます。
次のセクションでは、段階的デプロイの利用例を説明します。
create-cloudflare CLI(C3) で "Hello World" Worker を作成し、デプロイします。
npm create cloudflare@latest -- <NAME> -- --type=hello-worldyarn create cloudflare <NAME> -- --type=hello-worldpnpm create cloudflare@latest <NAME> -- --type=hello-worldTypeScript を使うかどうかは yes または no で答えます。アプリケーションのデプロイは yes と答えます。これが Worker の最初のバージョンです。
Response の内容を変えて Worker のコードを編集し、wrangler versions upload コマンドで Worker をアップロードします。
npx wrangler versions uploadyarn wrangler versions uploadpnpm wrangler versions upload自動ではデプロイされない、新しいバージョンが作成されます。
wrangler versions deploy コマンドで、2 つのバージョン間でトラフィックを分割する新しいデプロイを作成します。対話プロンプトに従い、各バージョンの希望する割合を選びます。
npx wrangler versions deployyarn wrangler versions deploypnpm wrangler versions deployWorker に対して cURL コマンドを実行し、分割デプロイをテストします。
for j in {1..10}
do
curl -s https://$WORKER_NAME.$SUBDOMAIN.workers.dev
done10 件のレスポンスが表示されます。内容は ステップ 3 で設定した割合によって変わります。
バージョンオーバーライド で、特定のバージョンを対象にすることもできます。
もう一度 wrangler versions deploy を実行し、対話プロンプトに従います。新しいバージョンを選び、100% に設定します。
npx wrangler versions deployyarn wrangler versions deploypnpm wrangler versions deploy-
Cloudflare ダッシュボードで Workers & Pages ページを開きます。
Workers & Pages を開く ↗ -
Create application > Hello World テンプレートを選び、Worker をデプロイします。
-
Worker のデプロイ後、Edit code からオンラインコードエディターを開きます。Worker のコードを編集します(
Responseの内容を変更します)。 -
デプロイせずに変更を保存するには、Deploy の横の 下向き矢印 > Save を選びます。Worker の新しいバージョンが作成されます。
-
Deployments を開き、Promote deployment を選んで、2 つのバージョン間の分割を作成します。
段階的デプロイでは、複数バージョンの Worker が同時にトラフィックを処理します。そのため、クライアントやサービスが複数バージョンとやり取りし、エラーや一貫性のない挙動が起きることがあります。これを バージョンスキュー(version skew) と呼びます。
既定では、各リクエストは設定した割合に基づいて、独立していずれかのバージョンへルーティングされます。同じユーザーからの連続リクエスト(ページの再読み込みやアセット取得を含む)が、異なるバージョンで処理されることがあります。
段階的デプロイの間、ユーザーを同じバージョンに固定したい場合は、バージョンアフィニティ を使えます。
ある Worker が サービスバインディング で別の Worker を呼ぶとき、2 つの Worker はそれぞれ独自の段階的デプロイの途中にあることがあります。Worker A(新バージョン)が Worker B を呼んでも、リクエストは Worker B の旧バージョンに着き、API 契約が異なる場合があります。
サブリクエスト中に下流の Worker を特定バージョンへ固定するには、バージョンオーバーライド を使えます。
Durable Objects では、各 Durable Object の実行バージョンは一度に 1 つだけのため、段階的デプロイの動きが異なります。バージョンの割り当て、保証、マイグレーションの詳細は、Durable Objects での段階的デプロイ を参照してください。
段階的デプロイでは、Workers の呼び出しを特定バージョンに紐づけて、新バージョン公開の影響を把握したいことがあります。
Workers Logpush で、新しい ScriptVersion オブジェクトを使えます。現時点では、ScriptVersion は Logpush API からのみ追加できます。API 呼び出しの例です。
curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/logpush/jobs' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"name": "workers-logpush",
"output_options": {
"field_names": ["Event", "EventTimestampMs", "Outcome", "Logs", "ScriptName", "ScriptVersion"]
},
"destination_conf": "<DESTINATION_URL>",
"dataset": "workers_trace_events",
"enabled": true
}'| jq .ScriptVersion は次の構造のオブジェクトです。
{
"ScriptVersion": {
"id": "<UUID>",
"message": "<MESSAGE>",
"tag": "<TAG>"
}
}Version metadata バインディング で、Worker 内のバージョン ID またはバージョンタグにアクセスできます。
段階的デプロイを作成できるのは、アップロード済みの直近 100 バージョンの Worker だけです。