使用路由规则重新创建 API 映射 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用路由规则重新创建 API 映射

可以使用路由规则重新创建 API 映射。要重新创建 API 映射,请确保开启基本路径删除。这将保留 API 映射的行为。有关更多信息,请参阅 使用基本路径条件删除基本路径

以下教程展示了如何将 API 映射 https:// api.example.com/orders/v2/items/categories/5 重新创建为路由规则,以及如何更新访问日志以记录 API Gateway 用于向 API 发送流量的路由规则 ID。

Amazon Web Services Management Console
将路由模式设置为 ROUTING_RULE_THEN_API_MAPPING
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. 从主导航窗格中选择自定义域名

  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. 通过以下网址登录到 Amazon 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 日志事件

Amazon 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 命令,来从日志组 access-log-group-orders 中获取包含路由规则 ID abc123 的日志事件。

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

    这确认 API Gateway 已使用路由规则向 API 发送流量。