0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デプロイ・テスト戦略を整理する

Last updated at Posted at 2025-03-14

はじめに

GoogleCloudの Professional Cloud DeveloperProfessional Cloud Architect の試験対策をしていると、デプロイ・テスト戦略についての知識が問われる事が多かった為、整理しておこうと思います。

デプロイ戦略

①インプレースデプロイ

既存の環境に対して新しいバージョンを上書きしてリリースする手法。
新規のアプリケーションのバージョンをデプロイする際には、既存のアプリケーションのバージョンを完全にダウンさせてから、新規のアプリケーションのバージョンをデプロイします。

【メリット】

  • シンプルなデプロイ手法
  • 複数のアプリケーションのバージョンを管理する必要がないため、データやアプリケーションの下位互換性の問題を回避することができる
  • 低コスト
  • デプロイ時間が短い

【デメリット】

  • ダウンタイムが発生する
  • 新しいバージョンに不具合が見つかった場合のロールバックが大変
  • 大規模なリリースには向いていない

②Blue/Greenデプロイ

稼働中環境(Blue環境)とは別に新環境(Green環境)を用意し、新環境に対して新バージョンをデプロイする方法です。
動作確認が問題なければ、稼働中サーバー(Blue環境)を切り離して、新環境(Green環境)に接続して新バージョンを公開します。

【メリット】

  • ユーザトラフィックを一気に切り替えるため、ダウンタイム無しでデプロイできる
  • 新規バージョンに不具合があった場合は、旧バージョンにロールバックすることができる
  • 既存環境と新環境が分離されるため、デプロイ時のリスクが軽減される

【デメリット】

  • 旧環境と新環境が必要になるため、高コストであり運用上のオーバヘッドがかかる
  • 下位互換性が必要となる
    旧環境と新環境において下位互換性がない場合、共通に利用するデータに不可逆な変更を与えてしまう可能性があり、その場合、旧環境への切り戻しが不可能になる可能性がある
    データベースの扱いが難易度高い

③イミュータブルデプロイ

Blue/Greenデプロイと同じく既存環境と新環境、2つの環境を用意しますが、新環境へと切り替えが済んだ際には既存環境は削除します。

【メリット】

  • 古い環境を運用し続けるコストがかからない

【デメリット】

  • ロールバックする場合は再度旧バージョンをデプロイする必要がある
    すぐに元には戻せない

④カナリアリリース(カナリーデプロイ)

Blue/Greenデプロイと同じく既存環境と新環境、2つの環境を用意し、新しいバージョンを一部の特定ユーザーのみルーティングし公開することで、様子見をしながら徐々に全体に展開する手法。
リリースに関わるトラブルのリスク軽減が目的です。
特定のユーザーの選定についてはロードバランサやプロキシ単位、アプリケーション上の設定やユーザーの使用地域といった情報をもとにコントロールすることも可能です。

Google と Netflix によって共同開発されたオープンソースとして、カナリアリリース分析ツール「Kayenta」があります。

【メリット】

  • ダウンタイムが無い
  • 本番環境でのテストが可能
  • リスクを最小限に抑えながら早期のエラー発見
  • 旧バージョンも動いているためロールバックがすぐに可能

【デメリット】

  • 新バージョンの完全な公開までに時間がかかる
  • 新旧バージョンの管理や公開範囲の管理が必要となり、運用コストが高い
  • 下位互換性が必要となる

⑤ローリングアップデート

サーバーを一つずつ順番に切り離して、段階的に順次デプロイを実施していく方法です。
KubernetesのDeploymentによるPodのデプロイはローリングアップデートが使用されています。

【メリット】

  • ダウンタイム無し
  • 新規のアプリケーションにバグがあった場合、一部のユーザにしか影響がない
  • 旧バージョンも動いているためロールバックがしやすい

【デメリット】

  • 新旧バージョンが混在するため、バージョン管理のコストが高くなる
  • ユーザがどちらのバージョンにもアクセスする可能性があり、新旧バージョンでの下位互換性が必要
  • デプロイに時間がかかる
  • デプロイ時に問題があった場合ロールバックに時間がかかる

⑥シンボリックリンクデプロイ

Blue/Greenデプロイやイミュータブルデプロイとは異なり、1つのサーバーのみを使用します。
サーバー環境は1つですが、その中に既存環境と新規環境の仮想環境を2つ作るデプロイ手法です。
デプロイが一通り完了した後に、「Symbolic link」により、環境を新規環境へ移行します。

【メリット】

  • リソースが少なく済み、運用コストが削減できる
  • デプロイ作業の自動化が容易に行える

【デメリット】

  • サーバーの再起動が必要な場合があり、場合によってはダウンタイムが発生する
  • 稼働中のサーバに対して作業を行うため、作業のミスにより複数のシステムへの影響が生じる可能性あり

テスト戦略

①A/Bテスト

同時に複数バージョンを公開し、結果を基に最も効果的なバージョンを選択するテスト方法です。
デザインや広告などマーケティングで主に利用されます。
位置情報やユーザーエージェントなどの情報に基づいてトラフィックをルーティングします。

カナリアリリースとの違いは、A/Bテストは「どのバージョンがユーザーに最も良い反応を示すか」を比較するのに対し、カナリアリリースは「新バージョンに問題がないか」を検証する手法です。
つまり、カナリアリリースとA/Bテストは補完的な関係にあり、同時に使用することで効果的なアプリケーション改善が可能となります。

【メリット】

  • 運用がしやすい
    複数パターンを作成し、それらを比較して、どちらがより高いエンゲージメント率やCVRを出すのかを容易に確認できる
  • コストがかかりづらい
    Webページなどの現状を一部変更して実施できるので、他の施策と比べてコストが低いと言えます

【デメリット】

  • 検証に時間がかかる
    ある程度のサンプル数がないとデータの正確性を確保できない
  • 有益な結果が得られない可能性がある
    仮説の内容によっては誤った方向へサイトを運営してまう

②シャドーテスト(シャドウトラフィックテスト/シャドーイング)

本番トラフィックを検証環境へミラーリング(分割 or 転送)することで、負荷テスト・リグレッションテストを実施できる。
A/Bテストをシステムテスト特化したものと考えれば良い。

【メリット】

  • 本番環境への影響がない
  • 本番環境の負荷を利用したテストが可能

【デメリット】

  • コストと運用オーバヘッドがかかる
    Blue/Greenデプロイと同様に、旧環境と新環境が必要になるため、運用上のオーバヘッドとコストがかかる
  • サードパーティ製ツールとの連携時に不具合を起こす可能性がある
    ショッピングカートプラットフォームの支払いサービスに対してシャドーテストすると、トラフィックを複製しているため、注文に対して2回の支払いを行うことになる可能性がある

最後に

最後まで読んで頂きありがとうございます。
無事に、 Professional Cloud Developer、Professional Cloud Architect の2つの試験に合格する事ができました。

参考

https://sreake.com/blog/release-engineer/
https://zenn.dev/hi_ka_ru/articles/deploy-test-pattern-20240513
https://www.softbank.jp/biz/blog/cloud-technology/articles/202303/deployment/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?