我正在从s3 bucket读取一个大的json文件。lambda在一秒钟内会被呼叫几百次。当并发性很高时,lambdas开始超时。在
有没有一种更有效的方法来编写下面的代码,即我不必每次都从S3下载文件或在lambda的不同实例之间重用内存中的内容:-)
文件内容一周只更改一次!在
我无法拆分文件(由于json结构),必须立即读取。在
s3 = boto3.resource('s3')
s3_bucket_name = get_parameter('/mys3bucketkey/')
bucket = s3.Bucket(s3_bucket_name)
try:
bucket.download_file('myfile.json', '/tmp/' + 'myfile.json')
except:
print("File to be read is missing.")
with open(r'/tmp/' + 'myfile.json') as file:
data = json.load(file)
当Lambda函数执行时,它可以检查
/tmp/
中是否存在该文件,因为容器可能会被重用。在但是,您必须找出如何处理每周更新。也许是根据日期改变文件名?或者检查文件上的时间戳,看看是否需要新的时间戳?在
可能,您没有达到请求速率限制https://docs.aws.amazon.com/AmazonS3/latest/dev/optimizing-performance.html,但值得尝试用另一个前缀复制同一个S3文件。在
一个可能的解决方案是通过将JSON文件放入函数代码来避免查询S3。另外,您可能希望将其作为Lambda层添加,并从Lambda加载:https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html在这种情况下,您可以通过添加另一个Lambda来自动更新s3文件,该Lambda将由s3更新触发并调用https://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionCode.html
作为一个长期的解决方案,检查Fargatehttps://aws.amazon.com/fargate/getting-started/,您可以使用它来构建一个基于低延迟容器的服务,并将文件放入容器中。在
相关问题 更多 >
编程相关推荐