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、1、2、3、4 で始まる名前のファイルをコピーします。
aws s3 cp s3://srcbucket/ s3://destbucket/ --recursive --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"
次のコマンドでは、5、6、7、8、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 の料金をご確認の上実行してください。