Python Boto3 - 如何在进程开始复制到另一个存储桶之前检查 s3 文件是否已完全写入



在进程 B 开始使用 boto3 将文件复制到 AWS S3 存储桶 B 之前,如何确保进程 A 已在 AWS S3 存储桶 A 中完全写入大文件 (5+ GB(?

如果在 Amazon S3 中创建新对象,则该对象只会在上传完成后显示。在完成上传之前,其他进程将无法查看它。

无法在 S3 中更新对象。相反,它们被替换为新对象。因此,如果对象正在更新过程中,它仍将显示为其他进程的旧对象。

最佳方法是通过配置 Amazon S3 事件通知来触发流程 B。上传新对象后,S3 可以触发 Lambda 函数(或发送通知(,然后可以执行第二步。

您绝对应该使用 s3 事件通知作为将文件从存储桶 A 复制到存储桶 B 的 lambda 函数的触发器。触发器可确保在文件完全上传后开始复制。

此外,如果您有进一步的操作要执行,您可以使用 AWS step 函数在其中定义流程的工作流,例如,进程 B 将在进程 A 2 秒后启动,进程 C 和 D 将在进程 B 结束后并行执行,等等。

我也上传高达 40GB。

由于我进行多部分上传,因此我检查我正在写入的文件是否closed。S3 文件(对象(仅在所有操作完成后关闭。

另一种方法是使用异步任务队列,如 Celery。任务完成后,您将收到通知。

我现在使用 Golang,但这两种方法对我来说都非常有效。

最新更新