【发布时间】:2021-05-19 13:35:46
【问题描述】:
我需要将一些大文件(1 TB 到 5 TB)从一个 S3 位置移动到同一存储桶中的不同目录或不同存储桶。
我能想到的更稳健的方法很少。
-
基于 ObjectCreated 触发 lambda 函数:Put 触发器并使用 boto3 将文件复制到新位置并删除源文件。干净利落。但是,如果在复制文件时出现任何错误,我将丢失该事件。我必须同时设计某种跟踪系统。
-
使用 same-region-replication 并在复制完成后删除源。我认为复制对象后不会发出任何事件,所以我不确定。
-
触发 Step 函数,并将 Copy 和 Delete 作为单独的步骤。这样,如果由于某种原因复制或删除步骤失败,我可以重新运行状态机。问题又来了,如果文件太大而 lambda 无法复制怎么办?
-
基于
ObjectCreated:Put触发器触发一个lambda函数并创建一个数据管道并使用aws s3 mv移动文件。这可能有点贵。
这样做的正确方法是什么?
我正在寻找有关正确方法的建议。我不是在寻找代码。请不要发布aws s3 cp 或aws s3 mv 或aws s3api copy-object 一行命令。
【问题讨论】:
-
这是一次性要求还是持续要求?也就是说,是否所有对象都已经存在,或者您希望在将来创建新对象时进行复制?请注意,S3 复制仅在创建对象时触发——它不适用于现有对象。此外,您是否愿意编写涉及多部分副本的代码?
-
这是一个持续的解决方案。随着新对象的上传,它应该复制和删除。我可以用 shell 和 Python 编写代码。
标签: amazon-web-services amazon-s3