簡體   English   中英

將內容從一個 s3 對象/文件夾移動到同一個存儲桶中的另一個的最佳方法?

[英]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)

我有以下。 這個過程需要一些時間,而且,如果我沒看錯的話,我會支付在對象之間移動的轉移費。

有沒有更好的辦法?

流動:

  1. 在 Spark 上運行大規模作業以從 folder_1 和外部源輸入數據
  2. 將 output 復制到文件夾_2
  3. 刪除 folder_1 中的所有內容
  4. 將文件夾_2 的內容復制到文件夾_1

以每日節奏重復上述流程。

Spark 有點奇怪,所以需要將 output 復制到 folder_2,否則重定向到 folder_1 會在作業開始之前導致數據擦除。

如果源存儲桶和目標存儲桶位於同一區域,則不收取數據傳輸費用。 由於您只是在同一個存儲桶中復制,因此不會產生數據傳輸費用。

150 GB 不是很多數據,但是如果有很多對象,復制可能需要一些時間。 啟動復制的開銷有時會比實際復制數據花費更多的時間。 使用copy()命令時,所有數據都在 Amazon S3 中傳輸——沒有任何內容被復制到發出命令的計算機。

有幾種方法可以使這個過程更快:

  • 您可以並行發出copy()命令。 事實上,這就是AWS 命令行界面 (CLI)在使用aws s3 cp --recursiveaws s3 sync時的工作方式。

  • 您可以使用 AWS CLI來復制對象,而不是編寫自己的程序。

  • 您可以在 Amazon S3 中配置復制,以便在創建對象后立即復制對象,而不是每天復制一次對象。 (雖然我沒有嘗試過使用相同的源和目標存儲桶。)

  • 如果您需要對立即復制的對象更有選擇性,您可以將 Amazon S3 配置為在創建新 object 時觸發 AWS Lambda function Lambda function可以應用一些業務邏輯來確定是否復制object,然后它可以發出copy()命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM