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

时间:2017-07-04 05:08:51

标签: amazon-web-services lambda aws-api-gateway amazon-route53

我知道许多类似的问题已经在这里发布和回答,但没有一个与我所经历的完全相同。

我有一个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. 

如果有人知道这里会发生什么,我真的很感激。

3 个答案:

答案 0 :(得分:8)

我发现这个问题误解了基本路径映射的工作原理。

我的所有配置都是正确的。

我的API资源不在/端

要使用自定义域,请访问https://api。{my domain} .com / endpoint / endpoint

当然这是愚蠢和多余的。

我有两个选择。我要么设置基本路径映射到/而不是/ endpoint,要么我只能使用API​​资源/而不是/ endpoint。

我选择后者,因为如果基本路径映射设置为/,我的api。{my domain} .com将只能托管一个API(我仍然可以在同一个API下使用资源,但为什么要浪费额外的抽象层?)。

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

答案 1 :(得分:2)

相同的问题,并通过从api网址中删除阶段名称来解决!

  • api网关调用url:
https://{id}.execute-api.{region}.amazonaws.com/{stage}
  • api网关GET请求网址:
https://{id}.execute-api.{region}.amazonaws.com/{stage}/todos
  • api网关自定义域路径映射:
path: /
target: {apiName}:{stage}
  • 路线53自定义域:
https://api.xxx.com
  • 将53 CNAME路由到api网关:
// **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