jla*_*lai 5 lambda amazon-web-services amazon-route53 aws-api-gateway
我知道许多类似的问题已在这里发布并回答,但它们与我所遇到的完全不同.
我有一个Lambda函数来处理传入的请求(GET和POST).我还设置了一个api网关作为面向公众的端点.此外,我在为API主机名设置自定义域名后设置了自定义域
测试调用适用于lambda和api网关控制台.一切也可以使用调用URL,但不能使用我设置的自定义域.
以下是一些更多细节:
调用URL(Works):
https://{api gateway id}.execute-api.us-west-2.amazonaws.com/prod/endpoint
Run Code Online (Sandbox Code Playgroud)
自定义域endpint(不起作用):
https://api.{my domain}.com/endpoint
Run Code Online (Sandbox Code Playgroud)
基本路径映射:
/endpoint endpoint:prod
Run Code Online (Sandbox Code Playgroud)
所有方法验证:
Authorization None
API Key Not required
Run Code Online (Sandbox Code Playgroud)
Route53:
A record as alias that points api.{my domain}.com to the cloudfront distribution domain name as alias target.
Run Code Online (Sandbox Code Playgroud)
如果有人知道这里会发生什么,我真的很感激.
jla*_*lai 11
我发现问题是对基本路径映射如何工作的误解.
我的所有配置都是正确的.
我的API资源不在/ endpoint下
要使用自定义域,而不是访问https:// api.{my domain} .com/endpoint,它需要转到https:// api.{my domain} .com/endpoint/endpoint
当然这是愚蠢和多余的.
我有两个选择.我要么设置基本路径映射到/而不是/ endpoint,要么我只能使用API资源/而不是/ endpoint.
我使用后者,因为如果基本路径映射设置为/,我的api.{my domain} .com将只能托管一个API(我仍然可以在同一个API下使用资源,但为什么要浪费额外的层抽象?).
这似乎是倾销,但我仍然很高兴我明白了.
pin*_*god 11
同样的问题,通过从 api url 中删除阶段名称来解决!
https://{id}.execute-api.{region}.amazonaws.com/{stage}
Run Code Online (Sandbox Code Playgroud)
https://{id}.execute-api.{region}.amazonaws.com/{stage}/todos
Run Code Online (Sandbox Code Playgroud)
path: /
target: {apiName}:{stage}
Run Code Online (Sandbox Code Playgroud)
https://api.xxx.com
Run Code Online (Sandbox Code Playgroud)
// **remove stage name!!!!**
// Right
https://api.xxx.com/todos
// Wrong
https://api.xxx.com/{stage}/todos
Run Code Online (Sandbox Code Playgroud)