我很难理解 AWS API Gateway 自定义域的工作原理。
我为我的 api 设置了一个
Regional Custom Domain Name
,例如 api.example.com
。结果是 Target Domain Name
,其形式为:
aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com
如果我尝试使用此链接调用 API,例如:
https://aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com/mymap/mystage/example
但我得到了
403 Forbidden
。
但是,如果我转到
Stages
并选择mystage
,则会出现一个大蓝色Invoke URL
,其形式为:
https://bbbbbbbbbb.execute-api.us-east-1.amazonaws.com/mymap/mystage/example
这有效!
这是我的前两个问题:
1 - 为什么 API Gateway 为同一 API 生成 2 个不同的 URL(
Target Domain Name
和 Invoke URL
)?
2 - 为什么
Invoke URL
有效而 Target Domain Name
不起作用?
这是我问题的第二部分,我正在尝试为
Route 53
配置配置 Regional Custom Domain Name
,但我找不到任何有关正确方法的示例(仅针对 Edge Optimized Custom Domain Name
)。
我尝试为
A
创建一条 api.example.com
记录作为 Alias
到 aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com
,但它说:
记录集无法保存,因为: - 别名目标包含无效值。
因此,我为
CNAME
创建了一条 api.example.com
记录,将 Alias
设置为 No
(设置为 Yes
会带来与 A
记录情况相同的错误消息)并将值设置为 aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com
但是当我尝试将 API 调用为 404
时,我得到了 https://api.example.com/mymap/mystage/example
。
我做错了什么?
编辑:
此帖子已移至 AWS 论坛此处
编辑2:
显然,正如 AWS 支持人员所说,API Gateway 处理自定义域名和常规 API Gateway URL 的方式不一致,所有内容都记录在此 AWS 论坛主题此处
API Gateway 处理常规 URL(如
aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com
)的方式与处理自定义域名 URL(如 api.myservice.com
)的方式不同。因此,当 API Gateway 将您的 API 请求转发到您的 Lambda 函数时,您的 Lambda 函数将收到不同的 path
值,具体取决于您用于调用 API 的 URL 类型。
就我而言,我使用的是 无服务器 Java 容器,因此我可以在 AWS Lambda 上运行 Jersey Web 服务。由于两个 URL 的 URL 传递方式不同,因此当 Jersey 收到配置格式错误的 URL 时,将返回 404。
AWS API Gateway 团队表示,他们正在考虑统一此 URL 调用,但到目前为止(2018 年 1 月)尚未做出妥协。
我问题的 53 号公路部分由 Jack 回答,我没有什么可补充的。
Route53 控制台尚不支持 API Gateway 作为 ALIAS 目标。您必须使用 CLI/SDK(或直接点击 R53 API)创建 ALIAS 记录,并提供此页面上列出的目标托管区域:http://docs.aws.amazon.com/general/latest /gr/rande.html#apigateway_region
为什么 API Gateway 会为同一个 API 生成 2 个不同的 URL( 目标域名和调用 URL)?
调用 URL 是默认端点,通过有效的 SSL 证书始终可用。该端点由 API 网关管理。目标域名是可选的(您必须设置自定义域名),DNS和SSL证书由您/客户管理。
谢谢, 杰克