尝试从 S3 存储桶
读取大型 JSON(66mb)
并写入数据时,在 CloudWatch 中收到 Task timed out after 3.01秒
消息到 dynamodb。
较小的 JSON 文件正在读取和写入我的 dynamodb 表,但是当 JSON 文件在此实例中包含大量对象(4000 个对象,66MB 文件)时,lambda 函数仅返回 任务在 3.01 秒后超时
.
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const documentClient = new AWS.DynamoDB.DocumentClient( {
convertEmptyValues: true
} );
exports.handler = async (event) => {
const{name} = event.Records[0].s3.bucket;
const{key} = event.Records[0].s3.object;
const params = {
Bucket: name,
Key: key
}
try {
const data = await s3.getObject(params).promise();
const carsStr = data.Body.toString();
const usersJSON = JSON.parse(carsStr);
console.log(`USERS ::: ${carsStr}`);
for (var i = 0; i < usersJSON.length; i++) {
var record = usersJSON[i];
console.log("Inserting record: " + record);
var putParams = {
Item: record,
ReturnConsumedCapacity: "TOTAL",
TableName: "cars"
};
await documentClient.put(putParams).promise();
}
} catch(err) {
console.log(err);
}
};
最佳答案
AWS Lambda 默认超时为 3 秒,这就是您在日志中看到超时错误的原因。您可以根据需要增加它,最多可达 900 秒
Timeout – The amount of time that Lambda allows a function to run before stopping it. The default is 3 seconds. The maximum allowed value is 900 seconds.
注意:增加超时肯定是需要较长执行时间的任务的解决方案。但在增加超时之前始终考虑代码优化。
关于amazon-web-services - 大 JSON 文件(4000 个对象)不写入 dynamodb 但小文件(10 个对象)可以工作是否有原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58581226/