2016-12-04 177 views
2

我試圖融入我的lambda函數,因爲時間過久,與API網關必須運行異步。我相信我必須選擇「AWS服務」並指定Lambda,而不是選擇「Lambda」集成類型。 (例如,thisthis似乎暗示)。API網關:AWS子域LAMBDA集成

但是,當我嘗試將AWS子域設置爲我的Lambda函數的ARN時,我收到消息「AWS ARN for integration必須包含路徑或操作」。如果我將子域名設置爲我的Lambda函數的名稱,那麼在嘗試部署時,我會收到「AWS ARN for integration contains invalid path」。

什麼是正確的AWS子域這種類型的集成?

請注意,我也可以採取this post的建議並設置Kinesis流,但對於我的簡單用例來說這似乎過分。如果這是解決我的問題的正確方法,那麼很樂意嘗試。

編輯:包括屏幕截圖

Screenshot of my AWS API Gateway Integration Request Page

編輯:請參考下面的註釋不完整的解決方案。

+0

我不明白你在此背景下的短語 「AWS子域」 的使用。這個術語在控制檯中使用嗎?顯示一個截圖,也許? ARN格式似乎將是形式'阿爾恩:AWS:波長:{}區域:{帳戶ID}:功能:{函數名稱}/invocations',所有的事情不括在'{}'是文字字符串,如[在這裏]所示(http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html)。 –

+0

好的,我可以更清楚了!我會更新我的帖子以反映這一點。另外,對於後人:將AWS Subdomain設置爲空白並將Path Override設置爲Action:InvokeFunction允許我部署API,但尚未(尚未?)使其可用。 –

+0

謝謝你的澄清。 –

回答

2

所以這是非常惱人成立,但這裏有兩種方法:

  1. 建立經常性的LAMBDA整合,然後添加在這裏http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html描述的InvocationType頭。值應該是'Event'。

    • 這很煩人,因爲當您將Lambda函數作爲Integration類型時,控制檯不會讓您添加標題。您必須使用SDK或CLI,或使用Swagger輕鬆添加標頭。
  2. 將整件事爲控制檯的AWS集成(這是你的問題做什麼),只是讓你可以設置InvocationType頭在控制檯

    • 離開子域空白
    • 「使用路徑覆蓋」並將其設置爲/2015-03-31/functions/<FunctionARN>/invocations其中<FunctionARN>是你的lambda函數
    • HTTP方法的全部ARN是POST
    • 添加靜態頭呃X-Amz-Invocation-Type與價值'Event'

http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html

+0

謝謝!對於後代,我嘗試了選項#2,它的工作。我沒有嘗試選項#1 –

+0

我修正了標題名稱,謝謝指出。 –