Gemcook Tech Blog
🐤

Workersで使えるようになったカナリアリリースを試してみる

2024/10/22に公開

はじめに

こんにちは、あさひです。
今回は今まで実験的に導入されていたカナリアリリースが Birthday Week で一般提供開始になったので試してみようと思います。

https://blog.cloudflare.com/builder-day-2024-announcements/

今回試すのはあくまで Workers の段階的デプロイとそれに関連する機能を試すことをメインとするので、Cloudflare アカウントの作成や Workers の詳細などについては扱いません。

カナリアリリースとは

カナリアリリースとはアプリケーションやサービスの新バージョンを段階的にリリースする手法です。全体リリース前に一部のユーザーや環境で新しい変更を適用し、問題がないかを確認できるメリットがあります。

Workers のカナリアリリースでは、事前に設定した割合でリクエストを各バージョンに割り振ることができます。Workers が自動で割り振るので、エンドポイントは変わりません。同じ URL で 2 つのバージョンにリクエストを振り分けます。また一般にはカナリアリリースだと思いますが Cloudflare のドキュメントでは段階的デプロイと説明されているので以降そのように記します。

wrangler versionsコマンド

Workers で段階的デプロイができるようになったので、wrangler versionsのコマンド群を紹介します。他にもwrangler versions secret ~などもありますが今回の段階的デプロイに関係がありそうな以下のコマンドを扱います。

今回取り上げるコマンド

  • wrangler versions deploy
  • wrangler versions upload
  • wrangler versions list
  • wrangler deployments status

Workers をセットアップ

以下のコマンドで Workers をセットアップしておきます。

npm create cloudflare@latest -- canary-release --framework=hono

以下のコマンドで初回のデプロイを済ませておきましょう。

npm run deploy

以下の様なコードがデプロイされているはずなのでHello Hono!とレスポンスが返ってきていれば問題ありません。

app.get("/", (c) => {
  return c.text("Hello Hono!");
});

curl コマンドで動作確認を行います。サブドメインをexampleにしていますが各々の設定に書き換えて試してください。

curl https://canary-release.example.workers.dev

プレビュー URL

wrangler versions uploadを使用することによって新しいバージョンをアップロードすることができます。ここで重要なのは、アップロードしただけではデプロイされないため、現状動作している Workers の挙動を変更しないという点です。

何が嬉しいかというとアップロードが成功した時点で Wrangler がプレビュー URL が表示されます。もちろんダッシュボードから確認することも可能です。
このプレビュー URL を使えば変更がデプロイされる前にアプリケーションの新しいバージョンに適用された変更を確認することができます。

試してみる

さっそく試してみます。以下のようにコードを変更しておきます。

app.get("/", (c) => {
-  return c.text("Hello Hono!");
+  return c.text("Hello Hono!, Canary Release");
});

変更して保存できたら、以下のコマンドで新しいバージョンをアップロードします。

npx wrangler versions upload

以下のような表示になります。Worker Version IDがそれぞれのバージョンに割り振られる固有の ID です。

またVersion Preview URLが現状のデプロイに影響しない個別のバージョンに割り振られたエンドポイントです。割り振られたプレビュー URL を使用するとHello Hono!, Canary Releaseとレスポンスが返ってきました。

段階的デプロイ

さっそく試す

ここまででコードの変更は済んでいるので、これで段階的デプロイを試していきます。

以下のコマンドで段階的デプロイを実行することができます。

npx wrangler versions deploy

アップロードされているバージョンの一覧が表示されるので、デプロイしたいバージョンをスペースキーで選択します。ただし、3 つ以上選択すると 2 つ選ぶ旨のエラーが出ます。その後それぞれのバージョンに割り振れるリクエストの割合を選択します。

ダッシュボードを見に行くと以下のようになっています。

トラフィックの割合はここから変更することが可能です。CLI で変更する場合は、再度バージョンのデプロイを行い、選択し直す必要があります。

その他

以下のコマンドを使用すれば今デプロイされている状況を確認できます。

npx wrangler deployments status

使ってみるとこんな感じです。

また今アップロードされているバージョンの一覧は以下のコマンドで確認することができます。

npx wrangler versions list

いろいろ確認していたのでバージョンがたくさんありますが、一覧の取得ができています。

まとめ

今回は Workers に追加された段階的デプロイを試してみました。

Workers のデプロイにバージョンという概念があることを理解すると、スムーズに進められるのではないかと思いました。簡単に試すこともできると思うのでまだ触っていない方はぜひ試してみてください。

参考資料

https://developers.cloudflare.com/workers/configuration/versions-and-deployments/gradual-deployments/#_top

Gemcook Tech Blog
Gemcook Tech Blog

Discussion