標準の転送ルールで要件を満たせない場合は、AScript を使用してカスタム転送ロジックを作成します。このトピックでは、AScript の仕組みとルールの構成方法について説明します。
AScript の概要
AScript は、ALB のプログラム可能なスクリプト機能です。組み込み変数、条件ステートメント、関数ライブラリが用意されており、カスタム転送ロジックを記述できます。代表的なユースケースは次のとおりです:
カスタム認証:リクエストパラメータ、Cookie、またはカスタムアルゴリズムに基づくホットリンク保護を実装するほか、User-Agent ブロックリスト、Referer 許可リストなどを構成できます。
IP ベースのブロックリストと許可リストを作成してアクセスを制御できます。
リクエストパラメータやリクエストヘッダーなどの変数を変更できます。
URL リライトとリダイレクト:URI やファイル拡張子を書き換えたり、302 ステータスコードで条件に応じてリクエストを別のアドレスにリダイレクトしたりできます。
AScript の構文と組み込み変数の詳細については、「AScript Syntax and Variable Reference」をご参照ください。例については、「AScript Use Cases」をご参照ください。
仕組み
AScript ルールは、標準の転送ルールと同様に、ALB リクエストの処理に使用されます。クライアントリクエストが ALB リスナーに到達すると、ALB は構成済みの転送ルールに基づいてリクエストを処理します。AScript ルールは、標準の転送ルールの処理前または処理後のいずれかで実行できます。
AScript はリスナー単位で動作するよう設計されており、異なるビジネスロジックを別々のルールに分離できます。各ルールは、次のいずれかの実行ポイントで実行できます。
インバウンド転送ルール実行の前/後:自動ファイル名変更、ファイル拡張子の小文字化、URI プレフィックスの追加、ファイル拡張子の書き換えなどのシナリオで一般的に使用されます。
アウトバウンド転送ルール実行の前:自動ファイル名変更などのシナリオで一般的に使用されます。
前提条件
AScript ルールの追加
まず非本番環境のリスナーで AScript ルールをテストしてください。トラフィックが正しく転送されることを確認した後、本番環境のリスナーにルールを適用します。
ALB コンソールの [Instances] ページにログインし、対象インスタンスの ID をクリックします。
リスナー タブで、目的のリスナーの ID をクリックします。転送ルール タブをクリックします。インバウンド転送ルール または アウトバウンド転送ルール をクリックし、次に {value, select, RequestHead {転送ルールの適用前にスクリプトを追加} RequestFoot { {転送ルールの適用後にスクリプトを追加} ResponseHead {転送ルールの適用前にスクリプトを追加} ResponseFoot {転送ルールの適用後にスクリプトを追加} other { {value} } } または {value, select, RequestHead {転送ルールの適用前にスクリプトを追加} RequestFoot { {転送ルールの適用後にスクリプトを追加} ResponseHead {転送ルールの適用前にスクリプトを追加} ResponseFoot {転送ルールの適用後にスクリプトを追加} other { {value} } } をクリックします。
アウトバウンド転送ルール を選択した場合、{value, select, RequestHead {転送ルールの適用前にスクリプトを追加} RequestFoot { {転送ルールの適用後にスクリプトを追加} ResponseHead {転送ルールの適用前にスクリプトを追加} ResponseFoot {転送ルールの適用後にスクリプトを追加} other { {value} } } のみを選択できます。
プログラム可能なスクリプトの追加 ページで、次のパラメーターを設定し、OK をクリックします。
ルール名:カスタムルール名を入力します。
[スクリプトコード]:スクリプトコードを入力するか、コードテンプレート をクリックしてシナリオテンプレートを選択します。 例については、「AScript のユースケース」をご参照ください。
スクリプト実行時刻:スクリプトの実行ポイントです。この値はスクリプトの追加場所によって決まり、変更できません。
ステータス:ルールを有効にするかどうかを指定します。
詳細設定 (オプション):リクエストに
_es_dbgパラメータが含まれ、その値がここで指定したキーと一致する場合、ALB はデバッグレスポンスヘッダーを有効にし、ルール実行記録を出力します。デバッグレスポンスヘッダーには、次のフィールドが含まれます:Rule ID:ルールの一意の識別子です。形式は
as-****です。実行ステータスコードと説明:
実行ステータスコード
説明
Empty
実行されていません。
0
実行され、一致しました。
ルールに
if condition {}ブロックが含まれ、conditionが true と評価された場合に発生します。1
実行されましたが、一致しませんでした。
ルールに
if condition {}ブロックが含まれ、conditionが false と評価された場合、またはルールにif condition {}ブロックが含まれない場合に発生します。2
実行例外。
実行時間:実行時間 (マイクロ秒) です。デフォルト値は -1 です。
中断された実行:スクリプトの実行が中断されたかどうかを示します。デフォルト値は -1 です。
AScript ルールの管理
[Forwarding Rules] タブでは、AScript ルールについて次の操作を実行できます:
ルール ID の横にあるスイッチをクリックして、ルールを有効または無効にします。
ルール設定を変更するには、AScript カードの右上隅にある 変更 をクリックします。
AScript カードの右上隅にある削除をクリックし、次にダイアログボックスで OK をクリックします。
課金
AScript ルールは、Load Balancer Capacity Unit (LCU) の課金で使用される指標であるルール評価数に寄与します。詳細については、「ALB Billing」をご参照ください。