[英]How to move a File from One folder to Another Folder in the same AWS S3 bucket using Lambda?
[英]Best way to move contents from one s3 object/folder to another within the same bucket?
我有一份工作需要将 ~150GB 从一个文件夹转移到另一个文件夹。 这每天运行一次。
def copy_new_data_to_official_location(bucket_name):
s3 = retrieve_aws_connection('s3')
objects_to_move = s3.list_objects(
Bucket=bucket_name, Prefix='my/prefix/here')
for item in objects_to_move['Contents']:
print(item['Key'])
copy_source = {
'Bucket': bucket_name,
'Key': item['Key']
}
original_key_name = item['Key'].split('/')[2]
s3.copy(copy_source, bucket_name, original_key_name)
我有以下。 这个过程需要一些时间,而且,如果我没看错的话,我会支付在对象之间移动的转移费。
有没有更好的办法?
流动:
以每日节奏重复上述流程。
Spark 有点奇怪,所以需要将 output 复制到 folder_2,否则重定向到 folder_1 会在作业开始之前导致数据擦除。
如果源存储桶和目标存储桶位于同一区域,则不收取数据传输费用。 由于您只是在同一个存储桶中复制,因此不会产生数据传输费用。
150 GB 不是很多数据,但是如果有很多对象,复制可能需要一些时间。 启动复制的开销有时会比实际复制数据花费更多的时间。 使用copy()
命令时,所有数据都在 Amazon S3 中传输——没有任何内容被复制到发出命令的计算机。
有几种方法可以使这个过程更快:
您可以并行发出copy()
命令。 事实上,这就是AWS 命令行界面 (CLI)在使用aws s3 cp --recursive
和aws s3 sync
时的工作方式。
您可以使用 AWS CLI来复制对象,而不是编写自己的程序。
您可以在 Amazon S3 中配置复制,以便在创建对象后立即复制对象,而不是每天复制一次对象。 (虽然我没有尝试过使用相同的源和目标存储桶。)
如果您需要对立即复制的对象更有选择性,您可以将 Amazon S3 配置为在创建新 object 时触发 AWS Lambda function 。 Lambda function可以应用一些业务逻辑来确定是否复制object,然后它可以发出copy()
命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.