Amazon S3 バケットから別の S3 バケットに大量のデータを転送する際の最適な方法を教えてください。

最終更新日: 2021 年 5 月 27 日

Amazon Simple Storage Service (Amazon S3) バケットから別の S3 バケットに大量のデータ (1 TB 以上) を転送したいと考えています。その方法を教えてください。

簡単な説明

バケット間のデータ転送は、ユースケースに応じて次のいずれかのオプションを使用して実行できます。

  • AWS コマンドラインインターフェイス (AWS CLI) を使用して並列アップロードを実行する
  • AWS SDK を使用する
  • クロスリージョンレプリケーションまたは同一リージョンレプリケーションを使用する
  • Amazon S3 バッチオペレーションを使用する
  • Amazon EMR で S3DistCp を使用する
  • AWS DataSync を使用する

解決方法

AWS CLI を使用して並列アップロードを実行する

注意: ベストプラクティスとして、AWS CLI の最新バージョンを使用していることを確認してください。詳細については、AWS CLI のインストールを参照してください。

転送を相互に排他的な複数のオペレーションに分割することによって、マルチスレッドで転送時間を短縮できます。例えば、AWS CLI を使用して、aws s3 cpaws s3 mv、または aws s3 sync の複数の並列インスタンスを実行できます。AWS CLI の各インスタンスに対して --exclude および --include パラメータを使用しながら、より多くのアップロードスレッドを作成できます。これらのパラメータは、ファイル名でオペレーションをフィルタリングします。

注意 : --exclude および --include パラメータは、クライアント側で処理されます。このため、ローカルマシンのリソースがオペレーションのパフォーマンスに影響を与える可能性があります。

例えば、すべてのファイル名が数字で始まるバケット間で大量のデータをコピーするには、AWS CLI の 2 つのインスタンスで次のコマンドを実行します。まず、このコマンドを実行して、名前が 0~4 で始まるファイルをコピーします。

aws s3 cp s3://source-awsexamplebucket/ s3://destination-awsexamplebucket/ --recursive --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"

注意: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

次に、このコマンドを実行して、名前が 5~9 で始まるファイルをコピーします。

aws s3 cp s3://source-awsexamplebucket/ s3://destination-awsexamplebucket/ --recursive --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"

さらに、次の AWS CLI 設定をカスタマイズして、データ転送を高速化できます。

  • multipart_chunksize : この値で、単一ファイルのマルチパートアップロードで AWS CLI がアップロードする各パートのサイズを設定します。この設定では、大きなファイル (300 MB など) を小さなパートに分割して、アップロードを高速化できます。
    注意: マルチパートアップロードでは、1 つのファイルを最高 10,000 個の分割ファイルでアップロードする必要があります。設定したチャンクサイズが、分割ファイルのサイズとパート数のバランスを取っていることを確認する必要があります。
  • max_concurrent_requests: この値で、Amazon S3 に一度に送信できるリクエストの数を設定します。デフォルト値は 10 です。50 のような高い値に増やすことができます。
    注意 : より多くのスレッドを実行すると、マシンのリソースもその分多く消費されます。同時リクエストの最大量をサポートするために十分なリソースがマシンにあることを確認する必要があります。

AWS SDK を使用する

AWS SDK を使用して、大量のオブジェクトに対してデータ転送を実行するためのカスタムアプリケーションを構築することを検討します。AWS CLI はコピーオペレーションを実行できますが、数億のオブジェクトというような規模で転送を実行するには、カスタムアプリケーションの方がより効率的である可能性があります。

クロスリージョンレプリケーションまたは同一リージョンレプリケーションを使用する

レプリケート元バケットで クロスリージョンレプリケーション (CRR) または同一リージョンレプリケーション (SRR) を設定すると、Amazon S3 はレプリケート元バケットからレプリケート先バケットに、新しいオブジェクトを自動的かつ非同期的にレプリケートします。プレフィックスまたはタグを使用して、レプリケートされるオブジェクトをフィルタリングすることを選択できます。レプリケーション設定とフィルタ指定の詳細については、レプリケーション設定の概要を参照してください。

レプリケーションが設定されると、新しいオブジェクトのみがレプリケート先バケットにレプリケートされます。レプリケート先バケットに、既存のオブジェクトはレプリケートされません。既存のオブジェクトをレプリケートするには、レプリケート元バケットでレプリケーションを設定した後、次の cp コマンドを実行します。

aws s3 cp s3://source-awsexamplebucket s3://source-awsexamplebucket --recursive --storage-class STANDARD

このコマンドは、レプリケート元バケットのオブジェクトをレプリケート元バケットにコピーし、レプリケート先バケットへのレプリケーションをトリガーします。

注意: 実稼働環境以外で cp コマンドをテストすることがベストプラクティスです。これにより、実際のユースケースに合わせてパラメータを設定できます。

Amazon S3 バッチオペレーションを使用する

Amazon S3 のバッチオペレーションを使用することで、単一のリクエストで複数のオブジェクトをコピーできます。バッチオペレーションジョブを作成するときは、Amazon S3 インベントリレポートを使用して、オペレーションを実行するオブジェクトを指定します。または、CSV マニフェストファイルを使用してバッチジョブを指定できます。次に、Amazon S3 バッチオペレーションが API を呼び出してオペレーションを実行します。

バッチオペレーションジョブが完了すると、通知が届きます。そして、ジョブに関する完了レポートを受け取ることを選択できます。

Amazon EMR で S3DistCp を使用する

Amazon EMR の S3DistCp オペレーションでは、Amazon S3 バケット間で大量のオブジェクトの並列コピーを実行できます。S3DistCp はまず、ソースバケットから Amazon EMR クラスターのワーカーノードにファイルをコピーします。次に、このオペレーションがワーカーノードからのファイルを送信先バケットに書き込みます。S3DistCp の使用に関する詳細なガイダンスについては、Seven tips for using S3DistCp on Amazon EMR to move data efficiently between HDFS and Amazon S3 を参照してください。

重要: このオプションでは Amazon EMR を使用する必要があるため、Amazon EMR の料金を確認してください。

AWS DataSync を使用する

Amazon S3 バケットから別のバケットに大量のデータを移動するには、次の手順を実行します。

1.    AWS DataSync コンソールを開きます。

2.    タスクを作成します

3.    Amazon S3 用の新しい場所を作成します

4.    ソースの場所として S3 バケットを選択します。

5.    ソースの場所の構成設定を更新します。ソース S3 バケットへのアクセスに使用される AWS Identity Access Management (IAM) ロールを必ず指定してください。

6.    送信先の場所として S3 バケットを選択します。

7.    送信先の場所の構成設定を更新します。S3 送信先バケットへのアクセスに使用される AWS Identity Access Management (IAM) ロールを必ず指定してください。

8.    タスクの設定を構成します

9.    構成の詳細を確認します。

10.    [Create task] (タスクの作成) を選択します。

11.    タスクを開始します

重要: AWS DataSync を使用する場合、追加料金が発生します。DataSync コストをプレビューするには、DataSync の料金体系と DataSync の制限を確認してください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?