ルーティングルールを使用して API マッピングを再作成する - Amazon API Gateway

ルーティングルールを使用して API マッピングを再作成する

ルーティングルールを使用して API マッピングを再作成できます。API マッピングを再作成するには、必ずベースパスストライピングをオンにしてください。これにより、API マッピングの動作が保持されます。詳細については、「ベースパス条件を使用してベースパスを削除する」を参照してください。

次のチュートリアルでは、API マッピング https:// api.example.com/orders/v2/items/categories/5 をルーティングルールとして再作成する方法と、API Gateway が API にトラフィックを送信するために使用するルーティングルール ID をログに記録するようにアクセスログを更新する方法を示します。

AWS Management Console
ルーティングモードを ROUTING_RULE_THEN_API_MAPPING に設定するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

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

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

  4. [ドメインの詳細] で、[編集] を選択します。

  5. [ルーティングモード] で、[ROUTING_RULE_THEN_API_MAPPING] を選択します。

  6. [保存] を選択します。

ルーティングモードを設定したら、ルーティングルールを作成します。

ルーティングルールを作成するには
  1. [ルーティングの詳細] タブで、[ルーティングルールを追加] を選択します。

  2. [新しい条件を追加] を選択してから、[パス] を選択します。

  3. [パス] には、orders/v2/items/categories/5 を入力します。

  4. [ベースパスをストリップ] で、[アクティブ] を選択します。

  5. [ターゲット API] で、ターゲット API を選択します。

  6. [ターゲットステージ] で、ターゲットステージを選択します。

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

  8. 優先度には、優先度を入力します。

    既存の API マッピングを保持していても、ルーティングルールは常に API マッピングよりも優先されるため、API Gateway は常に新しいルーティングルールを使用します。

  9. [Save changes] (変更の保存) をクリックします。

ルーティングルールを作成したら、ステージのアクセスログ形式を更新するか、新しいログを作成して、API Gateway がルーティングルールを使用して API にトラフィックを送信することを確認します。

アクセスログを更新するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. API を選択します。

  3. メインナビゲーションペインで、[ステージ] を選択します。

  4. [ログとトレース] で、[編集] を選択します。

    ロググループがない場合は、「API Gateway で REST API の CloudWatch ログ記録を設定する」を参照してください。

  5. $context.customDomain.routingRuleIdMatched をログ形式に追加します。

    このロググループは、API Gateway が API へのトラフィックの送信に使用したルーティングルール ID を記録します。詳細については、「API Gateway が API にトラフィックを送信した方法がわからない」を参照してください。

  6. [保存] を選択します。

アクセスログを更新したら、カスタムドメイン名を呼び出します。以下は、ベースパス orders/v2/items/categories/5 を使用してカスタムドメイン名 https://api.example.com を呼び出す curl コマンドの例です。

curl "https://api.example.com/orders/v2/items/categories/5"

カスタムドメイン名を正常に呼び出したら、CloudWatch Logs に routingRuleIdMatched が表示されていることを確認します。CloudWatch Logs コンソールを使用してロググループを表示する方法については、「CloudWatch コンソールで API Gateway のログイベントを表示する」を参照してください。

AWS CLI
  1. 次の update-domain-name コマンドを使用して、ルーティングモード ROUTING_RULE_THEN_API_MAPPING を使用するようにドメイン名 api.example.com を更新します。

    aws apigatewayv2 update-domain-name \ --domain-name 'api.example.com' \ --routing-mode ROUTING_RULE_THEN_API_MAPPING
  2. 次の create-routing-rule コマンドを使用して、API マッピング https://api.example.com/orders/v2/items/categories/5 を再作成する新しいルーティングルールを作成します。

    aws apigatewayv2 create-routing-rule \ --domain-name 'api.example.com' \ --priority 50 \ --conditions '[ { "MatchBasePaths": { "AnyOf": [ "orders/v2/items/categories/5" ] } } ]' \ --actions '[ { "InvokeApi": { "ApiId": "a1b2c3", "Stage": "prod", "StripBasePath": true } } ]'
  3. 次の update-stage コマンドを使用して、$context.customDomain.routingRuleIdMatched 変数を含めるようにアクセスログ形式を更新します。この変数は、API Gateway が API へのトラフィックの送信に使用したルーティングルール ID を記録します。このログを使用して、API Gateway がルーティングルールを使用して API にトラフィックを送信することを確認します。詳細については、「API Gateway が API にトラフィックを送信した方法がわからない」を参照してください。

    aws apigateway update-stage \ --rest-api-id a1bc2c3 \ --stage-name prod \ --patch-operations "op=replace,path=/accessLogSettings/format,value='\$context.path \$context.customDomain.routingRuleIdMatched \$context.requestId \$context.extendedRequestId'"

    ロググループがない場合は、「API Gateway で REST API の CloudWatch ログ記録を設定する」を参照してください。

  4. 次の curl コマンドの例を使用して、ベースパス orders/v2/items/categories/5 でカスタムドメイン名を呼び出します。

    curl "https://api.example.com/orders/v2/items/categories/5
  5. 次の filter-log-events コマンドを使用して、ルーティングルール ID abc123 を含むロググループ access-log-group-orders からログイベントを取得します。

    aws logs filter-log-events --log-group-name access-log-group-orders --filter-pattern abc123

    これにより、API Gateway がルーティングルールを使用して API にトラフィックを送信したことを確認します。