【かなりありりーす】

カナリアリリース とは?

最終更新:
💡 まず少しだけ出してみて、大丈夫なら全員に届ける
📌 このページのポイント
カナリアリリースの仕組み ユーザー ← 5% ロード バランサー トラフィック分割 95% 5% v1 現行バージョン 安定稼働中 v2 新バージョン カナリア 監視 エラー率 レイテンシ 成功率 問題なし → 徐々に増加 → 100%へ 異常検知 → ロールバック 段階的なトラフィック移行 5% 開始 25% 拡大 50% 半数 100% 完了! v1: 95% v2: 100%
カナリアリリースは新バージョンに少量のトラフィックを流し、問題がなければ段階的に全体へ展開する手法
ひよこ ひよこ
カナリアリリースって普通のリリースと何が違うの?
ペンギン先生 ペンギン先生
普通のリリースは全ユーザーに一斉に新バージョンを届けるよね。カナリアリリースは最初に全体の5%とか10%のユーザーにだけ新バージョンを配信して、エラー率やレスポンスタイム監視する。問題がなければ徐々に比率を上げて、最終的に全体に展開するんだ。
ひよこ ひよこ
なんで「カナリア」って名前なの?
ペンギン先生 ペンギン先生
昔、炭鉱の坑夫がカナリアを籠に入れて坑道に持ち込んでいたんだ。カナリアは有毒ガスに敏感だから、カナリアが元気なら安全、弱っていたら危険と判断できた。カナリアリリースも同じで、少数のユーザーへのリリースが「カナリア」の役目を果たすんだよ。
ひよこ ひよこ
ブルーグリーンデプロイとはどう違うの?
ペンギン先生 ペンギン先生
ブルーグリーンは旧環境(ブルー)と新環境(グリーン)を用意して、ルーティングを一括で切り替える方式。カナリアは一括ではなく「5%→20%→50%→100%」と段階的にトラフィックを移す。カナリアの方がリスクは小さいけど、切り替え中は2つのバージョンが同時に動くから、互換性に注意が必要だよ。
ひよこ ひよこ
具体的にどうやってトラフィックを分けるの?
ペンギン先生 ペンギン先生
ロードバランサーサービスメッシュIstioEnvoyなど)でトラフィック重み付けルーティングを使うのが一般的だよ。AWS App MeshやKubernetesのArgo Rolloutsを使えば、「新バージョンにトラフィックの10%を流す」みたいな設定がYAMLで書ける。
ひよこ ひよこ
監視で何を見ればいいの?
ペンギン先生 ペンギン先生
最低限見るべきは「エラー率」「レスポンスタイムレイテンシ)」「リソース使用量」の3つ。カナリア版のこれらが旧バージョンと比べて悪化していないかを自動比較する。Kayentaのような自動カナリア分析ツールを使えば、統計的に「この差は有意か」まで判定してくれるよ。
ひよこ ひよこ
フィーチャーフラグとカナリアリリースは何が違うの?
ペンギン先生 ペンギン先生
カナリアリリースは「デプロイ(インフラ)のレベル」でトラフィックを分ける手法で、フィーチャーフラグは「アプリケーションのコードレベル」で機能のON/OFFを切り替える手法。組み合わせて使うことも多いよ。たとえばカナリアリリースで新バージョンをデプロイしつつ、特定の機能だけフィーチャーフラグで段階的に有効化する、なんてこともできるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「カナリアリリース」って出てきたら「新バージョンをまず少数のユーザーに試して安全を確認してから全体に広げるデプロイ方法だな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Canary Release」 = カナリア(小鳥)のリリース
💬 炭鉱でカナリアを連れて有毒ガスを検知したことに由来。新バージョンが「カナリア」役で問題を先に検知するよ
← 用語集にもどる