![](/img/trans.png)
[英]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.