使用路由規則重新建立 API 映射 - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用路由規則重新建立 API 映射

您可以使用路由規則重新建立 API 映射。若要重新建立 API 映射,請務必開啟基本路徑分割。這會保留 API 映射的行為。如需詳細資訊,請參閱使用基本路徑條件來分割基本路徑

下列教學課程說明如何將 API 映射重新建立https:// api.example.com/orders/v2/items/categories/5為路由規則,以及如何更新您的存取日誌以記錄路由規則 ID API Gateway 用來將流量傳送至 API。

AWS Management Console
將路由模式設定為 ROUTING_RULE_THEN_API_MAPPING
  1. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway

  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 Gateway 仍會一律使用新的路由規則,因為路由規則一律優先於 API 映射。

  9. 選擇儲存變更

建立路由規則後,請更新階段的存取日誌格式或建立新的日誌,以確認 API Gateway 使用您的路由規則將流量傳送至您的 API。

更新您的存取日誌
  1. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway

  2. 選擇您的 API。

  3. 在主導覽窗格中,選擇階段

  4. 針對日誌和追蹤,選擇編輯

    如果您沒有日誌群組,請參閱 在 API Gateway 中設定 REST API 的 CloudWatch 記錄功能

  5. $context.customDomain.routingRuleIdMatched新增至您的日誌格式。

    此日誌群組會記錄 API Gateway 用來將流量傳送至 API 的路由規則 ID。如需詳細資訊,請參閱我無法得知 API Gateway 如何將流量傳送到我的 APIs

  6. 選擇 Save (儲存)。

更新存取日誌後, 會叫用您的自訂網域名稱。以下是使用https://api.example.com基本路徑 叫用自訂網域名稱的範例 curl 命令orders/v2/items/categories/5

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

成功叫用自訂網域名稱後,請確認 CloudWatch Logs 顯示 routingRuleIdMatched。若要了解如何使用 CloudWatch Logs 主控台檢視日誌群組,請參閱 在 CloudWatch 主控台中檢視 API Gateway 日誌事件

AWS CLI
  1. 使用下列 update-domain-name 命令來更新網域名稱api.example.com,以使用路由模式 ROUTING_RULE_THEN_API_MAPPING

    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 如何將流量傳送到我的 APIs

    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 access-log-group-orders的日誌群組取得日誌事件abc123

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

    這確認 API Gateway 使用路由規則將流量傳送到您的 API。