我正在尝试使用AWS 3 Lambda(使用Python 3)将数据从CSV转换为JSON。文件的大小为65 MB,因此在完成该过程之前它会超时,并且整个执行都会失败。
我将需要知道如何处理这样的情况,即AWS Lambda应该能够在超时时间内处理最大的数据集,而剩余的有效负载应保存在S3存储桶中。
import json
import boto3
import csv
import os
json_content = {}
def lambda_handler(event, context):
s3_source = boto3.resource('s3')
if event:
fileObj=event['Records'][0]
fileName=str(fileObj['s3']['object']['key'])
eventTime =fileObj['eventTime']
fileObject= s3_source.Object('inputs3', fileName)
data = fileObject.get()['Body'].read().decode('utf-8-sig').split()
arr=[]
csvreader= csv.DictReader(data)
newFile=getFile_extensionName(fileName,extension_type)
for row in csvreader:
arr.append(dict(row))
json_content['Employees']=arr
print("Json Content is",json_content)
s3_source.Object('s3-output', "output.json").put(Body=(bytes(json.dumps(json_content).encode('utf-8-sig'))))
print("File Uploaded")
return {
'statusCode': 200,
'fileObject':eventTime,
}
内存:640 MB
超时:15分钟
由于您的功能已超时,所以只有两个选项:
或
AWS Lambda函数最常见的用例是小型微服务,有时只运行几秒钟甚至一秒钟的时间。
如果您的用例运行了15分钟以上,那么它可能不是AWS Lambda的理想选择。
[您可以查看其他选择,例如在Amazon EC2实例上运行代码或使用Fargate容器。
似乎您的函数内存不足:
Memory Size: 1792 MB Max Memory Used: 1792
而且,它只运行了12分钟:
Duration: 723205.42 ms
((723秒≈12分钟)
因此,您应该:
/tmp/
中,而不是在内存中累积JSON字符串,然后将结果文件上传至Amazon S3但是,提供给AWS Lambda函数的最大磁盘存储空间为512MB,并且看来您的输出文件大于此大小。因此,增加内存将是唯一的选择。与为Lambda函数分配更多资源有关的费用增加表明,使用EC2或Fargate而不是Lambda可能会更好。