Amazon シンプルストレージサービス (Amazon S3) の 1 つのバケットから別のバケットに大量のデータ (1 TB 以上) を転送したいと考えています。
簡単な説明
ユースケースに応じて、以下のオプションのいずれかを使用してバケット間のデータ転送を実行できます。
- AWS CLI を使用して並列アップロードを実行する
- AWS SDK を使用する
- クロスリージョンレプリケーションまたは同一リージョンレプリケーションを使用する
- Amazon S3 バッチオペレーション
- Amazon EMR で S3DistCP を使用する
- AWS DataSync を使用する
解決策
AWS CLI を使用して並列アップロードを実行する
**注:**AWS コマンドラインインターフェイス (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*"
次に、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 はソースバケットからターゲットバケットに新しいオブジェクトを自動的にレプリケートできます。Amazon S3 が複製するオブジェクトをフィルタリングするには、プレフィックスまたはタグを使用します。複製の構成とフィルターの指定について詳しくは、「レプリケーション設定」を参照してください。
レプリケーションを設定すると、新しいオブジェクトのみが宛先バケットにレプリケートされます。既存のオブジェクトはターゲットバケットにレプリケートされません。詳細については、「S3 バッチレプリケーションによる既存オブジェクトの複製」を参照してください。
Amazon S3 バッチオペレーション
Amazon S3 バッチオペレーションを使用して、1 回のリクエストで複数のオブジェクトをコピーできます。バッチオペレーションジョブを作成する場合、Amazon S3 インベントリレポートを使用して、オペレーションを実行するオブジェクトを指定できます。または、CSV マニフェストファイルを使用してバッチジョブを指定することもできます。次に、Amazon S3 バッチオペレーションは API を呼び出してオペレーションを実行します。
バッチペレーションジョブが完了すると、ジョブに関する通知とオプションの完了レポートが表示されます。
Amazon EMR で S3DistCP を使用する
Amazon EMR の S3DistCp operation オペレーションでは、Amazon S3 バケット全体で多数のオブジェクトを並行してコピーできます。S3DistCp はまず、ソースバケットから Amazon EMR クラスターのワーカーノードにファイルをコピーします。次に、オペレーションはワーカーノードから宛先バケットにファイルを書き込みます。S3DistCp の使用に関するガイダンスについて詳しくは、「Amazon EMR で S3DistCp を使用して HDFS と Amazon S3 の間でデータを効率的に移動するための 7 つのヒント」を参照してください。
重要: このオプションでは Amazon EMR を使用する必要があるため、Amazon EMR の料金表を必ず確認してください。
AWS DataSync を使用する
Amazon S3 バケットから別のバケットに大量のデータを移動するには、以下の手順を実行します。
- AWS DataSync コンソールを開きます。
- タスクを作成します。
- Amazon S3 用の新しいロケーションを作成します。
- S3 バケットをソースロケーションとして選択します。
- ソースロケーションの設定を更新します。ソース S3 バケットにアクセスするための AWS ID アクセス管理 (IAM) ロールを必ず指定してください。
- S3 バケットを宛先ロケーションとして選択します。
- 宛先ロケーションの設定を更新します。S3 宛先バケットにアクセスするための IAM ロールを必ず指定してください。
- タスクの設定を行います。
- 設定の詳細を確認してください。
- [タスクを作成] を選択します。
- タスクを開始します。
**重要:**AWS DataSync を使用する場合、追加のコストが発生します。DataSync のコストをプレビューするには、DataSync の料金体系と DataSync の制限を確認してください。