2017-07-26 52 views
0

我正在使用Amazon API網關在調用API端點時執行Lambda函數。在我的Lambda函數中,我正在更新DynamoDB表。未調用Lambda函數的API網關緩存

每當我使用Chrome開發人員工具禁用緩存來調用API時,DynamoDB表就會更新。

當我啓用了緩存時,來自API的第一個請求更新了表,每個後續請求都快得多,但不會更新表。

我假設CloudFront正在緩存響應,以便不必每次都調用Lambda函數。

有沒有辦法強制每個請求執行Lambda函數?

+0

緩存的整個目的是不調用Lambda函數。這聽起來像你實際上並不想要啓用緩存。 –

+0

@MarkB我不想緩存,但添加自定義域名時會自動添加CloudFront。 – Francis

+0

啊,我誤解了你的問題。首先確保您在API設置中禁用緩存。如果您禁用了該功能,CloudFront將不會緩存您的API響應。這聽起來像你的實際問題是在瀏覽器緩存。 API響應中的「cache-control」標頭值是什麼? –

回答

1

一些可能的解決方案:當u要緩存

  1. CloudFront的只應使用。在這種情況下,你不需要它;所以直接從瀏覽器調用API端點而不是調用CF端點。這也將節省您的雲端成本。

  2. 每個請求都添加一個時間戳。如果你不得不使用CF;您可以非常輕鬆地配置它,以便哪些請求始終轉到API端點(它提供動態內容),而哪些請求將被緩存。

  3. 可能你是在調用CF作爲GET請求;只是使它永遠不會被緩存的POST。理想情況下,當你更新表時,它應該是一個POST請求。這應該是簡單的解決方案,只需進行最小限度的更改。

+0

我認爲CloudFront是默認添加的,因爲即使直接調用API似乎也有同樣的問題。 – Francis

+0

只需使用4 ..它將像魅力一樣工作 – Deepak

+0

問題是我希望使用GET請求來調用API,我正在創建一個由Lambda支持的簡單URL縮短應用程序,但我必須使用API​​網關能夠稱呼它。如果我告訴GET請求發送POST請求到我的API,它會工作嗎?我嘗試了它,迄今爲止它還沒有工作,但我不確定是否僅僅是因爲緩存。 – Francis

相關問題