注目の記事

[新機能] HTTPヘッダーやクエリ文字列などなどでルーティングができちゃう!!AWS ALBで高度なリクエストルーティングが可能になりました!

ALBに新機能が登場し、高度なリクエストルーティングが可能になりました!! 従来のホストヘッダー、パスパターンに加えて、HTTPヘッダーとメソッド、クエリ文字列、および送信元IPアドレスによる制御が可能になります!
2019.03.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

おはようございます、加藤です。ALBに新機能が登場し、高度なリクエストルーティングが可能になりました。 従来ALBでもリスナールールを使うことによって以下の要素で転送先を制御可能でした。

※ ポート番号はリスナールールによる制御ではなく、ポート番号毎にリスナーを作成して行う制御なので記載していません。

今回のアップデートで以下による制御も可能になりました!!

上記項目のリンクから詳細仕様のドキュメントに飛べます。

概要

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だけで実現できないか、構成を見直されてはいかがでしょうか?コスト削減 & 運用負担軽減に繋がるかもしれません!