2017-09-06 891 views
1

我有一個代理AWS Lambda函數的API網關資源。這對於通過尾隨的路徑參數(/periodicals/{tail+})工作得很好,但我想這些參數是可選的,我還增加了ANY方法到更高的資源(/periodicals):如何在AWS API網關中調試「Missing Authentication Token」?

能正常工作時,從AWS控制檯內測試該方法。直接從我的瀏覽器執行對資源的請求,然而,結果如下回應:

{"message":"Missing Authentication Token"} 

有了這個標題:

x-amzn-errortype: MissingAuthenticationTokenException 

它也有一個x-cache頭與價值Error from cloudfront,所以我猜猜這可能與CloudFront有關。我雖然沒有明確地設置CloudFront,但真的不知道如何檢查?

我覺得我讀了此錯誤消息的每個線程,但他們都不適用於我:

  • 需要我的方法沒有授權:
  • 我敢肯定的URL是正確的。當我在瀏覽器中訪問/periodicals/whatever(即{tail+}資源)時,它工作正常,但對於/periodicals不適用。
  • CORS已啓用,因爲兩個資源都指向處理CORS並適用於子路徑的Lambda函數。
  • HTTP動詞無關緊要,因爲它正在偵聽ANY
  • 無論我是否添加尾部斜線,結果都是一樣的。
  • 該API已部署。
  • 我覺得API資源對我的lambda表達式足夠的權限,我可以成功地從AWS控制檯執行:

一個有趣的現象,這要歸功於@Lakindu,是沒有方法在下面列出在階段的資源視圖:

還有什麼我能做的,找出什麼錯誤?

+0

您是否在選擇了lambda函數之後在左側菜單中檢入了API網關,階段「?不管它是否被阻止? –

+0

@Lakindu嗯,這確實看起來很可疑:http://i.imgur.com/8bpfgGT.png你知道爲什麼沒有方法列出'/期刊'嗎? – Vincent

+0

你需要有一個資源,內部資源,你可以有方法 點擊/期刊,然後行動按鈕,創建方法 –

回答

0

我發現了怎麼回事:

我的API是使用TerraForm部署的。在TerraForm中,您指定的資源之一是an API Gateway Deployment。我想如果它所依賴的資源(包括/periodicals資源)發生變化,它將重新部署API。

唉,我現在認爲我必須更新state_description才能強制進行新的部署。這樣做的好處是您可以在不影響API用戶的情況下更新配置,但這確實意味着您要部署更新的配置時明確需要執行操作。

希望這可以幫助任何人。

tl; dr與我的想法相反,在添加方法後,API實際上並未部署。 (您可以在AWS API網關控制檯中通過在「操作」下拉列表中選擇「部署API」手動執行此操作。