如何在AWS API网关中debugging“Missing Authentication Token”?
我有一个代理AWS Lambda函数的API网关资源。 这工作得很好,通过尾随path参数( /periodicals/{tail+}
),但因为我想这些参数是可选的,我还添加了一个ANY
方法到更高的资源( /periodicals
):
当从AWS控制台内testing该方法时,此工作正常。 但是,直接从我的浏览器对该资源执行请求会导致以下响应:
{"message":"Missing Authentication Token"}
有了这个标题:
x-amzn-errortype: MissingAuthenticationTokenException
它还有一个x-cache
标头,其中的值Error from cloudfront
,所以我想这可能与CloudFront有关。 我虽然没有明确地设置CloudFront,但真的不知道如何检查?
我想我读了这个错误消息的每一个线程,但他们似乎没有适用于我:
- 我的方法不需要授权:
- 我很确定url是正确的。 当我在浏览器中访问
/periodicals/whatever
(即{tail+}
资源)时,它工作正常,但不是/periodicals
。 - CORS已启用,因为两个资源都指向处理CORS的相同Lambda函数,并且适用于子path。
- HTTP动词应该不重要,因为它正在监听
ANY
。 - 结果是相同的,无论我是否添加尾随斜线。
- 该API已部署。
- 我认为API资源对我的Lambda函数具有足够的权限,因为我可以从AWS Console成功执行它:
感谢@Lakindu,一个有趣的观察是,阶段视图中的资源下面没有列出任何方法:
还有什么我可以做的,以找出哪里出了问题?
我发现了什么事情:
我的API是使用TerraForm部署的。 在TerraForm中,您指定的资源之一是API网关部署 。 我想如果它所依赖的任何资源(包括/periodicals
资源)发生变化,它将重新部署API。
唉,我现在认为我将不得不更新其state_description
为了迫使一个新的部署。 这样做的好处是您可以在不影响API用户的情况下更新configuration,但这意味着当您要部署更新的configuration时,您显式需要执行操作。
希望这有助于任何人。
tl; dr与我的想法相反,在添加方法之后,API实际上并没有被部署。 (您可以通过在“操作”(Actions)下拉列表中select“部署API”(Deploy API),在AWS API网关控制台中手动执行此操作。
- 如何使用带有node.js的aws Lambda在aws DynamoDb中放置一个项目
- 在亚马逊lambda,并行调整多个缩略图大小asynchronous抛出错误:stream产生空的缓冲区
- 在集群模式下在Elastic Beanstalk上运行pm2
- 将AWS Lambda连接到Redshift – 在60秒后超时
- 无法从任何提供程序nodemailer aws加载凭据
- 如何在DynamoDB中查询不存在的(空)属性
- 在亚马逊aws弹性beanstalk(或本地?)上安装parsing仪表板
- 使用NodeJS和Multer将图像上传到S3。 如何上传整个文件onFileUploadComplete
- 在使用Node.js创buildEC2实例时关联弹性IP