2017-04-23 199 views
3

我们已要求我的学校项目编写在AWS Lambda中运行的Java代码。它应该获取特定URL的源代码,然后将其上传到S3存储桶。 Java代码应该在AWS Lambda上运行。AWS Lambda:任务超时

我得到了Java中String变量的源代码。然后我有while循环,试图将字符串写入/ tmp目录中的文件。然后该文件被上传到S3。

一切正常,但我陷入了一个特定的URL。我已经跟踪到这一点的问题:

try { 
    BufferedWriter out = new BufferedWriter(new FileWriter("/tmp/url.txt")); 
    out.write(source_code); //Replace with the string 
    //you are trying to write 
    out.close(); 
} 
catch (IOException e) { 
    System.out.println("Exception "); 
} 

最奇怪的是,当我在本地测试代码,一切正常。文件在我的计算机上的/ tmp目录中创建,然后上载到S3存储桶。然而,当我运行LAMBDA的代码,我得到以下错误:

Task timed out after 15.00 seconds 

任何想法,为什么LAMBDA不能写入文件到其临时目录在这种特殊情况下,它与人的作品?

+0

是否[此](http://stackoverflow.com/questions/37987576/how-to-scale-lambda-when-tmp-is-reused)有帮助吗? (只是在黑暗中拍摄,我真的不知道) – ajb

回答

10

亚马逊Lambda旨在用作响应事件的事件驱动系统。流量是:

  • 有事某处触发拉姆达(例如上载到Amazon S3,数据进入一个Amazon室壁运动流,应用​​程序直接调用lambda函数)
  • lambda函数是创建,从触发事件数据被传递
  • lambda函数运行

Lambda函数被限制为5分钟的最大执行时间。实际限制是在创建Lambda函数时配置的。这个限制已经到位,因为Lambda函数意味着小而快,而不是大型应用程序。

您的错误消息说Task timed out after 15.00 seconds。这意味着AWS 一旦运行时间达到15秒就会故意停止该任务。它与当时的功能和正在处理的文件无关。

修复:增加Lambda函数配置页面上的超时设置。

+0

我同意@约翰。您需要增加可延长至5分钟的lambda超时限制。您的代码需要超过15秒的时间来处理。 –

+0

这就是我的尝试,我已经超时了2分钟,仍然没有运气。我的Lambda函数每15分钟运行一次,由Jenkins触发。我不明白什么时候在本地运行,它工作得很好,但是当在Lambda上时,它失败了。这也发生在一个特定的网站上,其他网站都很好,并且Lambda正确处理它。另外,你认为最好不要在/ tmp目录中存储任何内容,并直接从内存上传到S3存储桶中?非常感谢。 –

+0

现在您已将超时时间增加到2分钟,您是否收到“超过120秒后超时”消息?如果是这样,这意味着事情还没有完成。你应该记录尽可能多的信息,然后使用日志来弄清楚所有的时间。 (这就是编程的乐趣!)在你上传文件后肯定会从'/ tmp'中删除文件,否则你的空间不足。在上传之前记录文件的大小会很好,所以如果失败了,你会知道它想要做什么。 –

0

首先,为什么写入/ tmp /?你写入Lambda函数执行的地方?

但是,更好的方法是,如果要将字符串编写为S3文件,则可以创建S3Object并将其直接写入AWS S3。这里有一个帖子展示了一个例子:https://stackoverflow.com/a/29844224/358013

+0

/tmp /是唯一的位置,lambda让你写文件 –

0

在我的情况下,当任务在本地工作正常但在Lambda上超时时,这是因为我需要增加分配给Lambda实例的内存。