![](/img/trans.png)
[英]Java Lambda Function is getting timed out while connecting to Informix DB
[英]AWS Lambda: Task timed out
我们被要求为我的学校项目编写在 AWS Lambda 中运行的 Java 代码。 它应该获取特定 URL 的源代码,然后将其上传到 S3 存储桶。 Java 代码应该在 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 在这种特定情况下无法将文件写入其临时目录并且可以与其他人一起使用吗?
Amazon Lambda 旨在用作响应事件的事件驱动系统。 流程是:
Lambda 函数的最大执行时间限制为 15 分钟(最近从最初的 5 分钟超时增加了)。 实际限制是在创建 Lambda 函数时配置的。 限制已经到位,因为 Lambda 函数旨在小而快速,而不是大型应用程序。
您的错误消息说Task timed out after 15.00 seconds
。 这意味着一旦任务运行时间达到 15 秒,AWS 就会有意停止该任务。 它与函数当时在做什么无关,也与正在处理的文件无关。
解决方法:增加 Lambda 函数配置页面上的超时设置。
在我的情况下,当任务在本地运行良好但在 Lambda 上超时时,这是因为我需要增加分配给 Lambda 实例的内存。
对于那些在使用async
时遇到这个超时问题的人,请注意异步函数的处理程序的模式不同。
代替
exports.handler = function (event, context, callback) {
callback(null, {
statusCode: 200,
body: JSON.stringify({/* return stuff here */})
});
};
它是
exports.handler = async function (event, context) {
return {
statusCode: 200,
body: JSON.stringify({/* return stuff here */})
};
};
我通过将 AWS-SDK 放在函数体之外解决了这个问题:
var AWS = require("aws-sdk"); exports.handler = function(event, context, callback) { //var AWS = require("aws-sdk"); //Error: Task timed out after 3.00 seconds var docClient = new AWS.DynamoDB.DocumentClient(); console.log("Lambda starts"); ...
最近,我正在研究一个 POC 以使用 AWS Lambda 函数。 我也面临同样的问题(任务在 15.01 秒后超时)。 我只是增加了内存分配,它解决了问题。 美妙之处在于我可以在几秒钟内得到响应。 所以,我认为错误几乎没有误导性。 它应该提供失败的确切根本原因。
我遇到了同样的问题,但它是间歇性发生的。 我在使用 Insights n XRay 进行调试时浪费了更多时间,但没有从中得到任何好处。
最后我尝试了一件事,我的 VPC 中有 2 个子网,私有和公共。 所以我只保留了私有子网并删除了另一个。
瞧!!
它不再失败..但我仍然不知道原因,将保持发布。 如果可行,请尝试使用单个子网运行 lambda。
首先,为什么要写入/tmp/? 您写入执行 Lambda 函数的同一位置?
但是,更好的做法是,如果您想将字符串写入 S3 文件,那么您可以创建一个 S3Object 并将其直接写入 AWS S3。 这是一个显示示例的帖子: https : //stackoverflow.com/a/29844224/358013
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.