ルーティングルールの使用方法
ルーティングルールは、AWS Management Console、AWS CLI、または任意の AWS SDK を使用して作成できます。ルールを作成した後で、その優先度を変更できます。
ルーティングルールを作成する
次の手順は、ルーティングモードが ROUTING_RULE_THEN_API_MAPPING
または ROUTING_RULE_ONLY
に設定されているカスタムドメイン名のルーティングルールを作成する方法を示しています。
- AWS Management Console
https://console.aws.amazon.com/apigateway
で API Gateway コンソールにサインインします。 メインのナビゲーションペインから [Custom Domain Names (カスタムドメイン名)] を選択します。
-
カスタムドメイン名を選択します。
-
[ルーティングの詳細] タブで、[ルーティングルールを追加] を選択します。
-
[新しい条件を追加] を選択して、新しい条件を追加します。
ヘッダーまたはベースパス条件を追加できます。すべての受信リクエストをカスタムドメイン名に一致させるには、条件を追加しないでください。
[アクション] で、ドロップダウンを使用してターゲット API とターゲットステージを選択します。
-
[次へ] を選択します。
優先度フィールドに、優先度の数値を入力します。
API Gateway は、ルールを優先度順 (低い値から高い値の順) に評価します。
条件なしでルールを作成する場合は、高い値の優先度を使用することをお勧めします。
[ルーティングルールを作成] を選択します。
- AWS CLI
-
次の create-routing-rule コマンドは、優先度 50 のルーティングルールを作成します。この例では、API Gateway は、ヘッダー
Hello:World
とx-version:beta
および ベースパスPetStoreShopper
を持つ受信リクエストをターゲット APIa1b2c3
にルーティングします。aws apigatewayv2 create-routing-rule \ --domain-name 'api.example.com' \ --priority 50 \ --conditions '[ { "MatchHeaders": { "AnyOf": [ { "Header": "Hello", "ValueGlob": "World" } ] } }, { "MatchHeaders": { "AnyOf": [ { "Header": "x-version", "ValueGlob": "beta" } ] } }, { "MatchBasePaths": { "AnyOf": [ "PetStoreShopper" ] } } ]'\ --actions '[ { "InvokeApi": { "ApiId": "a1b2c3", "Stage": "prod" } } ]'
出力は次のようになります。
{ "Actions": [ { "InvokeApi": { "ApiId": "a1b2c3", "Stage": "prod", "StripBasePath": false } } ], "Conditions": [ { "MatchHeaders": { "AnyOf": [ { "Header": "Hello", "ValueGlob": "World" } ] } }, { "MatchHeaders": { "AnyOf": [ { "Header": "x-version", "ValueGlob": "beta" } ] } }, { "MatchBasePaths": { "AnyOf": [ "PetStoreShopper" ] } } ], "Priority": 50, "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123", "RoutingRuleId": "abc123" }
ルーティングルールの優先度を変更する
ルーティングルールの優先度は変更できます。これはすぐに有効になり、API コンシューマーがカスタムドメイン名を呼び出す方法に影響を与える可能性があります。ルーティングルールの優先順位を設定するときは、ルール間に間隔を空けておくことをお勧めします。
例えば、優先度が 50 のルール abc123
と優先度が 150 のルール zzz000
の 2 つのルーティングルールについて考えます。API Gateway が最初にルール zzz000
を評価するようにルールの優先度を変更するには、ルール zzz000
の優先度を 30 に変更できます。
- AWS Management Console
-
https://console.aws.amazon.com/apigateway
で API Gateway コンソールにサインインします。 メインのナビゲーションペインから [Custom Domain Names (カスタムドメイン名)] を選択します。
-
カスタムドメイン名を選択します。
-
[ルーティングの詳細] タブで、ルーティングルールを選択し、[編集] を選択します。
-
[次へ] を選択します。
-
優先度に、新しい優先度を入力します。
[Save changes] (変更の保存) をクリックします。
- AWS CLI
-
次の put-routing-rule コマンドは、ルーティングルール
abc123
の優先度を変更します。aws apigatewayv2 put-routing-rule \ --domain-name 'api.example.com' \ --priority 30 \ --routing-rule-id abc123 \ --conditions '[ { "MatchHeaders": { "AnyOf": [ { "Header": "Hello", "ValueGlob": "World" } ] } }, { "MatchHeaders": { "AnyOf": [ { "Header": "x-version", "ValueGlob": "beta" } ] } }, { "MatchBasePaths": { "AnyOf": [ "PetStoreShopper" ] } } ]'\ --actions '[ { "InvokeApi": { "ApiId": "a1b2c3", "Stage": "prod" } } ]'
出力は次のようになります。
{ "Actions": [ { "InvokeApi": { "ApiId": "a1b2c3", "Stage": "prod", "StripBasePath": false } } ], "Conditions": [ { "MatchHeaders": { "AnyOf": [ { "Header": "Hello", "ValueGlob": "World" } ] } }, { "MatchHeaders": { "AnyOf": [ { "Header": "x-version", "ValueGlob": "beta" } ] } }, { "MatchBasePaths": { "AnyOf": [ "PetStoreShopper" ] } } ], "Priority": 38, "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123", "RoutingRuleId": "abc123" }