S3 バケットと EC2 インスタンス間でデータをコピーするときの転送速度を向上させるにはどうすればよいですか?

最終更新日: 2019 年 12 月 17 日

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスから Amazon Simple Storage Service (Amazon S3) バケットにデータを転送したいと考えています。転送速度を向上させるにはどうすればよいですか?

簡単な説明

Amazon EC2 から Amazon S3 へのデータのコピー、移動、同期の転送速度は、いくつかの要因によって異なります。EC2 インスタンスと S3 バケット間でデータをコピー、移動、同期する際に転送速度を向上させるには、以下の方法が推奨されます。

  • EC2 インスタンスで拡張ネットワーキングを使用する。
  • データ転送に並列ワークロードを使用する。
  • AWS コマンドラインインターフェイス (AWS CLI) でアップロード設定をカスタマイズする。
  • Amazon S3 の Amazon Virtual Private Cloud (Amazon VPC) エンドポイントを使用する。
  • 地理的に離れた AWS リージョン間で S3 Transfer Acceleration を使用する。
  • EC2 インスタンスタイプをアップグレードする。
  • チャンク転送を使用する。

解決方法

EC2 インスタンスで拡張ネットワーキングを使用する

拡張ネットワーキングでは、広い帯域幅、1 秒あたりのパケット (PPS) の高いパフォーマンス、インスタンス間で低レイテンシーを実現します。追加料金なしで、拡張ネットワーキングを有効にできます。

EC2 インスタンスの PPS レートが上限に達したと思われる場合、インスタンスは仮想ネットワークインターフェイスドライバーの上限しきい値に達している可能性があります。このような場合は、拡張ネットワーキングを有効にすることを検討してください。

注: 拡張ネットワーキングのインスタンス要件を確認してください。

データ転送に並列ワークロードを使用する

転送の完了にかかる全体的な時間を短縮するには、転送を複数の相互に限定的なオペレーションに分割することを検討してください。たとえば、AWS CLI を使用している場合、aws s3 cp (コピー)、aws s3 mv (移動)、または aws s3 sync (同期) の複数のインスタンスを同時に実行します。

注: ベストプラクティスのために、最新バージョンの AWS CLIを使用していることを確認してください。

AWS CLI でアップロード設定をカスタマイズする

次の Amazon S3 用 AWS CLI 設定をカスタマイズして、データ転送を高速化できます。

  • multipart_chunksize: この値で、単一ファイルのマルチパートアップロードで AWS CLI がアップロードする各パートのサイズを設定します。この設定では、大きなファイル (300 MB など) を小さなパートに分割して、アップロードを高速化できます。
    注: マルチパートアップロードでは、1 つのファイルを最高 10,000 個の分割ファイルでアップロードする必要があります。設定したチャンクサイズが、分割ファイルのサイズとパート数のバランスを取っていることを確認する必要があります。
  • max_concurrent_requests: デフォルトでは、AWS CLI はマルチスレッドをサポートしています。max_concurrent_requests の値を変更して、Amazon S3 に一度に送信できるリクエストの数を増やすことができます。デフォルトでの値は 10 です。この値を増やすと、応答が停滞することがあります。ただし、max_concurrent_requests の値を並列ワークロードと組み合わせると、全体の転送速度を向上させることが可能です。
    注: より多くのスレッドを実行すると、マシンのリソースもその分多く消費されます。同時リクエストの最大量をサポートするための十分なリソースがマシンにあることを確認してください。

Amazon S3 用 VPC エンドポイントを使用する

EC2 インスタンスが S3 バケットと同じリージョンにある場合は、Amazon S3 用 VPC エンドポイントの使用を検討してください。VPC エンドポイントは、全体的なパフォーマンスを向上させ、ネットワークアドレス変換 (NAT) の負荷を軽減するのに役立ちます。

VPC エンドポイントを使用するもう 1 つの利点は、インターネットゲートウェイ、NAT デバイス、または VPN 接続を使用せずに VPC にプライベートに接続できることです。VPC 内のインスタンスは、Amazon S3 バケットのようなリソースと通信するのにパブリック IP アドレスを必要としません。VPC エンドポイントを使用すると、VPC と Amazon S3 の間のデータトラフィックは AWS ネットワーク上でルーティングされます。

地理的に離れた AWS リージョン間で S3 Transfer Acceleration を使用する

EC2 インスタンスと S3 バケットが地理的に近い場合、データ転送速度は高くなります。インスタンスとバケットが地理的に遠い AWS リージョンにある場合は、Amazon S3 Transfer Acceleration を有効にすることを検討してください。Transfer Acceleration は、Amazon CloudFront のグローバルに分散したエッジロケーションを使用して、長距離間での高速かつ安全な転送を実現します。

Transfer Acceleration では追加料金が発生するため、料金を確認してください。Transfer Acceleration でお客様のユースケースの転送速度が向上するかどうかを判断するには、Amazon S3 Transfer Acceleration Speed Comparison ツールを確認してください。

EC2 インスタンスタイプをアップグレードする

EC2 インスタンスの CPU 使用率が高い場合、転送速度全体に障害をきたす可能性があります。インスタンスは、より高いメモリとネットワークパフォーマンスを提供する別のインスタンスタイプにアップグレードできます。通常、インスタンスタイプのインスタンスサイズが大きいほど、同じタイプのインスタンスサイズが小さい場合よりも、ネットワークパフォーマンスが向上します。

注: EC2 インスタンスと Amazon S3 の間で持続的で信頼性の高いネットワーク帯域幅を得るには、10 Gbps 以上のネットワーク接続を備えたインスタンスタイプを選択することをお勧めします。

チャンク転送を使用する

大きなファイルを転送する場合、マルチパートアップロードと範囲を指定した GET を使用することで、全体的な転送パフォーマンスを向上させることができます。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合