为自定义域名设置路由模式 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为自定义域名设置路由模式

您可以选择 API Gateway 使用哪种路由模式将流量路由到 API。有关更多信息,请参阅 在 API Gateway 中通过自定义域名将流量发送到 API。本节讨论自定义域名的路由模式。您必须为自定义域名设置路由模式,才能将流量路由到 API。支持以下路由模式:

  • ROUTING_RULE_THEN_API_MAPPING:使用此模式通过路由规则和 API 映射将流量发送到 API。在这种模式下,所有路由规则的优先级均高于任何 API 映射。有关此模式的示例,请参阅示例 2:路由规则和 API 映射

  • ROUTING_RULE_ONLY:使用此模式以仅支持路由规则向 API 发送流量。当自定义域名使用此模式时,您无法创建 API 映射,但可以使用 get-api-mappings 命令来查看它们。API 调用方无法使用 API 映射来访问此域名。

  • API_MAPPING_ONLY:使用此模式以仅支持 API 映射向 API 发送流量。当自定义域名使用此模式时,您无法创建路由规则,但可以使用 list-routing-rules 命令来查看它们。API 调用方无法使用路由规则来访问此域名。

    这是您所有现有域名以及您创建的任何新域名的默认路由模式。

当您使用 apigateway 创建自定义域名时,API_MAPPING_ONLY 称为 BASE_PATH_MAPPING_ONLY,而 ROUTING_RULE_THEN_API_MAPPING 称为 ROUTING_RULE_THEN_BASE_PATH_MAPPING。此行为仅适用于 Amazon CLI、Amazon CloudFormation 或任何 SDK,但不存在于 Amazon Web Services Management Console中。

以下过程说明如何更改现有自定义域名的路由模式。当您更改自定义域名的路由模式时,API 调用方无法使用任何不支持的路由模式访问域名。

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

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

  3. 选择自定义域名。

  4. 对于域详细信息,选择编辑

  5. 对于路由模式,请选择 ROUTING_RULE_THEN_API_MAPPING

  6. 选择保存

如果您将路由模式更改为 ROUTING_RULE_ONLYAPI_MAPPING_ONLY,则将从控制台的域名详细信息页面中移除您创建的任何 API 映射或路由规则。如果您更改路由模式以支持路由规则或 API 映射,则这些资源将返回。

Amazon CLI - apigatewayv2

以下 update-domain-name 命令将域名更新为使用路由模式 ROUTING_RULE_THEN_API_MAPPING

aws apigatewayv2 update-domain-name \ --domain-name 'api.example.com' \ --routing-mode "ROUTING_RULE_THEN_API_MAPPING"

输出将与以下内容类似:

{ "ApiMappingSelectionExpression": "$request.basepath", "DomainName": "api.example.com", "DomainNameArn": "arn:aws:apigateway:us-west-2::/domainnames/api.example.com", "DomainNameConfigurations": [ { "ApiGatewayDomainName": "d-abcdefg.execute-api.us-west-2.amazonaws.com", "CertificateArn": "arn:aws:acm:us-west-2:111122223333:certificate/abcdefg-123456-abcdefg", "DomainNameStatus": "AVAILABLE", "EndpointType": "REGIONAL", "HostedZoneId": "Z2OJLYMUO9EFXC", "SecurityPolicy": "TLS_1_2" } ], "RoutingMode": "ROUTING_RULE_THEN_API_MAPPING", "Tags": {} }
Amazon CLI - apigateway

以下 update-domain-name 命令将私有自定义域名更新为使用路由模式 ROUTING_RULE_THEN_BASE_PATH_MAPPING

aws apigateway update-domain-name \ --domain-name 'private.example.com' \ --patch-operations "op='replace',path='/routingMode',value='ROUTING_RULE_THEN_BASE_PATH_MAPPING'"

输出将与以下内容类似:

{ "domainName": "private.example.com", "domainNameId": "abcd1234", "domainNameArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234", "certificateArn": "arn:aws:acm:us-west-2:111122223333:certificate/a1b2c3d4-5678-90ab-cdef", "certificateUploadDate": "2024-09-10T10:31:20-07:00", "endpointConfiguration": { "types": [ "PRIVATE" ], "ipAddressType": "dualstack" }, "domainNameStatus": "AVAILABLE", "securityPolicy": "TLS_1_2", "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"execute-api:Invoke\",\"Resource\":\"execute-api:\/*\"},{\"Effect\":\"Deny\",\"Principal\":\"*\",\"Action\":\"execute-api:Invoke\",\"Resource\":\""execute-api:\/*\",\"Condition\":{\"StringNotEquals\":{\"aws:SourceVpce\":\"vpce-abcd1234efg\"}}}]}", "routingMode" : "ROUTING_RULE_THEN_BASE_PATH_MAPPING" }