このトピックでは、Application Load Balancer (ALB) リスナーの転送ルールを設定し、条件に基づきクライアントリクエストを異なるバックエンドサーバーグループにルーティングしたり、バックエンドの応答をクライアントに返す前に処理したりする方法を説明します。
転送ルール
ALB インスタンスのリスナーに複数の転送ルールを追加できます。転送ルールは条件とアクションで構成されます。条件ではリクエストまたはレスポンス内で照合する内容を定義し、アクションでは一致が見つかった場合に実行する処理を定義します。
転送ルールは、トラフィックの方向に基づいてインバウンド転送ルールまたはアウトバウンド転送ルールに分類されます。Basic インスタンスはインバウンド転送ルールのみをサポートします。Standard および WAF-enabled インスタンスは、インバウンド転送ルールとアウトバウンド転送ルールの両方をサポートします。
-
ALB インスタンスの標準版および WAF 有効版では、クライアントが ALB にリクエストを送信すると、ALB は インバウンド転送ルールに基づいてリクエストデータを処理し、対応するバックエンドサーバーにデータを送信します。バックエンドサーバーからのレスポンスデータは、次に ALB の アウトバウンド転送ルールによって処理され、クライアントに返されます。
-
インバウンド転送ルール:インバウンド条件とアクションのみを設定できます。
-
アウトバウンド転送ルール:アウトバウンド条件とアクションを設定できます。また、インバウンド条件を追加することもできます。
各転送ルールには、クライアントリクエストが中断されないように、必ず転送、リダイレクト、または固定レスポンスを返すアクション (インスタンスタイプでサポートされている場合) を含める必要があります。
表 1. Basic インスタンスでサポートされる転送ルール
|
方向 |
条件 |
アクション |
|
インバウンド |
[ドメイン名]、[パス]、および [HTTP ヘッダー] |
[転送]および[リダイレクト] |
表 2. Standard および WAF-enabled インスタンスでサポートされる転送ルール
|
方向 |
条件 |
アクション |
|
インバウンド |
[ドメイン名]、[パス]、[HTTP ヘッダー]、[クエリ文字列]、[HTTP リクエストメソッド]、クッキー、および ソース IP |
[転送]、[リダイレクト]、[固定レスポンスを返す]、[書き換え]、[ヘッダーの追加]、[ヘッダーの削除]、[トラフィック調整]、[トラフィックミラーリング]、および [CORS] |
|
アウトバウンド |
|
[固定レスポンスを返す]、[ヘッダーの追加]、および[ヘッダーの削除] |
マッチング原則
マッチングポリシー:ALB は、各クライアントリクエストを優先度に基づいて転送ルールと照合し、評価します。ルール番号が小さいほど、優先度が高くなります。リクエストが転送ルールのすべての条件に一致すると、ALB はそのルールのアクションを実行し、後続のルールの評価を停止します。
-
インバウンドのクライアントリクエストがカスタム転送ルールのいずれにも一致しない場合、デフォルトの転送ルールがリクエストを処理します。
-
アウトバウンドレスポンスがいずれの転送ルールにも一致しない場合、ALB はレスポンスを直接クライアントに返します。
ALB は転送ルールを厳密に優先度順に評価し、ドメイン名やパスの具体性に基づいて自動的にソートすることはありません。完全一致のドメイン名など、より具体的なルールで最初にリクエストを照合したい場合は、ワイルドカードや正規表現を使用するルールよりも低い優先度番号を手動で割り当てる必要があります。このマッチング原則は、最長プレフィックス一致を使用する Nginx や、ドメイン名の具体性に基づいてルールを自動的にソートする CLB とは異なります。
デフォルトの転送ルール:リスナーを作成すると、システムはインバウンドトラフィック用のデフォルトの転送ルールを自動的に作成します。このルールの転送条件は - で、すべてのクライアントリクエストに一致します。その転送アクションは、リスナーに設定されたサーバーグループへのトラフィックの[転送]です。
-
デフォルトの転送ルールは削除できませんが、転送アクションのサーバーグループは変更できます。
-
デフォルトの転送ルールは優先度が最も低く、この優先度は変更できません。
予期しないリクエストを処理するために、より柔軟なキャッチオールルールが必要な場合は、パス条件を /* に設定した転送ルールを作成できます。これはすべてのパスに一致します。アクションとして、404 または 403 のステータスコードで固定レスポンスを返すようにルールを設定します。ルールを作成したら、ルールリストの最後から 2 番目の位置、つまりデフォルトルールの直前にドラッグします。
転送条件間の論理関係:異なるタイプの条件間には論理 AND が適用され、同じ条件タイプの複数の値間には論理 OR が適用されます。
-
異なる条件間の AND ロジック:たとえば、ルールにドメイン名条件
*.example.comとパス条件/api/*がある場合、リクエストがルールに一致するには両方の条件を満たす必要があります。 -
複数の値間の OR ロジック:たとえば、ドメイン名条件に
www.example.comとwww.test.comの 2 つの値を追加した場合、リクエストのドメイン名がいずれかの値に一致すれば、条件を満たします。
以下の例は、複数の転送ルールがどのように評価されるかを示しています。
|
優先度 |
転送条件 |
転送アクション |
説明 |
|
1 |
ドメイン名: |
サーバーグループ A に転送 |
完全一致のドメイン名 + ワイルドカードパス、最高優先度。 |
|
2 |
ドメイン名: |
サーバーグループ B に転送 |
完全一致のドメイン名 + すべてのパス、2 番目に高い優先度。 |
|
3 |
ドメイン名: |
サーバーグループ C に転送 |
ワイルドカードドメイン名、3 番目に高い優先度。 |
|
デフォルト |
- (すべてのリクエストに一致) |
サーバーグループ D に転送 |
キャッチオールルール、最低優先度。 |
-
api.example.com/v2/usersへのリクエストはルール 1 に一致し、サーバーグループ A に転送されます。 -
api.example.com/v1/usersへのリクエストは、パスが/v2/*に一致しないため、ルール 1 には一致しません。ルール 2 に一致し、サーバーグループ B に転送されます。 -
web.example.com/indexへのリクエストは、ドメイン名が異なるため、ルール 1 またはルール 2 には一致しません。ルール 3 に一致し、サーバーグループ C に転送されます。 -
other.com/pageへのリクエストは、カスタムルールのいずれにも一致せず、デフォルトの転送ルールがサーバーグループ D に転送します。
前提条件
-
ALB インスタンスとサーバーグループが作成され、サーバーグループにバックエンドサーバーが追加されています。
-
ALB インスタンスのリスナーが設定され、サーバーグループに関連付けられています。
転送ルールの追加
リスナーを作成する際に、そのデフォルトの転送ルールを定義します。リスナーの作成後、さらに転送ルールを追加することもできます。
-
ALB コンソールの[インスタンス] ページに移動し、対象のインスタンスの ID をクリックします。
-
転送ルール タブで、インバウンド転送ルール または アウトバウンド転送ルール を選択し、新しいルールの追加 をクリックして、次のパラメーターを設定してから 保存 をクリックします。
インバウンドルール
[ルール名]
任意。このパラメーターを空のままにすると、システムが自動的に名前を生成します。
[転送条件]
条件タイプを選択して、次の条件を 1 つ以上追加します。また、条件の追加 をクリックして、複数の条件を追加することもできます。
-
[ドメイン名]:1 つ以上のドメイン名を追加します。ドメイン名は 3~256 文字の長さで、アスタリスク (*) や疑問符 (?) などのワイルドカード文字を含めることができます。アスタリスク (*) は任意の文字列に一致し、疑問符 (?) は 1 文字に一致します。サポートされている一致タイプには、完全一致、ワイルドカード一致、正規表現一致があります。ドメイン名の設定ルールの詳細については、「転送ルールの設定例とドメイン名およびパスの一致ルール」をご参照ください。
-
完全一致:リクエストのドメイン名は、指定されたドメイン名と完全に一致する必要があります。例:
www.example.com。 -
ワイルドカード一致:アスタリスク (
*) はドット (.) を含む任意の文字列に、疑問符 (?) は単一の文字に一致します。例:*.example.comはapi.example.comとwww.example.comに一致します。 -
正規表現一致:ドメイン名の一致に正規表現を使用します。一致では大文字と小文字は区別されません。例:
^www\.example\.(com|cn)$は、.comまたは.cnで終わるドメイン名に一致します。
-
-
[パス]:1 つ以上のパスを追加します。正規表現パスと非正規表現パスの両方がサポートされています。パス設定ルールの詳細については、「転送ルールの設定例とドメイン名およびパスの一致ルール」をご参照ください。
-
完全一致:例:
/api/v1/usersは、そのパスにのみ完全に一致します。 -
ワイルドカード一致:例:
/api/*は、サブパスを含む/api/で始まるすべてのパスに一致します。/*はすべてのパスに一致します。パスの一致では大文字と小文字が区別されます。 -
正規表現一致:例:
^/api/(.*)/list$は、/api/で始まり/listで終わるパスに一致します。正規表現パスの一致で大文字と小文字を区別するかどうかを選択できます。
-
-
[HTTP ヘッダー]:キー フィールドに HTTP ヘッダー名を入力し、値 フィールドにその値を入力します。複数のヘッダー値を追加できます。ヘッダーキーは 1~40 文字の長さで、英字、数字、アンダースコア (_)、ハイフン (-) のみを含めることができます。一致では大文字と小文字は区別されません。ヘッダー値は 1~128 文字の長さで、印刷可能な文字を含めることができます。値の先頭または末尾にスペースは使用できません。アスタリスク (*) や疑問符 (?) などのワイルドカード文字を使用できます。
例:キーが
user-agent、値が*Mozilla/4.0*の場合、この設定は値にMozilla/4.0が含まれるすべてのリクエストに一致します。 -
[クエリ文字列]:クエリ文字列のキーと値のペアを 1 つ以上追加します。キーの長さは 1~100 文字、値の長さは 1~128 文字です。小文字 (入力は小文字のみ受け付けられますが、一致では大文字と小文字は区別されません)、アスタリスク (*)、疑問符 (?) などの表示可能な文字を使用できます。スペースや、
#[]{}\|<>&などの特殊文字はサポートされていません。例:URL が
www.example.com/test/test1?x=1&y=2の場合、条件をx:1またはy:2として設定できます。 -
[HTTP リクエストメソッド]:1 つ以上の HTTP リクエストメソッドを追加します。有効な値は HEAD、GET、POST、OPTIONS、PUT、PATCH、DELETE です。
-
クッキー:1 つ以上のクッキーを追加します。キーの長さは 1~100 文字、値の長さは 1~128 文字です。小文字 (入力は小文字のみ受け付けられますが、一致では大文字と小文字は区別されません)、アスタリスク (*)、疑問符 (?) などの表示可能な文字を使用できます。スペースや、
[]{}<>\#|&などの特殊文字はサポートされていません。例:キーが
key、値がvalue。 -
ソース IP:1 つ以上の IP アドレスまたは CIDR ブロックを追加します。0.0.0.0/x (x は数字です) の形式の CIDR ブロックはサポートされていません。
例:
192.168.1.1/32
[転送操作]
アクションタイプを選択して、次のアクションを 1 つ以上追加します。また、操作の追加 をクリックして、複数のアクションを追加することもできます。
-
[転送]:リストからターゲットサーバーグループを選択します。サポートされているサーバーグループタイプは、サーバー、IP、Function Compute です。複数のサーバーグループを追加し、各サーバーグループに 重み を設定して、トラフィックの分散比率を制御できます。デフォルトでは、単一のサーバーグループの重みの範囲は 0~100 です。複数のサーバーグループを追加する場合は、サーバーグループのセッション永続性 を有効にできます。この機能を使用するには、追加したすべてのサーバーグループでセッション維持を有効にする必要があります。
複数のサーバーグループを追加する場合、HTTP や HTTPS など、異なるバックエンドプロトコルを使用するサーバーグループを選択できます。
単一のサーバーグループの最大重みは 10,000 まで増やすことができます。この引き上げをリクエストするには、アカウントマネージャーにお問い合わせください。
-
[リダイレクト]:プロトコル と ステータスコード のドロップダウンリストから、プロトコルとステータスコードを選択します。次に、宛先の ドメイン名、ポート、パス、クエリ を指定します。プロトコル、ドメイン名、ポート、パス、または クエリ のいずれかのパラメーターに、デフォルト以外の値を指定する必要があります。
リダイレクト アクションの パス パラメーターの高度な設定ルールについては、「書き換えとリダイレクトの高度なパス設定」をご参照ください。
${host}、${path}、${port}、${protocol}、${query}などのフィールドのデフォルト値は、リクエスト内の対応する値を参照します。パスフィールドでは、${host}、${path}、${port}、${protocol}、および${1}、${2}、${3}などの正規表現キャプチャグループ変数への参照のみ使用できます。その他の$変数は使用できません。ステータスコードの詳細については、「標準 HTTP ステータスコード」をご参照ください。
-
[固定レスポンスを返す]:レスポンスステータスコード を入力します。応答コンテンツタイプ (オプション) と 応答コンテンツ (オプション) を指定することもできます。レスポンスステータスコードは、
2xx、4xx、または5xx形式の数字の文字列である必要があります。ここでxは数字を表します。 -
[書き換え]:リクエストがバックエンドサーバーに転送される前に、リクエストの ドメイン名、パス、または クエリ を指定された値に変更します。クライアントのブラウザのアドレスバーの URL は変更されません。
書き換え アクションは、転送 アクションと併用した場合にのみ有効になります。
書き換え と リダイレクト の違い:書き換えは、バックエンドサーバーが受け取るパスを変更する内部的な ALB 操作です。クライアントの URL は変更されません。リダイレクトは 3xx ステータスコードを返し、クライアントのブラウザを新しい URL へ遷移させます。
例:
/app/pageを/v2/pageに書き換えるには、完全一致方式を使用してパス条件を/app/pageに設定し、書き換えパスを/v2/pageに設定します。/app/配下のすべてのサブパスを照合して書き換えるには、正規表現を使用します。詳細については、「書き換えとリダイレクトのための高度なパス設定」をご参照ください。書き換えパスでは、
$文字は、${host}、${path}、${port}、${protocol}、および${1}、${2}、${3}などの正規表現キャプチャグループ変数の参照にのみ使用できます。その他の変数は使用できません。 -
[ヘッダーの追加]:ヘッダー名と値を入力します。このアクションは、同じ名前の既存のリクエストヘッダーを上書きします。ヘッダーキーは 1~40 文字の長さで、英字、数字、アンダースコア (_)、ハイフン (-) を含めることができます。ヘッダー値は 1~128 文字の長さで、英字、数字、および一般的な句読点を含めることができます。値の先頭または末尾にスペースは使用できません。
-
[ヘッダーの削除]:ヘッダー名を入力して、リクエストヘッダーから対応するキーと値のペアを削除します。
インバウンドの ヘッダーの追加 および ヘッダーの削除 アクションを使用する場合、以下のヘッダー名は指定できません。一致では大文字と小文字は区別されません。これらのヘッダーは ALB によって予約されているか、HTTP プロトコルにおいて重要です。これらを変更すると、リクエストの転送エラーや接続の中断が発生する可能性があります。
slb-id、slb-ip、x-forwarded-for、x-forwarded-proto、x-forwarded-eip、x-forwarded-port、x-forwarded-client-srcport、x-forwarded-host、connection、upgrade、content-length、transfer-encoding、keep-alive、te、host、cookie、remoteip、authority。 -
[トラフィック調整]:ビジネス要件に基づいて、次のパラメーターを設定します。
-
[QPS (合計)]:1 秒あたりのクエリ数を指定します。有効な値:1~1,000,000。
-
[QPS (クライアント IP あたり)]:各ソース IP アドレスの QPS 制限を指定します。有効な値:1~1,000,000。QPS (合計) と QPS (クライアント IP あたり) の両方を設定する場合、QPS (クライアント IP ごと) の値は QPS (合計) の値より小さくする必要があります。
トラフィック調整 アクションは、転送 アクションと併用する必要があります。QPS 制限内のリクエストは、ターゲットサーバーグループに転送されます。デフォルトでは、ALB は QPS 制限を超えたリクエストに対して 503 ステータスコードを返します。または、リダイレクト または 固定レスポンスを返す アクションを追加して、これらのリクエストを処理することもできます。
QPS (クライアント IP あたり) を有効にすると、ALB は X-Forwarded-For ヘッダーから送信元 IP アドレスを取得します。リクエストが複数のプロキシを経由する場合は、リスナーの 実際のクライアントソース IP を見つける を有効にして、ALB が正しいクライアントの送信元 IP アドレスを取得できるようにします。詳細については、「リスナーの作成と管理」をご参照ください。
-
-
[トラフィックミラーリング]:リストからターゲットサーバーグループを選択します。[サーバー] または [IP] サーバーグループを選択できます。
-
[CORS]:クロスオリジンリソース共有 (CORS) ポリシーを設定します。ALB は OPTIONS プリフライトリクエストを自動的に処理し、CORS レスポンスヘッダーを返します。その結果、バックエンドサーバーは CORS リクエストを処理する必要がなくなります。CORS アクションは、ヘッダーの追加 アクションを使用して
Access-Control-Allow-Originなどのレスポンスヘッダーを手動で設定するよりも設定が簡単です。-
[許可された配信元]:ブラウザからのリソースアクセスを許可するオリジンを指定します。
-
[許可されたメソッド]:クロスオリジンリクエストで許可される HTTP メソッドを選択します。有効な値:GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH。
-
[許可されたリクエストヘッダー]:ブラウザがサポートする基本ヘッダーに加えて、クロスオリジンリクエストで許可されるヘッダーを指定します。
-
[許可されたレスポンスヘッダー]:ブラウザや JavaScript がアクセスできるレスポンスヘッダーを指定します。
-
[資格情報を許可]:クロスオリジンリクエストに認証情報を含めることを許可するかどうかを指定します。デフォルト値は 許可 です。
-
[ブラウザーキャッシュ時間]:プリフライトリクエストの場合、OPTIONS プリフライトリクエストの結果をブラウザにキャッシュできる最大期間を指定します。単位:秒。有効な値:-1~172800。
-
アウトバウンドルール
[ルール名]
任意。このパラメーターを空のままにすると、システムが自動的に名前を生成します。
[インバウンド条件 (オプション):]
1 つ以上のインバウンド条件を選択します。また、インバウンド条件の追加 をクリックして、複数の条件を追加することもできます。各条件の設定方法については、「インバウンドルール」タブをご参照ください。
インバウンド転送ルールで 書き換え アクションを設定した場合、アウトバウンド転送ルールに追加するインバウンド条件 (ドメイン名、パス、クエリ文字列 など) は、クライアントリクエストの元の値ではなく、書き換えられた値と一致する必要があります。たとえば、インバウンドルールがパスを/app/pageから/v2/pageに書き換える場合、アウトバウンドルールのパス条件を/v2/pageに設定する必要があります。
[アウトバウンド条件]
1 つ以上のアウトバウンド条件を選択します。また、アウトバウンド条件の追加 をクリックして、複数の条件を追加することもできます。
-
[レスポンスステータスコード]:クライアントへのレスポンスのステータスコード。有効な値:100~599。範囲を指定できます。複数のステータスコードと範囲はカンマ (,) で区切ります。例:200-233,301。
-
[レスポンスヘッダー]:バックエンドレスポンスの HTTP ヘッダー。キー フィールドに HTTP ヘッダー名を入力し、値 フィールドにその値を入力します。複数のヘッダーを追加できます。
[転送操作]
アウトバウンドのアクションタイプを選択します。また、操作の追加 をクリックして、複数のアクションを追加することもできます。
-
[固定レスポンスを返す]:レスポンスステータスコード を入力します。応答コンテンツタイプ (オプション) と 応答コンテンツ (オプション) を指定することもできます。レスポンスステータスコードは、2xx、4xx、または 5xx 形式の数字の文字列である必要があります。ここで x は数字を表します。
-
[ヘッダーの追加]:アウトバウンドのヘッダー名と値を入力します。このアクションは、同じ名前の既存のレスポンスヘッダーを上書きします。
-
[ヘッダーの削除]:アウトバウンドのヘッダー名を入力して、レスポンスから対応するキーと値のペアを削除します。
アウトバウンドの ヘッダーの追加 および ヘッダーの削除 アクションを使用する場合、以下のヘッダー名は指定できません。一致では大文字と小文字は区別されません。これらのヘッダーは HTTP プロトコルにおいて重要です。これらを変更すると、レスポンス送信に問題が発生する可能性があります。
connection、upgrade、content-length、transfer-encoding。
AScript
{value, select, RequestHead {転送ルールの適用前にスクリプトを追加} RequestFoot { {転送ルールの適用後にスクリプトを追加} ResponseHead {転送ルールの適用前にスクリプトを追加} ResponseFoot {転送ルールの適用後にスクリプトを追加} other { {value} } } または {value, select, RequestHead {転送ルールの適用前にスクリプトを追加} RequestFoot { {転送ルールの適用後にスクリプトを追加} ResponseHead {転送ルールの適用前にスクリプトを追加} ResponseFoot {転送ルールの適用後にスクリプトを追加} other { {value} } } をクリックして、AScript プログラマブルスクリプトを追加できます。AScript は、Standard および WAF-enabled エディションの ALB インスタンスでのみサポートされています。
API
-
CreateRule API を呼び出して、転送ルールを作成します。
-
CreateRules API を呼び出して、転送ルールをバッチで作成します。
転送ルールの管理
転送ルールの編集、削除、または優先度の調整により、既存のトラフィックが中断される可能性があります。これらの操作は、必要な変更を十分に評価およびテストした後、オフピーク時間に実行することを推奨します。
コンソール
-
ALB コンソールの [インスタンス] ページに移動し、ターゲットインスタンスの ID をクリックします。
-
転送ルール タブで、インバウンド転送ルール または アウトバウンド転送ルール を選択し、次のいずれかの操作を行います:
-
転送ルールの編集:対象のルールを見つけて、右上の 編集 をクリックし、設定を変更してから、保存 をクリックします。
-
転送ルールの削除:対象のルールを見つけて、[削除] をクリックし、確認ダイアログボックスで 削除 をクリックします。デフォルトの転送ルールは削除できません。リスナーを削除すると、そのすべての転送ルールも削除されます。
-
転送ルールの優先度の調整:ルールを目的の位置にドラッグし、優先度の変更を保存 をクリックします。ALB は、優先度の昇順でリクエストを転送ルールと照合します。デフォルトの転送ルールの優先度は調整できません。
-
API
-
ListRules を呼び出して、転送ルールをクエリします。
-
UpdateRuleAttribute を呼び出して、転送ルールの属性を更新します。
-
UpdateRulesAttribute を呼び出して、複数の転送ルールの属性を更新します。
-
DeleteRule を呼び出して、転送ルールを削除します。
-
DeleteRules を呼び出して、複数の転送ルールを削除します。
課金
転送ルール自体に直接の料金は発生しませんが、ルール数はルール評価数に影響し、結果としてALB インスタンスのLCU 料金の算出に反映されます。詳細については、「ALB 課金ルール」をご参照ください。
クォータ
調整可能なクォータ
以下のクォータは、ALB インスタンスに追加できる転送ルールの数に関するものです (デフォルトルールを除く)。
|
パラメーター |
説明 |
デフォルト |
最大値 |
調整可能 |
|
|
Basic エディションの ALB インスタンスにおける転送ルールの最大数 (デフォルトルールを除く) |
40 |
100 |
|
|
|
Standard エディションの ALB インスタンスにおける転送ルールの最大数 (デフォルトルールを除く) |
100 |
200 |
|
|
|
WAF-enabled エディションの ALB インスタンスにおける転送ルールの最大数 (デフォルトルールを除く) |
100 |
200 |
転送ルールの制限に近づいた場合は、次のいずれかの方法を検討してください。
-
クォータセンターで転送ルールのクォータ引き上げをリクエストしてください。
-
類似した一致条件を持つ転送ルールを統合してください。同じ一致条件内の複数の値に OR ロジックを使用して、ルール数を削減できます。
-
Basic エディションのインスタンスを Standard エディションまたは WAF-enabled エディションにアップグレードして、より高いクォータを取得してください。
ハードリミット (調整不可)
以下のハードリミットは、転送ルールごとのエントリ数に関するものです。
|
リソース |
エディション |
デフォルトの制限 |
|
転送ルールあたりのアクション数 |
Basic エディション |
3 |
|
Standard エディションまたは WAF-enabled エディション |
5 |
|
|
転送ルールあたりの一致条件数 |
Basic エディション |
5 |
|
Standard エディションまたは WAF-enabled エディション |
10 |
|
|
転送ルールあたりのワイルドカードを含むエントリ数 |
Basic エディション |
5 |
|
Standard エディションまたは WAF-enabled エディション |
10 |