sta*_*ion 0 java amazon-s3 amazon-web-services aws-lambda
我正在创建一个 aws lambda 函数,它下载 s3 文件并根据每次收到的事件对其进行处理。但是我不想每次都从 s3 下载 s3 文件。谁能建议我如何只下载一次 s3 文件并处理传入事件,而不必每次都下载 s3 文件?
目前,即使我将代码从 lambdafunctionhandler 类的构造函数中的 s3 下载,它每次都会下载
如果您有任何代码参考或示例,请使用java。提前致谢
如果并行运行多个 lamdbas,则上下文不会被重用。所以你需要下载所有 lambda 中的文件。要存储文件,请使用 /tmp/。它的限制为 512MB。
但是,如果您在另一个 lamdba 后运行 lamdba,则上下文可能会被重用,因此该文件将存在。请记住冷启动。
执行 Lambda 函数后,AWS Lambda 会在一段时间内维护执行上下文,以等待下一次 Lambda 函数调用。实际上,如果 AWS Lambda 选择在再次调用 Lambda 函数时重用上下文,则服务会在 Lambda 函数完成后冻结执行上下文,并解冻上下文以供重用。这种执行上下文重用方法具有以下含义:
- 在函数处理程序方法外部声明的对象保持初始化状态,从而在
再次调用函数时提供额外的优化。例如,如果您的 Lambda 函数建立了
数据库连接,则
在后续调用中将使用原始连接,而不是重新建立连接。我们建议在您的代码中添加逻辑,以在 创建连接
之前检查连接是否存在。
每个执行上下文在 /tmp 目录中提供 512 MB 的额外磁盘空间。当执行上下文被冻结时,目录内容仍然保留,提供可用于多次调用的临时缓存。您可以添加额外的代码来检查缓存中是否有您存储的数据。有关部署限制的信息,请参阅 AWS Lambda 限制。如果 AWS Lambda 选择重用执行上下文,则由 Lambda 函数启动且在函数结束时未完成的后台进程或回调将恢复。您应该确保代码中的所有后台进程或回调在代码退出之前完成。
从 S3 下载对象的示例代码:
AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withRegion(Regions.EU_WEST_1)
.build();
//S3 download file
GetObjectRequest getObjectRequest = new GetObjectRequest(System.getenv("bucket"), "key");
s3client.getObject(getObjectRequest, new File("/tmp/example.png"));
Run Code Online (Sandbox Code Playgroud)
编辑 1: 对于需要维护不同调用之间状态的应用程序,一般不建议使用 Lambda 和 Serverless。
| 归档时间: |
|
| 查看次数: |
4696 次 |
| 最近记录: |