View a markdown version of this page

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

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

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

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

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

AWS 管理主控台
將路由模式設定為 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 如何將流量傳送至 API。

  6. 選擇 Save (儲存)。

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

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 如何將流量傳送至 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。