我在Lambda中有一个函数,根据输入执行最多30秒。 该函数链接到一个API网关,所以我可以通过POST调用它,不幸的是,API网关限制为30s exaclty,所以如果我的函数运行时间更长,我的POST会收到“内部服务器错误”。
我看到了两个解决方案:
该函数在Python3.6中编码因此我可以访问事件和上下文对象。
答案 0 :(得分:3)
在lambda函数实际完成之前,向api网关返回一个通知。这对我的用例来说是可以接受的,但我不确定它会如何工作。
不幸的是,在Lambda完成之前,您将无法返回结果。否则,如果您尝试执行此操作,AWS将中断Lambda的执行,例如,通过多线程。
我建议您创建以下系统:
df1.registerTempTable('df1')
df2.registerTempTable('df2')
query = "select df1.* from df1 where df1.id in (select df2.id from df2)"
sqlContext.sql(query).show()
#+---+-----+
#| id|value|
#+---+-----+
#| 1| a|
#| 2| b|
#+---+-----+
。 (How to do it)SequenceNumber
为id。SequenceNumber
检查您在DynamoDB中的作业状态(如有必要)。如果只需要在不知道作业结果的情况下运行Lambda,就可以避免使用DynamoDB。
答案 1 :(得分:2)
statut方法很好,但我想给你一个替代方案:AWS步骤功能。基本上它可以实现法律解决方案的功能,但部署起来可能更容易。
您所要做的就是创建一个AWS步骤函数状态机,它将lambda函数作为唯一任务。 AWS Step函数本质上是异步工作的,并且具有了解状态以及最终结果的方法。查看文档以获取更多信息。
答案 2 :(得分:0)
一个非常简单的解决方案是让你的lambda函数只是异步调用另一个lambda函数,然后将结果返回给API网关。