2016-12-12 127 views
2

我的用例是這樣的,我將擁有以API網關結尾的AWS Lambda前端。調用AWS Lambda並異步返回API網關

我的要求是,一旦Lambda被調用,它應該返回一個200 OK響應回到API網關,它將這個轉發給調用者。 然後Lambda應該開始其有效負載的實際處理。

原因是API網關調用者服務期望在10秒內有一個響應,否則它會超時。所以我想在開始處理之前給出回覆。

這可能嗎?

+0

好像我們以前有這個問題,但我沒有找到一個合適的重複問題。 –

回答

2

是的,只需創建兩個Lambda函數即可。第一個Lambda函數將由API網關調用,並將簡單地調用第二個Lambda函數,然後立即成功返回,以便API網關可以使用HTTP 200響應客戶端。第二個Lambda函數只要需要完成就會花費很長時間。

+0

或者,可以使用隊列(SQS)。您可以將API網關直接連接到SQS隊列或使用Lambda函數。無論如何,您可以按照您喜歡的速度處理郵件。 – Bram

+0

是的2 lambda方法肯定可以做到。但是我們可以通過一個lambda來獲得嗎? –

1

使用API​​網關的「Lambda函數」集成類型,您無法使用單個Lambda函數執行此操作 - 該接口專門設計爲同步。如果要使用Lambda函數集成類型,解決方法是爲網關調用的同步Lambda函數通過Lambda API調用第二個異步Lambda函數。

然而,異步調用是可能的而不變通方法,使用AWS服務代理整合代替lambda函數集成。

如果您的API僅對後端的Lambda函數進行同步調用,則應使用Lambda函數集成類型。 [...]

如果您的API對Lambda函數進行異步調用,則必須使用本節中描述的AWS Service Proxy集成類型。這些說明也適用於同步Lambda函數調用的請求。對於異步調用,您必須明確將X-Amz-Invocation-Type:Event標頭添加到集成請求。

http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html

+0

我們如何添加這個頭文件?我們是否必須在「HTTP標題」下添加它?在集成請求中? 看來我只能添加標題映射,而不是硬編碼的標題值。 謝謝。 – vangap

+0

好的,它允許在單引號中使用標題值,但不能使用雙引號。這就是我掙扎的地方。這種糟糕的用戶體驗。 – vangap

+1

@vangap''STATIC_VALUE''。 *「STATIC_VALUE'是一個字符串字面值,必須包含在一對單引號內。」* http:// docs。aws.amazon.com/apigateway/latest/developerguide/request-response-data-mappings.html –