AWS Api Gateway + Lambda +自定义域(Route53)缺少身份验证令牌问题

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下使用资源,但为什么要浪费额外的层抽象?).

这似乎是倾销,但我仍然很高兴我明白了.

  • 我实际上使用lambda的模板设置了api网关,模板自动将其置于API的名称下而不是API的根目录下.这是我第一次使用它,所以我没想到会出现这种情况.我预计资源是在API的根目录下创建的,这意味着API的名称应该只是API的名称,默认情况下root用于第一个资源. (3认同)

pin*_*god 11

同样的问题,通过从 api url 中删除阶段名称来解决!

  • api 网关调用 url:
https://{id}.execute-api.{region}.amazonaws.com/{stage}
Run Code Online (Sandbox Code Playgroud)
  • 一个 api 网关 GET 请求 url:
https://{id}.execute-api.{region}.amazonaws.com/{stage}/todos
Run Code Online (Sandbox Code Playgroud)
  • api网关自定义域路径映射:
path: /
target: {apiName}:{stage}
Run Code Online (Sandbox Code Playgroud)
  • 路由 53 自定义域:
https://api.xxx.com
Run Code Online (Sandbox Code Playgroud)
  • 路由 53 CNAME 到 api 网关:
// **remove stage name!!!!**

// Right
https://api.xxx.com/todos

// Wrong
https://api.xxx.com/{stage}/todos
Run Code Online (Sandbox Code Playgroud)

  • 天哪,是的!这正是我的问题![我在这里写过。](https://www.reddit.com/r/aws/comments/m6d5l1/comment/hmamdgt/?utm_source=share&utm_medium=web2x&context=3)基本上,阶段名称也被替换为自定义域。(注:我希望你的答案更清楚一点,因为我第一次读到它时没有明白。) (6认同)