如何在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网关控制台中手动执行此操作。