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 EMR で S3DistCp を使用して Amazon S3 バケット間でデータをコピーすることを検討してください。S3DistCp は、大量のオブジェクトの並列コピーを可能にします。
重要: このオプションでは Amazon EMR クラスターを起動する必要があるため、必ず Amazon EMR の料金を確認してください。
関連情報
リクエストレートとパフォーマンスのガイドライン