[新機能] HTTPヘッダーやクエリ文字列などなどでルーティングができちゃう!!AWS ALBで高度なリクエストルーティングが可能になりました!
はじめに
おはようございます、加藤です。ALBに新機能が登場し、高度なリクエストルーティングが可能になりました。 従来ALBでもリスナールールを使うことによって以下の要素で転送先を制御可能でした。
※ ポート番号はリスナールールによる制御ではなく、ポート番号毎にリスナーを作成して行う制御なので記載していません。
今回のアップデートで以下による制御も可能になりました!!
- HTTPヘッダー
- Valueにのみ
*
と?
が使用可能 - HTTPリクエストメソッド
- 標準またはカスタムのメソッドを使用可能で
*
は使用不可 - クエリ文字列
*
と?
が使用可能- 送信元IPアドレス
- IPv4, IPv6アドレスをCIDR形式(XXX.XXX.XXX.XXX/XX)で指定可能
上記項目のリンクから詳細仕様のドキュメントに飛べます。
概要
ALBのルーティング機能で、従来のホストヘッダー、パスパターンに加えて、HTTPヘッダーとメソッド、クエリ文字列、および送信元IPアドレスによる制御が可能になります。
条件には、AND
またはOR
を設定する事が可能です。従来は高度なリクエストルーティングを行うにはNginx
などをロードバランサとしてEC2で構築する必要がありましたが、この機能追加によってALBだけで実現が可能になります。
ただし、NOT
条件が使えない事にご注意ください。
想定されるユースケース
ボット/クローラのトラフィックを人のトラフィックから分離します。 顧客または顧客グループをセル(個別のターゲットグループ)に割り当て、それに応じてトラフィックをルーティングします。 A / Bテストを実施する カナリアまたはブルー/グリーン展開を実行してください。 方法に基づいてトラフィックをマイクロサービスハンドラにルーティングします(たとえば、PUTを1つのターゲットグループに、GETを別のターゲットグループに送信します)。 IPアドレスまたはCDNに基づいてアクセス制限を実施します。 トラフィックをオンプレミスまたはクラウド内のターゲットグループに選択的にルーティングします。 さまざまな種類やカテゴリのデバイスにさまざまなページまたはユーザーエクスペリエンスを提供します。
引用元をGoogle翻訳: https://aws.amazon.com/jp/blogs/aws/new-advanced-request-routing-for-aws-application-load-balancers/
やってみた
画像の通りリスナールールを作成し、cURL
コマンドを使って動作を確認してみます。
送信元IPアドレス
curl "http://advanced-request-routing-for-alb-954255211.ap-northeast-1.elb.amazonaws.com" XXX.XXX.XXX.XXX/32からアクセスしています。
HTTPヘッダー(Cookie)
curl --cookie "key=value" "http://advanced-request-routing-for-alb-954255211.ap-northeast-1.elb.amazonaws.com" Cookieに"key=value"が設定されています。
HTTPリクエストメソッド
curl -X POST --cookie "key=value" "http://advanced-request-routing-for-alb-954255211.ap-northeast-1.elb.amazonaws.com" POSTリクエストです。
クエリ文字列
curl -X POST --cookie "key=value" "http://advanced-request-routing-for-alb-954255211.ap-northeast-1.elb.amazonaws.com?query=true" クエリ文字列に"query=true"が設定されています。
まとめ
ALBのルーティング機能が大幅に拡張されました!!今までNginx
などを使ってリクエストルーティングを行っていた方は、ALBだけで実現できないか、構成を見直されてはいかがでしょうか?コスト削減 & 運用負担軽減に繋がるかもしれません!