ルーティングルールの使用方法 - Amazon API Gateway

ルーティングルールの使用方法

ルーティングルールは、AWS Management Console、AWS CLI、または任意の AWS SDK を使用して作成できます。ルールを作成した後で、その優先度を変更できます。

ルーティングルールを作成する

次の手順は、ルーティングモードが ROUTING_RULE_THEN_API_MAPPING または ROUTING_RULE_ONLY に設定されているカスタムドメイン名のルーティングルールを作成する方法を示しています。

AWS Management Console
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. メインのナビゲーションペインから [Custom Domain Names (カスタムドメイン名)] を選択します。

  3. カスタムドメイン名を選択します。

  4. [ルーティングの詳細] タブで、[ルーティングルールを追加] を選択します。

  5. [新しい条件を追加] を選択して、新しい条件を追加します。

    ヘッダーまたはベースパス条件を追加できます。すべての受信リクエストをカスタムドメイン名に一致させるには、条件を追加しないでください。

  6. [アクション] で、ドロップダウンを使用してターゲット API とターゲットステージを選択します。

  7. [次へ] を選択します。

  8. 優先度フィールドに、優先度の数値を入力します。

    API Gateway は、ルールを優先度順 (低い値から高い値の順) に評価します。

    条件なしでルールを作成する場合は、高い値の優先度を使用することをお勧めします。

  9. [ルーティングルールを作成] を選択します。

AWS CLI

次の create-routing-rule コマンドは、優先度 50 のルーティングルールを作成します。この例では、API Gateway は、ヘッダー Hello:Worldx-version:beta および ベースパス PetStoreShopper を持つ受信リクエストをターゲット API a1b2c3 にルーティングします。

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
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. メインのナビゲーションペインから [Custom Domain Names (カスタムドメイン名)] を選択します。

  3. カスタムドメイン名を選択します。

  4. [ルーティングの詳細] タブで、ルーティングルールを選択し、[編集] を選択します。

  5. [次へ] を選択します。

  6. 優先度に、新しい優先度を入力します。

  7. [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" }