AWS コマンドラインインターフェイス (AWS CLI) の sync コマンドを使用して Amazon Simple Storage Service (Amazon S3) にデータを転送しています。ただし、転送が完了するまでに時間がかかります。
解決策
sync コマンドは、ソースと宛先のバケットを比較して、どのソースファイルが宛先バケットに存在しないかを判断します。sync コマンドは、宛先バケット内のファイルと比較して、どのソースファイルが変更されたかも判断します。次に、新しいソースファイルまたは更新されたソースファイルを宛先バケットにコピーします。
ソースバケットと宛先バケット内のオブジェクトの数は、sync コマンドがプロセスを完了するまでにかかる時間に影響する可能性があります。転送サイズは、同期の時間や Amazon S3 へのリクエストから発生するコスト に影響する場合があります。
削除マーカーはリストのパフォーマンスにも影響するため、削除マーカーの数は最小限に抑えることをお勧めします。sync コマンドはバックエンドでリスト API 呼び出しを実行するため、削除マーカーは sync コマンドのパフォーマンスにも影響します。
sync コマンドを実行するときの転送時間を短縮するには、次の方法を実装してください。
AWS CLI の複数インスタンスの実行
大量のデータをコピーするには、AWS CLI の複数のインスタンスを実行して、別々の同期操作を並行して実行できます。たとえば、さまざまなプレフィックスに対して並列同期操作を実行できます。
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder1 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder1
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder2 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder2
**注:**AWS CLI コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください。
または、除外フィルターと包含フィルターを別々に実行して並列同期操作を実行することもできます。例えば、次の操作では、0~4 で始まるキー名と、5~9 で始まるキー名で同期するファイルを区切ります。
注:除外 フィルターと 包含 フィルターを使用する場合でも、sync コマンドはソースバケット内のすべてのファイルを確認します。この確認は、どのソースファイルを宛先バケットにコピーするかを特定するのに役立ちます。異なるキー名プレフィックスを対象とする同期操作が複数ある場合は、各同期操作ですべてのソースファイルが確認されます。ただし、除外フィルターと包含フィルターのため、フィルターに含まれるファイルのみが宛先バケットにコピーされます。
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"
aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"
ワークロードのパフォーマンスを最適化する方法の詳細については、「ベストプラクティスのデザインパターン: Amazon S3 パフォーマンスの最適化」を参照してください。
max_concurrent_requests の AWS CLI 設定値の変更
潜在的なパフォーマンスの改善にむけて、max_concurrent_requests の値の変更をすることができます。この値は、Amazon S3 に一度に送信できるリクエストの数を設定します。デフォルト値は 10 で、さらに高い値に増やすことができます。ただし、次の制限に注意してください。
- より多くのスレッドを実行すると、マシン上でより多くのリソースを消費します。マシンに、必要な同時リクエストの最大数をサポートするのに十分なリソースがあることを確認する必要があります。
- 同時要求が多すぎると、システムに負荷がかかる可能性があります。これにより、接続がタイムアウトしたり、システムの応答が遅くなったりする可能性があります。AWS CLI からのタイムアウトの問題を回避するには、--cli-read-timeout 値または --cli-connect-timeout 値を 0 に設定してみてください。
(オプション) インスタンス設定を確認する
Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用して同期操作を実行する場合は、次のベストプラクティスを使用してください。
- インスタンスタイプ を確認してください。より大きなインスタンスタイプは、帯域幅が広く、Amazon Elastic Block Store (Amazon EBS) に最適化されたネットワークを持つため、より良い結果が得られます。
- インスタンスがバケットとは異なる AWS リージョンにある場合は、同じリージョンのインスタンスを使用してください。レイテンシーを減らすには、インスタンスと Amazon S3 バケットの間の地理的な距離を短くします。
- インスタンスがソースバケットと同じリージョンにある場合は、S3 用のAmazon Virtual Private Cloud (Amazon VPC) エンドポイントを設定します。VPC エンドポイントは、全体的なパフォーマンスを向上させるのに役立ちます。
関連情報
S3 バケットと EC2 インスタンス間のデータコピーの転送速度を向上させるにはどうすればよいですか。
1 つの Amazon S3 バケットから別の Amazon S3 バケットに大量のデータを転送する最良の方法は何ですか。