amazon-web-services - 大 JSON 文件(4000 个对象)不写入 dynamodb 但小文件(10 个对象)可以工作是否有原因

标签 amazon-web-services amazon-s3 aws-lambda amazon-dynamodb aws-sdk-nodejs

尝试从 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 秒

根据 official documentation

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/

相关文章:

python-3.x - 将 GLACIER 对象恢复到 S3 标准层

node.js - Lambda 会收到已消费的 SQS 消息吗?

amazon-web-services - 从 Elastic Beanstalk .ebextensions 配置文件中引用环境变量

json - CFT 模板错误:Fn::If 中未解决条件依赖性 UseDBSnapshot

amazon-s3 - 学习 Amazon Web Services 的好书

amazon-web-services - 禁用进度输出 aws s3 同步而不禁用所有输出

python - AWS lambda : cannot import name '_imaging' from 'PIL'

python - 从 AWS 运行 FFmpeg

amazon-web-services - 我可以使用 VPC 终端节点从我的账户 ec2 连接到不同账户 AWS 服务(s3、dynamoDb)吗?

php - 使用 PHP 将整个文件夹上传到 Amazon S3 存储桶