Amazon web services 大型JSON文件(4000个对象)没有';t写入dynamodb,但小文件(10个对象)可以工作
试图从Amazon web services 大型JSON文件(4000个对象)没有';t写入dynamodb,但小文件(10个对象)可以工作,amazon-web-services,amazon-s3,aws-lambda,amazon-dynamodb,aws-sdk-nodejs,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Dynamodb,Aws Sdk Nodejs,试图从S3 bucket读取大JSON(66mb)并将数据写入dynamodb时,在cloudwatch中获取任务在3.01秒后超时 较小的JSON文件正在读取和写入我的dynamodb表,但在本例中,当JSON文件包含大量对象(4000个对象,66MB文件)时,lambda函数只返回任务,该任务在3.01秒后超时 const AWS=require('AWS-sdk'); const s3=新的AWS.s3(); const documentClient=新的AWS.DynamoDB.docu
S3 bucket
读取大JSON(66mb)
并将数据写入dynamodb时,在cloudwatch中获取任务在3.01秒后超时
较小的JSON文件正在读取和写入我的dynamodb表,但在本例中,当JSON文件包含大量对象(4000个对象,66MB文件)时,lambda函数只返回任务,该任务在3.01秒后超时
const AWS=require('AWS-sdk');
const s3=新的AWS.s3();
const documentClient=新的AWS.DynamoDB.documentClient({
ConvertEmptyValue:true
} );
exports.handler=异步(事件)=>{
const{name}=event.Records[0].s3.bucket;
const{key}=event.Records[0].s3.object;
常量参数={
Bucket:name,
钥匙:钥匙
}
试一试{
const data=wait s3.getObject(params.promise();
const carsStr=data.Body.toString();
const usersJSON=JSON.parse(carsStr);
log(`USERS::${carsStr}`);
对于(var i=0;i
不要使用Lambda写入DynamoDB,而是在开发机器上填充表
如果您希望经常有大型JSON文件进入S3存储桶,为了触发Lambda,您需要增加函数的默认超时。最大超时时间为15分钟。默认超时为3秒
您还可以增加表中DynamoDB写入容量单位的数量。写入容量单位表示对大小不超过1KB的项每秒写入一次。例如,假设您创建了一个具有10个写入容量单位的表。这允许您每秒执行10次写入操作,写入的项目大小不超过每秒1KB
文档:AWS Lambda默认超时为3秒,这就是您在日志中看到超时错误的原因。您可以根据需要增加,最多可增加900秒
依照
Timeout–Lambda允许函数运行的时间量
在停止之前。默认值为3秒。允许的最大值
值为900秒
注意:对于需要更长执行时间的任务,增加超时时间肯定是一种解决方案。但是在增加超时之前总是考虑代码优化。这个问题与lambda有关,lambda超时是什么?也考虑使用文档客户端的BADCHWORD方法。问题是lambda超时!谢谢