はじめに
先輩と一緒にデプロイ作業をしていたとき、
「トラフィックの再ルーティングって何かわかる?」と聞かれました。
「サーバーを切り替えてる…みたいなやつですよね?」
AWSをまだあまり触ったことがなく、説明できませんでした。
すべてを曖昧にとらえていたので、デプロイ方法を含めて一語ずつ説明できるようにしていきます。
「トラフィック」「ルーティング」とは
まず言葉の定義から改めて整理します。
「トラフィック」とは
Webの文脈でのトラフィックとは、ネットワーク上を流れるデータ通信(リクエストやレスポンス)の流れを指します。
ユーザーがブラウザで https://example.com にアクセスすると、そのHTTPリクエストとレスポンスがトラフィックです。
「ルーティング」とは
ルーティングとは、トラフィック(通信)を適切な宛先に届けるための経路制御のことです。
具体的には「IPパケットをどの経路で次のネットワークへ送るかを決めること」です。
ただしWebサービスの運用文脈では、「どのサーバーにリクエストを届けるか」という意味で
広く使われることも多いため、この記事ではその意味で説明します。
DNS:アクセス先を決める仕組み
ルーティングを理解するには、DNS(Domain Name System)の仕組みを知っておくと腑に落ちます。
基本的な仕組みは以下のような流れです。
- ユーザーが
example.comにアクセスする - ブラウザがDNSサーバーに「
example.comのIPアドレスは?」と問い合わせる - DNSサーバーが
192.0.2.44を返す - ブラウザがそのIPアドレスのサーバーにリクエストを送る
つまりDNSは「ドメイン名 → IPアドレス」の電話帳のようなもの。
DNSを書き換えるとアクセス先のIPアドレスを変えられます。
※実際にはルートサーバー、TLDサーバー、権威サーバーなど複数のDNSサーバーが連携して名前解決を行っていますが、この記事では簡略化しています。
「再ルーティング」とは
ここまで来れば「再ルーティング」の意味も見えてきます。
トラフィックの再ルーティング = トラフィックの向き先を、あるサーバーから別のサーバーに切り替えること
たとえば、
これまで example.com → サーバーA に向いていたトラフィックを、example.com → サーバーB に切り替える。
ユーザーから見れば同じURLなのに、裏側で応答するサーバーが変わっている、というわけです。
CodeDeployでのBlue/Greenデプロイ
自分がデプロイ作業中に見た「トラフィックの再ルーティング」ボタンは、AWS CodeDeployのBlue/Greenデプロイの機能です。
新しいバージョンのアプリをユーザーに届けるには、トラフィックの向き先を新しいサーバーに切り替える必要があります。
ここで登場するのがBlue/Greenデプロイです。
基本的な考え方
デプロイの方法として最もシンプルなのは、今動いているサーバーのコードを直接書き換えることですが、この方法だと更新中にサービスが止まったり、バグがあったときに戻すのが大変です。
Blue/Greenデプロイはこの問題を、2つの環境を用意することで解決します。
- Blue環境:現在ユーザーにサービスを提供している環境
- Green環境:新しいバージョンをデプロイした環境
2つの独立した環境を用意し、準備ができたらトラフィックをBlueからGreenに切り替える。これがBlue/Greenデプロイの核心です。
仕組み
CodeDeployのBlue/Greenデプロイでは、ロードバランサー(ELB) がトラフィックの切り替えを担います。
ロードバランサーとは
ユーザーからのアクセスを受け取って、背後にある複数のサーバーに振り分ける仕組みです。アクセスが集中しても1台のサーバーに負荷が偏らないように分散してくれます。Blue/Greenデプロイでは、この「どのサーバーに振り分けるか」を切り替えることで、トラフィックの再ルーティングを実現しています。
- 現在の本番環境(Blue)がロードバランサーの背後でトラフィックを処理している
- 新しいバージョンをデプロイした待機環境(Green)を起動する
- 「トラフィックの再ルーティング」で、ロードバランサーの向き先をBlueからGreenに切り替える
- 問題があればBlueに戻す(ロールバック)
ここでいう「トラフィックの再ルーティング」とは、「トラフィックの向き先を、あるサーバーから別のサーバーに切り替えること」です。
AWSの「トラフィックの再ルーティング」ではその処理をロードバランサーが担っています。
まとめ
トラフィックやルーティングという言葉の定義、Blue/Greenデプロイについて詳細に理解していなかったことが説明できなかった要因でした。
今後は「トラフィックの再ルーティングって何?」と聞かれたら、
「ユーザーからのアクセスを処理するサーバーや環境を切り替えること。Blue/Greenデプロイでは、この仕組みを使って旧環境(Blue)から新環境(Green)へトラフィックを切り替えている。」と説明できそうです。
他者に説明できるか?を常に問いとして持っておきたいですね!