2016-12-04 140 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

我修正了标题名称,谢谢指出。 –