Amazon S3 バケットから別の S3 バケットに大量のデータを転送する際の最適な方法を教えてください。
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 cp、aws s3 mv、または aws s3 sync の複数の並列インスタンスを実行できます。AWS CLI の各インスタンスに対して --exclude および --include パラメータを使用しながら、より多くのアップロードスレッドを作成できます。これらのパラメータは、ファイル名でオペレーションをフィルタリングします。
注意: --exclude パラメータと --include パラメータは、クライアント側で処理されます。したがって、ローカルマシン上のリソースがオペレーションのパフォーマンスに影響する可能性があることに注意してください。
例えば、あるバケットから別のバケット (ファイル名が数字で始まる) に大量のデータをコピーするには、次のコマンドを実行します。
まず、このコマンドを実行して、名前が 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 の最新バージョンを使用していることを確認してください。
次に、2 番目の 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 です。マシン上のリソースのように大きい値に増やすことができます。同時リクエストの最大量をサポートするための十分なリソースがマシンにあることを確認してください。
AWS SDK を使用する
AWS SDK を使用して、大量のオブジェクトに対してデータ転送を実行するためのカスタムアプリケーションを構築することを検討します。また、AWS CLI は、コピーオペレーションの実行にも使用できます。ただし、数億のオブジェクトというような規模で転送を実行するには、カスタムアプリケーションの方がより効率的である可能性があります。
クロスリージョンレプリケーションまたは同一リージョンレプリケーションを使用する
レプリケート元バケットでクロスリージョンレプリケーション (CRR) または同一リージョンレプリケーション (SRR) を設定すると、Amazon S3 はレプリケート元バケットからレプリケート先バケットに、新しいオブジェクトを自動的にレプリケートします。プレフィックスまたはタグをフィルターとして使用して、レプリケートするオブジェクトを選択できます。レプリケーション設定とフィルタ指定の詳細については、レプリケーション設定の概要を参照してください。
レプリケーションが設定されると、新しいオブジェクトのみがレプリケート先バケットにレプリケートされます。レプリケート先バケットに、既存のオブジェクトはレプリケートされません。詳細については、「S3 バッチレプリケーションによる既存のオブジェクトの複製」を参照してください。
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. タスクを作成します。
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 の制限を確認してください。

関連するコンテンツ
- 質問済み 5年前lg...
- 質問済み 5年前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 5ヶ月前lg...
- 質問済み 3年前lg...
- AWS公式更新しました 7ヶ月前
- AWS公式更新しました 7ヶ月前