如何在 AWS API Gateway 中调试“缺少身份验证令牌”?

Vin*_*ent 10 amazon-web-services node.js aws-lambda aws-api-gateway

我有一个代理到 AWS Lambda 函数的 API 网关资源。这对于传递尾随路径参数 ( /periodicals/{tail+})效果很好,但由于我希望这些参数是可选的,因此我还向ANY更高层的资源 ( /periodicals)添加了一个方法:

从 AWS 控制台中测试该方法时,这很有效。但是,直接从我的浏览器对该资源执行请求会导致以下响应:

{"message":"Missing Authentication Token"}
Run Code Online (Sandbox Code Playgroud)

有了这个标题:

x-amzn-errortype: MissingAuthenticationTokenException
Run Code Online (Sandbox Code Playgroud)

它还有一个x-cache带有值的标题Error from cloudfront,所以我猜它可能与 CloudFront 有关。我还没有明确设置 CloudFront,也不知道如何检查?

我想我阅读了有关此错误消息的每个线程,但它们似乎都不适用于我:

  • 我的方法不需要授权:
  • 我很确定 URL 是正确的。当我在浏览器中访问/periodicals/whatever(即{tail+}资源)时,它工作正常,但对于/periodicals.
  • CORS 已启用,因为两个资源都指向处理 CORS 并适用于子路径的相同 Lambda 函数。
  • HTTP 动词应该无关紧要,因为它正在侦听 ANY.
  • 无论我是否添加斜杠,结果都是一样的。
  • API 已部署。
  • 我认为 API 资源对我的 Lambda 函数有足够的权限,因为我可以从 AWS 控制台成功执行它:

感谢@Lakindu,一个有趣的观察是在 Stages 视图中的资源下方没有列出任何方法:

我还能做些什么来找出问题所在?

Vin*_*ent 4

我发现发生了什么事:

我的 API 是使用 TerraForm 部署的。在 TerraForm 中,您指定的资源之一是API Gateway Deployment。我认为如果它所依赖的任何资源(包括资源/periodicals)发生变化,它就会重新部署 API。

唉,我现在认为我必须更新它state_description才能强制进行新的部署。这样做的优点是您可以更新配置而不影响 API 用户,但这确实意味着当您想要部署更新的配置时,您明确需要执行操作。

希望这对任何人都有帮助。

tl;dr与我的想法相反,添加该方法后,API 实际上并未部署。(您可以在 AWS API Gateway 控制台中通过选择“操作”下拉列表中的“部署 API”来手动执行此操作。