我知道许多类似的问题已经在这里发布和回答,但没有一个与我所经历的完全相同。
我有一个Lambda函数来处理传入的请求(GET和POST)。我还设置了一个api网关作为面向公众的端点。此外,我在Set up Custom Domain Name for API Host Name
之后设置了自定义域测试调用适用于lambda和api网关控制台。一切也可以使用调用URL,但不能使用我设置的自定义域。
以下是一些更多细节:
调用URL(Works):
https://{api gateway id}.execute-api.us-west-2.amazonaws.com/prod/endpoint
自定义域名结尾(不起作用):
https://api.{my domain}.com/endpoint
基本路径映射:
/endpoint endpoint:prod
所有方法验证:
Authorization None
API Key Not required
Route53:
A record as alias that points api.{my domain}.com to the cloudfront distribution domain name as alias target.
如果有人知道这里会发生什么,我真的很感激。
答案 0 :(得分:8)
我发现这个问题误解了基本路径映射的工作原理。
我的所有配置都是正确的。
我的API资源不在/端
下要使用自定义域,请访问https://api。{my domain} .com / endpoint / endpoint
当然这是愚蠢和多余的。
我有两个选择。我要么设置基本路径映射到/而不是/ endpoint,要么我只能使用API资源/而不是/ endpoint。
我选择后者,因为如果基本路径映射设置为/,我的api。{my domain} .com将只能托管一个API(我仍然可以在同一个API下使用资源,但为什么要浪费额外的抽象层?)。
这似乎是倾销,但我仍然很高兴我明白了。
答案 1 :(得分:2)
相同的问题,并通过从api网址中删除阶段名称来解决!
https://{id}.execute-api.{region}.amazonaws.com/{stage}
https://{id}.execute-api.{region}.amazonaws.com/{stage}/todos
path: /
target: {apiName}:{stage}
https://api.xxx.com
// **remove stage name!!!!**
// Right
https://api.xxx.com/todos
// Wrong
https://api.xxx.com/{stage}/todos
答案 2 :(得分:0)
另一个原因可能是您的用户(尽管是管理员)没有血腥的CloudFrontFullAccess
权限!我只是花了几个小时,因为我依靠serverless
为我做这件事,尽管如此,它在另一个具有不同凭据的项目中也能很好地工作。因此,请仔细检查文章! https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html