大量のデータを Amazon Simple Storage Service (Amazon S3) にアップロードしたり、S3 バケット間で大規模なデータをコピーしたりしたいと考えています。このようなデータ転送のパフォーマンスを最適化したいです。
解決策
Amazon S3 バケットと大量のデータを送受信するには、次のいずれかの方法を使用します。
AWS コマンドラインインターフェイス (AWS CLI) を使用した並列アップロード
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
データ転送の完了にかかる全体的な時間を短縮できる場合があるため、転送を相互に排他的な複数の操作に分割します。複数の aws s3 cp (コピー)、aws s3 mv (移動)、または aws s3 sync (同期) インスタンスを同時に実行できます。
転送を分割する方法の 1 つは、--exclude パラメータと --include パラメータを使用して操作をファイル名で区切ることです。たとえば、あるバケットから別のバケットに大量のデータをコピーする必要があり、すべてのファイル名が数字で始まる場合は、AWS CLI の 2 つのインスタンスで次のコマンドを実行します。
注: --exclude パラメータと --include パラメータは、クライアント側で処理されます。したがって、ローカルマシン上のリソースが操作のパフォーマンスに影響する可能性があります。
次のコマンドを実行して、0 ~ 4 の数字で始まる名前のファイルをコピーします。
aws s3 cp s3://srcbucket/ s3://destbucket/ --recursive --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"
次のコマンドを実行して、5 ~ 9 の数字で始まる名前のファイルをコピーします。
aws s3 cp s3://srcbucket/ s3://destbucket/ --recursive --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"
重要: 非常に多数 (億単位) のオブジェクトを転送する必要がある場合は、AWS SDK を使用してコピーを実行するカスタムアプリケーションをビルドすることを検討してください。AWS CLI でもコピーを実行できますが、それほど大規模な場合は、カスタムアプリケーションの方が効率的でしょう。
AWS Snowball
特にデータが 10 TB を超える場合は、オンプレミスのデータセンターと Amazon S3 間の転送に AWS Snowball を使用することを検討してください。
次の制限に注意してください。
- AWS Snowball はバケット間のデータ転送をサポートしていません。
- AWS Snowball は、AWS Key Management System (AWS KMS) が管理するキーによるサーバー側の暗号化をサポートしていません。詳細については、「AWS Snowball におけるサーバー側の暗号化」を参照してください。
Amazon EMR と S3DistCp の併用
Amazon S3 バケット間でデータをコピーするには、Amazon EMR と S3DistCp を併用することを検討してください。S3DistCp では、大量のオブジェクトを並行してコピーできます。
重要: このオプションでは Amazon EMR クラスターを起動する必要があるため、Amazon EMR の料金表を必ず確認してください。
関連情報
リクエストレートとパフォーマンスのガイドライン