我正在努力了解AWS API网关自定义域的工作原理。
我为我的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网关为同一API(Target Domain Name
和Invoke URL
)生成2个不同的网址?
2 - 为什么Invoke URL
有效而Target Domain Name
没有?
以下是我的问题的第二部分,我正在尝试为Route 53
配置配置Regional Custom Domain Name
,但我找不到任何关于正确方法的示例(仅适用于{{ 1}})。
我尝试为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
相同的错误消息{1}}记录案例),值为A
,但当我尝试以aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com
方式调用我的API时,我得到404
。
我做错了什么?
编辑:
此主题已移至AWS论坛here
编辑2:
显然,正如AWS支持人员所说,API Gateway处理自定义域名和常规API网关URL的方式不一致,所有这些都记录在此AWS论坛帖子中here
答案 0 :(得分:2)
Route53控制台尚不支持API网关作为ALIAS目标。您必须使用CLI / SDK(或直接点击R53 API)制作ALIAS记录,并提供此页面上列出的目标托管区域:http://docs.aws.amazon.com/general/latest/gr/rande.html#apigateway_region
为什么API网关为同一个API生成2个不同的URL( 目标域名和调用URL)?
Invoke URL是始终可用的有效SSL证书的默认端点。此端点由API网关管理。目标域名是可选的(您必须设置自定义域名),DNS和SSL证书由您/客户管理。
谢谢, 千斤顶
答案 1 :(得分:1)
如果有人想了解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 Web服务。由于两个URL的URL都没有相同,因此当Jersey收到的URL配置格式不正确时,会返回404.
AWS API Gateway团队表示他们正考虑将此URL调用统一,但到目前为止(2018年1月)尚未妥协。
我的问题的Route 53部分由杰克回答,我没有任何补充。