本記事は
AWSアワード受賞者祭り
9日目の記事です。
✨🏆
8日目
▶▶ 本記事 ▶▶
10日目
🏆✨

はじめに
AWSアワード受賞者祭りということで投稿させていただきます。北野と申します。 この度は、2025 Japan All AWS Certifications Engineers に選出いただきました。 約4年前にクラウドエンジニアへ転向した際には、すべての認定資格を取得できるとは思ってもいませんでしたが、チームの素晴らしい仲間、上司に支えられここまでやって来られたと思っております。感謝申し上げます。
今回はAmazon Route 53サービスの加重ルーティング機能を用いたリリース方式に関して紹介します。
想定するシーン
昨今EC2で運用しているwebサービスをserverless(API Gateway + Lambda)やECS Fargateに移行するといったシーンは多くあります。 その中で必ず課題となってくるのは切り替えです。 切り替えをできるだけ安全かつシームレスに行うことで、作業におけるサービスへの影響を最小限に抑えるといった要求はどのサービスでも求められることかと思います。
加重ルーティングとは
ここでご紹介したいのがAmazon Route 53の機能である加重ルーティングです。 加重ルーティングは、複数のリソース(例:Webサーバー、APIエンドポイントなど)に対して、トラフィックの分配割合を制御する方法です。

イメージとしては上記の図のような形です。この方法を使用することで、新しい構成に少しだけトラフィックを流して問題がないことを確認してから徐々にトラフィックを新構成に移行していく、といったCanary Releaseという方法で切り替えることができます。
設定方法
設定方法をご紹介します。 すでに稼働中のサービスが存在し、Amazon Route 53にて名前解決が行われている(すでにAmazon Route 53にホストゾーンと既存サービスのAliasレコードが登録されている)ことを前提とします。
まずAWSマネジメントコンソールからAmazon Route 53の画面を開きます。
対象のホストゾーンを選択し、現在公開中のサービスのAmazon Route 53レコードを選択します。

「レコードを編集」をクリック

レコードタイプをクリックすると「加重」が選択できるので加重を選択します。

「重量」が入力できるので、現行のサービスに流すトラフィックの比率を入力します。ここでは99:1に設定したいので99と入力します。
(この値は0 ~255の値を設定でき、0であれば全くトラフィックを流さないといった設定もできます)

最後に「レコードID」を入力します。
レコードIDとは、シンプル以外のルーティングポリシーを持つレコードに関して同じ名前とタイプを持つ各レコードを一意に識別する値です。
こちらは必須項目になります。ここでは現行のサービスというところで「current-prod」と入力します。

「保存」を押すとレコードのタイプが加重に変更されており、入力した重量が表示されていることがわかります。

次に新しいサービスのレコードを作成します。
画面上部の「レコードを作成」をクリックします。

レコードの作成画面が表示されますので、新しいサービスのレコードを登録します。

| 項目 | 内容 |
|---|---|
| レコード名 | 現行のサービスと同じレコード名を登録します。 |
| レコードタイプ | Aレコードを選択します。 |
| エイリアス | 有効にします。 |
| トラフィックのルーティング先 | 新しいサービスのELB情報を選択します。 |
| ルーティングポリシー | 加重を選択します。 |
| 重量 | 1を設定します。 |
| レコードID | ここではprod-newを設定します。 |
設定が完了したら「レコードを作成」をクリックします。

現行サービスと同じレコード名を持つ、新サービスのレコードが登録されました

こちらの設定で新サービスに1,現行サービスに99の割合でトラフィックが振り分けられます。 あとは同様の手順で新サービスの加重を増やすなどの操作を行うことで徐々に新サービスへの切り替えを実施することができます。
採用するメリット
- 切り替え先に少ないトラフィックを流しつつログを確認し、正常であることを確認した後に切り替えることができます。(Canary Release)
- 切り戻しが容易になります。少数流したトラフィックに異常が発見された場合、加重を0に設定することでトラフィックの振り分けを停止することができます。
注意点
UIがあるサービスなど、ステートフルなサービスに関しては注意が必要です。新しいサービスに振り分けられることでセッションが切断されたり問題が発生する場合があります。
まとめ
今後EC2で作成したサービスを別のプラットフォームに移行するといったシーンは少なからずあるかと思います。 その時の切り替え方式の選択肢として加重ルーティングを検討してみてはいかがでしょうか? 私自身直近担当した案件でEC2→ serverless,EC2→ECS(Fargate)の切り替えを行いましたが、いずれも加重ルーティングでの切り替えを実施して無停止での切り替えを実現することができました。