我有一个AWS S3结构,看起来像这样:
bucket_1
|
|__folder_1
| |__file_1
| |__file_2
|
|__folder_2
|__file_1
|__file_2
bucket_2
我正在努力寻找一个"好方法"。(高效率和成本效益)实现以下目标:
bucket_1
|
|__folder_1
| |__file_1
| |__file_2
|
|__folder_2
|__file_1
|__file_2
bucket_2
|
|__folder_1_file_1
|__folder_2_file_1
|__processed_file_2
地点:
folder_1_file_1
和folder_2_file_1
是原始的两个file_1
,已被复制/重命名(在文件夹路径前加上file_name)到新桶processed_file_2
是一个依赖于两个file_2
内容的文件(例如,如果file_2
是文本文件,processed_file_2
可能是一个联合文本文件,其中两个原始文件相互追加-注意这只是一个例子)。
我确实有一个python脚本在本地为我做这件事(复制/重命名文件,处理其他文件并移动到一个新文件夹),但我不确定我应该在AWS上使用什么工具来做这件事,而不必下载数据,处理它们并重新上传它们。
我已经做了一些阅读,我已经看到AWS lambda可能是这样做的一种方式,但我不确定它是理想的解决方案。我甚至不确定我是否应该把这个作为一个python脚本,或者我应该看看其他的方式(我对其他编程语言/工具开放,只要它们可能是一个很好的解决我的问题)。
作为一个加分项,让这个过程每N天触发一次,或者当达到某个文件阈值时触发一次,这将是有用的,但半自动化的解决方案(我应该手动运行脚本/使用工具)将是一个可接受的解决方案。
[在s3 bucket中使用boto3移动和重命名对象]
import boto3
s3_resource = boto3.resource(‘s3’)
# Copy object A as object B
s3_resource.Object(“bucket_name”, “newpath/to/object_B.txt”).copy_from(
CopySource=”path/to/your/object_A.txt”)
# Delete the former object A
s3_resource.Object(“bucket_name”, “path/to/your/object_A.txt”).delete()
您可以使用s3fs模块移动s3桶中的文件。
import s3fs
path1='s3:///bucket_name/folder1/sample_file.pkl'
path2='s3:///bucket_name2/folder2/sample_file.pkl'
s3=s3fs.S3FileSystem()
s3.move(path1,path2)
如果您有凭据,您可以在S3FileSystem的client_kwargs中传递,如下所示:
import s3fs
path1='s3:///bucket_name/folder1/sample_file.pkl'
path2='s3:///bucket_name/folder2/sample_file.pkl'
credentials= {}
credentials.setdefault("region_name", r_name) # mention the region
credentials.setdefault("aws_access_key_id", a_key) # mention the access_key_id
credentials.setdefault("aws_secret_access_key", s_a_key) # mention the
secret_access_key
s3=s3fs.S3FileSystem(client_kwargs=credentials)
s3.move(path1,path2)