Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS Api网关&x2B;λ+;自定义域(路由53)缺少身份验证令牌问题_Amazon Web Services_Lambda_Aws Api Gateway_Amazon Route53 - Fatal编程技术网

Amazon web services AWS Api网关&x2B;λ+;自定义域(路由53)缺少身份验证令牌问题

Amazon web services AWS Api网关&x2B;λ+;自定义域(路由53)缺少身份验证令牌问题,amazon-web-services,lambda,aws-api-gateway,amazon-route53,Amazon Web Services,Lambda,Aws Api Gateway,Amazon Route53,我知道很多类似的问题已经在这里发布和回答了,但是没有一个与我所经历的完全相同 我有一个Lambda函数来处理传入的请求(GET和POST)。我还设置了一个api网关作为面向公众的端点。此外,我还设置了以下自定义域 测试调用在lambda和api网关控制台中都起作用。一切都可以使用调用URL,但不能使用我设置的自定义域 以下是一些更详细的信息: 调用URL(工作): 自定义域endpint(不工作): 基本路径映射: /endpoint endpoint:prod 所有方法验证: Autho

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

我有一个Lambda函数来处理传入的请求(GET和POST)。我还设置了一个api网关作为面向公众的端点。此外,我还设置了以下自定义域

测试调用在lambda和api网关控制台中都起作用。一切都可以使用调用URL,但不能使用我设置的自定义域

以下是一些更详细的信息:

调用URL(工作):

自定义域endpint(不工作):

基本路径映射:

/endpoint   endpoint:prod
所有方法验证:

Authorization None
API Key Not required
路线53:

A record as alias that points api.{my domain}.com to the cloudfront distribution domain name as alias target. 

如果有人知道这里发生了什么,我会非常感激

我发现问题在于对基本路径映射工作原理的误解

我所有的配置都是正确的

我的API资源不在/下,而是在/端点下

要使用自定义域,而不是访问{my domain}.com/endpoint,它需要转到{my domain}.com/endpoint/endpoint

当然,这是愚蠢和多余的

我有两个选择。我可以设置到/而不是/端点的基本路径映射,也可以只使用API资源/而不是/端点

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


这看起来很糟糕,但我还是很高兴我找到了答案

另一个原因可能是,您的用户虽然是管理员,但没有权限
CloudFrontFullAccess
!我只是花了几个小时在它上面,因为我依赖于
serverless
来为我做这件事,但它在另一个具有不同凭据的项目上工作得非常完美。所以请仔细检查这篇文章

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

  • api网关调用url:
  • api网关获取请求url:
  • api网关自定义域路径映射:
  • 路由53自定义域:
  • 路由53 CNAME到api网关:

您是否也设置了一个指向
CloudFront分发的
Route53记录集
?@MaiKaY是的。我有一个A记录作为api的别名。{my domain}.com。别名目标是CloudFront分发域名称我想您需要将
基本路径映射更改为:
/endpoint:prod
。或者尝试使用现有的
基本路径映射来访问
https://api.{我的域名}.com
@jlai能否请您提及您收到的错误或您的请求未到达API网关?不清楚为什么您希望具有名为
/endpoint
的资源的
/endpoint
的基本路径会导致除要求请求转到
/endpoint/endpoint
之外的任何行为,因为资源是在基本路径+资源上访问的。实际上,我使用lambda的模板设置了api网关,模板会自动将其放在api的名称下,而不是api的根目录下。这是我第一次使用它,所以我没想到会有这种行为。我预计资源是在API的根下创建的,这意味着API的名称应该只是API的名称,默认情况下根用于第一个资源。我明白你的意思。我遇到了同样的问题,也没有意识到lambda在网关中创建了嵌套资源。我收到{“消息”:“缺少身份验证令牌”}是的,jlai。我同意你的看法。我的api是“abcd12345.execute api.us-east-1.amazonaws.com/Dev/resource”,但当我创建自定义api域名并只添加stage而不是path时,我只能通过example.com/resource访问它。这真的很傻。
Authorization None
API Key Not required
A record as alias that points api.{my domain}.com to the cloudfront distribution domain name as alias target. 
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