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
-
如果您将路由模式更改为 ROUTING_RULE_ONLY
或 API_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"
}