提高lambda cod的s3读取性能

2024-04-19 01:20:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从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)

Tags: 文件方法lambda代码namejson内容s3
2条回答

当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/,您可以使用它来构建一个基于低延迟容器的服务,并将文件放入容器中。在

相关问题 更多 >