

# ルーティングルールを使用して API マッピングを再作成する
<a name="rest-api-routing-rules-recreate-api-mapping"></a>

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

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

------
#### [ AWS マネジメントコンソール ]

**ルーティングモードを ROUTING\$1RULE\$1THEN\$1API\$1MAPPING に設定するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

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

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

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

1. **[ルーティングモード]** で、**[ROUTING\$1RULE\$1THEN\$1API\$1MAPPING]** を選択します。

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

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

**ルーティングルールを作成するには**

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

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

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

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

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

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

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

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

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

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

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

**アクセスログを更新するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. API を選択します。

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

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

   ロググループがない場合は、「[API Gateway で REST API の CloudWatch ログ記録を設定する](set-up-logging.md)」を参照してください。

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

   このロググループは、API Gateway が API へのトラフィックの送信に使用したルーティングルール ID を記録します。詳細については、「[API Gateway が API にトラフィックを送信した方法がわからない](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging)」を参照してください。

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

アクセスログを更新したら、カスタムドメイン名を呼び出します。以下は、ベースパス `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 のログイベントを表示する](view-cloudwatch-log-events-in-cloudwatch-console.md)」を参照してください。

------
#### [ AWS CLI ]

1. 次の [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) コマンドを使用して、ルーティングモード `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
   ```

1. 次の [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html) コマンドを使用して、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
       }
     }
   ]'
   ```

1. 次の [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) コマンドを使用して、`$context.customDomain.routingRuleIdMatched` 変数を含めるようにアクセスログ形式を更新します。この変数は、API Gateway が API へのトラフィックの送信に使用したルーティングルール ID を記録します。このログを使用して、API Gateway がルーティングルールを使用して API にトラフィックを送信することを確認します。詳細については、「[API Gateway が API にトラフィックを送信した方法がわからない](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging)」を参照してください。

   ```
   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 ログ記録を設定する](set-up-logging.md)」を参照してください。

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

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

1. 次の [filter-log-events](https://docs.aws.amazon.com/cli/latest/reference/logs/filter-log-events.html) コマンドを使用して、ルーティングルール ID `abc123` を含むロググループ `access-log-group-orders` からログイベントを取得します。

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

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

------