使用 API 映射将 API 阶段连接到 REST API 的自定义域名 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 API 映射将 API 阶段连接到 REST API 的自定义域名

您可以使用 API 映射将 API 阶段连接到自定义域名。这样可以通过您的自定义域名将流量发送到 API。

API 映射指定了用于映射的 API、阶段以及可选的路径。例如,可以将 https://api.example.com/orders 映射到 API 的 production 阶段。

您可以将 HTTP 和 REST API 阶段映射到相同的自定义域名。

在创建 API 映射之前,您必须拥有 API、阶段和自定义域名。要了解有关创建自定义域名的更多信息,请参阅 在 API Gateway 中设置区域自定义域名

针对自定义域名的传入请求

当您将自定义域名映射到 API 的某个阶段时,API Gateway 会删除传入的基本路径。这会移除从调用到 API 的映射基本路径。例如,如果基本路径映射是从 https://api.example.com/orders/shop/5test 阶段,并且您使用了以下请求 https://api.example.com/orders/shop/5/hats,则 API Gateway 将调用 API 的 test 阶段的 /hats 资源,而不是 orders/shop/5/hats 资源。

映射 API 请求

以下内容解释 API Gateway 如何评估 API 映射。

可以使用单级映射创建 API 映射,例如从 orders 到 API 的 beta 阶段的 API 映射,以及从 shipping 到 API 的 alpha 阶段的 API 映射。对于采用 TLS 1.2 安全策略的区域自定义域名,API Gateway 支持多级 API 映射。可以创建从 orders/v1/items 到 API 的 alpha 阶段以及从 orders/v2/items 到 API 的 beta 阶段的 API 映射。当您创建具有多个级别的映射时,API Gateway 将请求发送到匹配路径最长的 API 映射。

可以创建到空路径 (none) 的 API 映射。如果没有任何路径与请求匹配,API Gateway 将请求发送到空路径 (none)

在本例中,自定义域名 https://api.example.com 具有以下 API 映射。

API 映射 选定的 API

(none)

API 1

orders

API 2

orders/v1/items

API 3

orders/v2/items

API 4

orders/v1/items/categories

API 5

下表显示了 API Gateway 如何将之前的 API 映射应用于示例请求。

请求 选定的 API 说明

https://api.example.com/orders

API 2

请求完全匹配此 API 映射。

https://api.example.com/orders/v1/items

API 3

请求完全匹配此 API 映射。

https://api.example.com/orders/v2/items

API 4

请求完全匹配此 API 映射。

https://api.example.com/orders/v1/items/123

API 3

API Gateway 选择匹配路径最长的映射。请求结尾处的 123 不影响选择。请参阅针对自定义域名的传入请求

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

API 5

API Gateway 选择匹配路径最长的映射。

https://api.example.com/customers

API 1

API Gateway 使用空映射作为“捕获全部”。

https://api.example.com/ordersandmore

API 2

API Gateway 选择匹配前缀最长的映射。

对于配置了单级映射的自定义域名(例如,仅 https://api.example.com/ordershttps://api.example.com/),API Gateway 会选择 API 1,因为没有与 ordersandmore 匹配的路径。

限制

  • 在 API 映射中,自定义域名和映射的 API 必须位于同一个Amazon账户中。

  • API 映射必须仅包含字母、数字和以下字符:$-_.+!*'()/

  • API 映射中路径的最大长度为 300 个字符。

  • 每个域名可以有 200 个具有多个级别的 API 映射。此限制不包括单级的 API 映射,例如 /prod

  • 您只能使用 TLS 1.2 安全策略将 HTTP API 映射到区域自定义域名。

  • 您不能将 WebSocket API 映射到与 HTTP API 或 REST API 相同的自定义域名。

  • 创建 API 映射后,您必须创建或更新 DNS 提供商的资源记录以映射到您的 API 端点。

  • 如果您创建具有多个级别的 API 映射,API Gateway 会将所有标头名称转换为小写。

创建 API 映射

要创建 API 映射,您必须首先创建自定义域名、API 和阶段。自定义域名的路由模式必须设置为 ROUTING_RULE_THEN_API_MAPPINGAPI_MAPPING_ONLY。有关如何设置路由模式的信息,请参阅为自定义域名设置路由模式

例如,创建所有资源的 Amazon Serverless Application Model 模板,请参阅 GitHub 上的使用 SAM 的会话

Amazon Web Services Management Console
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

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

  3. 选择自定义域名。

  4. 路由详情选项卡上,选择配置 API 映射

  5. 输入映射的 API阶段路径

  6. 选择保存

Amazon CLI

使用以下 create-api-mapping 命令创建 API 映射。在此示例中,API Gateway 将请求发送到 api.example.com/v1/orders,到指定的 API 和阶段。

注意

要创建具有多个级别的 API 映射,必须使用 apigatewayv2

aws apigatewayv2 create-api-mapping \ --domain-name api.example.com \ --api-mapping-key v1/orders \ --api-id a1b2c3d4 \ --stage test
Amazon CloudFormation

以下 Amazon CloudFormation 示例会创建一个 API 映射。

注意

要创建具有多个级别的 API 映射,必须使用 AWS::ApiGatewayV2

MyApiMapping: Type: 'AWS::ApiGatewayV2::ApiMapping' Properties: DomainName: api.example.com ApiMappingKey: 'orders/v2/items' ApiId: !Ref MyApi Stage: !Ref MyStage