標準の転送ルールで要件を満たせない場合は、AScript を使用してカスタム転送ロジックを作成します。このトピックでは、AScript の仕組みを説明し、そのルールの設定方法を示します。
AScript 機能はホワイトリスト登録制です。スクリプトの追加または変更については、アカウントマネージャーにお問い合わせください。
AScript の概要
AScript は、Application Load Balancer (ALB) のプログラマブルなスクリプト機能です。組み込み変数、条件文、関数ライブラリが含まれており、カスタム転送ロジックを記述するために使用します。典型的なユースケースは次のとおりです。
-
カスタム認証:リクエストパラメーター、Cookie、またはカスタムアルゴリズムに基づくホットリンク保護を実装したり、User-Agent のブロックリストや Referer の許可リストなどを設定したりします。
-
IP ベースのブロックリストと許可リストを作成してアクセスを制御します。
-
リクエストパラメーターやリクエストヘッダーなどの変数を変更します。
-
URL リライトとリダイレクト:URI やファイル拡張子のリライト、または 302 ステータスコードでリクエストを異なるアドレスに条件付きでリダイレクトします。
AScript の構文と組み込み変数の詳細については、「AScript 構文と変数リファレンス」をご参照ください。例については、「AScript ユースケース」をご参照ください。
仕組み
AScript ルールは、標準の転送ルールと同様に、ALB リクエストの処理に使用されます。クライアントリクエストが ALB のリスナーに到達すると、ALB は設定された転送ルールに従ってリクエストを処理します。AScript ルールは、標準の転送ルールの処理前または処理後に実行できます。
AScript はリスナーごとに動作するように設計されており、さまざまなビジネスロジックを個別のルールに分離できます。各ルールは、次のいずれかの実行ポイントで実行できます。
-
インバウンド転送ルールの実行前または実行後:ファイルの自動リネーム、ファイル拡張子の小文字への変換、URI プレフィックスの追加、ファイル拡張子のリライトなどのシナリオで一般的に使用されます。
-
アウトバウンド転送ルール実行の前:ファイルの自動リネームなどのシナリオで一般的に使用されます。
前提条件
AScript ルールの追加
最初に本番環境以外のリスナーで AScript ルールをテストしてください。トラフィックが正しく転送されることを確認した後、本番環境のリスナーにルールを適用してください。
-
ALB コンソールの インスタンス ページにログインし、対象インスタンスの 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 はデバッグレスポンスヘッダーを有効にして、ルール実行の記録を出力します。デバッグレスポンスヘッダーには、次のフィールドが含まれます。-
ルール ID:ルールの一意の識別子で、
as-****の形式です。 -
実行ステータスコードと説明:
実行ステータスコード
説明
空
実行されていません。
0
実行され、一致しました。
ルールに
if condition {}ブロックが含まれ、conditionが true と評価された場合に発生します。1
実行されましたが、一致しませんでした。
ルールに
if condition {}ブロックが含まれ、conditionが false と評価された場合、またはルールにif condition {}ブロックが含まれていない場合に発生します。2
実行例外。
-
実行時間:マイクロ秒 (us) 単位の実行時間です。デフォルト値は -1 です。
-
実行の中断:スクリプトの実行が中断されたかどうかを示します。デフォルト値は -1 です。
-
-
AScript ルールの管理
[転送ルール] タブで、AScript ルールに対して次の操作を実行できます。
-
ルール ID の横にあるスイッチをクリックして、ルールを有効または無効にします。
-
[AScript] カードの右上隅にある 変更 をクリックして、ルール設定を変更します。
-
[AScript] カードの右上隅にある 削除 をクリックし、ダイアログボックスで OK をクリックします。
課金
AScript ルールは、Loadbalancer Capacity Unit (LCU) の課金に使用されるメトリクスであるルール評価数に影響します。詳細については、「ALB の課金」をご参照ください。