我正在努力了解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 - Why does API Gateway generate 2 different URLs for the same API (the Target Domain Name and the Invoke URL)?
2 - Why does the Invoke URL works and the Target Domain Name doesn't?
这是我的问题的第二部分,我正在尝试为 Regional Custom Domain Name
配置配置 Route 53
,但我找不到任何关于正确方法的例子(仅适用于 Edge Optimized Custom Domain Name
) .
我试图为 api.example.com
创建 A
记录为 Alias
到 aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com
,但它说:
无法保存记录集,因为: - 别名目标包含无效值 .
所以我为 api.example.com
创建了一个 CNAME
记录,将 Alias
设置为 No
(设置为 Yes
带来了与 A
记录案例中相同的错误消息),值为 aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com
但是当我尝试调用我的API为 https://api.example.com/mymap/mystage/example
时,我得到 404
.
What am I doing wrong?
编辑:
此主题已移至AWS论坛here
编辑2:
显然,正如AWS支持人员所说,API Gateway处理自定义域名和常规API网关URL的方式不一致,所有这些都记录在此AWS论坛帖子中here
2 回答
Route53控制台不必使用CLI / SDK(或直接点击R53 API)创建ALIAS记录,并提供此页面上列出的目标托管区域:http://docs.aws.amazon.com/general/latest/gr/rande.html#apigateway_region
Invoke URL是始终可用的有效SSL证书的默认 endpoints . 此 endpoints 由API网关管理 . 目标域名是可选的(您必须设置自定义域名),DNS和SSL证书由您/客户管理 .
谢谢,杰克
如果有人想了解API Gateway的用途,请查看this thread .
它基本上表示API网关处理常规URL(如
aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com
)与处理自定义域名URL(如api.myservice.com
)的方式不同 . 因此,当API网关将您的API请求转发到您的Lambda函数时,您的Lambda函数将接收不同的path
值,具体取决于您用于调用API的URL类型 .在我的情况下,我使用serverless java container,所以我可以在AWS Lambda上运行Jersey webservice . 由于两个URL的URL都没有被传递,因此当Jersey收到其配置格式错误的URL时,它将返回404 .
AWS API Gateway团队表示他们正在考虑使这个URL调用统一,但到目前为止(2018年1月)没有妥协 .
我的问题的Route 53部分由杰克回答,我没有任何补充 .