Amazon S3 の sync コマンドの転送パフォーマンスを改善する方法を教えてください。

最終更新日: 2021 年 1 月 5 日

AWS コマンドラインインターフェイス (AWS CLI) の sync コマンドを使用して、Amazon Simple Storage Service (Amazon S3) でデータを転送しています。けれども、転送の完了には時間がかかります。sync コマンドを使用した転送のパフォーマンスを改善する方法を教えてください。

解決方法

sync コマンドを実行する際の転送時間を短縮するには、次の方法を試してください。

注: sync コマンドは、ソースバケットと転送先バケットを比較して、転送先バケットに存在しないソースファイルを判別します。また、sync コマンドは、転送先バケット内のファイルと比較して変更されたソースファイルを決定します。次に、sync コマンドは、新しいソースファイルまたは更新されたソースファイルを転送先バケットにコピーします。ソースバケットと転送先バケットのオブジェクトの数が、sync コマンドの処理時間に影響する可能性があります。転送サイズが、同期の期間や S3 へのリクエストから生じるコストにどのような影響を与えるかを把握することが重要です。

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 バージョンを使用していることを確認してください

または、別個の exclude と include フィルターに対して並列同期操作を実行できます。例えば、次の操作では、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 エンドポイントは、全体的なパフォーマンスの向上に役立ちます。