AWS コマンドラインインターフェイス (AWS CLI) を使用してサイズの大きいファイル (1 GB 以上) を Amazon Simple Storage Service (Amazon S3) にアップロードするときのパフォーマンスを最適化したいと考えています。
簡単な説明
Amazon S3 に大きなファイルをアップロードする場合、マルチパートアップロードを利用するのがベストプラクティスです。AWS CLI を使用している場合、オブジェクトが大きい場合、すべての高レベルの aws s3 コマンドが自動的にマルチパートアップロードを実行します。これらの高レベルのコマンドには、aws s3 cp と aws s3 sync が含まれます。
パフォーマンスを最適化するには、次の方法のいずれかを選択します。
大規模なデータ転送や複雑なワークロードが必要な場合は、AWS CLI 用の AWS CRT ベースのクライアントを使用してください。
**注:**この方法には AWS CLI バージョン 2 を使用する必要があります。AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。
解決策
CRT ベースのクライアントを AWS CLI で使用する
CRT ベースのクライアントをアクティブにする
CRT ベースのクライアントをアクティブにするには、AWS CLI を設定します。これを行うには、AWS CLI 設定ファイル (~/.aws/config) に設定を追加するか、AWS CLI を使用して設定します。
preferred_transfer_client を AWS CLI 設定ファイルに追加します。
[default]
s3 =
preferred_transfer_client = crt
ターミナルで次のコマンドを入力します。
aws configure set default.s3.preferred_transfer_client crt
target_bandwidth オプションの設定 (オプション)
このオプションは、転送クライアントが S3 のアップロードとダウンロードで到達しようとするターゲット帯域幅を制御します。デフォルトでは、AWS CLI はシステムの最大ネットワーク帯域幅と一致するターゲット帯域幅を選択します。
**注:**target_bandwidth 値を設定するときは注意してください。その値がローカルのクライアントリソースの能力よりも大きい場合、クライアントを圧倒してしまう可能性があります。このオプションは null のままにしておくことをお勧めします。
CRT ベースのクライアントをアクティブにすると、AWS CLI は自動的にクライアントを使用して Amazon S3 オペレーション (ファイルのアップロードを含む) を行います。これにより、特に大きなファイルをアップロードする場合に、標準の AWS CLI と比較してパフォーマンスと信頼性が向上します。
アップロード設定をカスタマイズする
以下の設定を使用して Amazon S3 用の AWS CLI 設定をカスタマイズします。
- max_concurrent_requests この値は、Amazon S3 に同時に送信できるリクエストの数を設定します。デフォルト値は 10 です。
**注:**より多くのスレッドを実行すると、マシンはより多くのリソースを消費します。マシンに、必要な同時リクエストの最大数をサポートするのに十分なリソースがあることを確認する必要があります。
- **max_queue_size ** この値は、キュー内のタスクの最大数を設定します。デフォルト値は 1,000 です。
- **multipart_threshold ** この値は、個々のファイルのマルチパートアップロードのサイズ閾値を設定します。デフォルト値は 8 MB です。
- multipart_chunksize この値は、AWS CLI が個々のファイルのマルチパートアップロードでアップロードする各パートのサイズを設定します。この設定では、サイズの大きいファイル (300 MB など) を小さい部分に分割して、アップロード速度を上げることができます。デフォルト値は 8 MB です。
**注:**マルチパートアップロードでは、1 つのファイルを 10,000 個以下の異なるパートでアップロードする必要があります。設定するチャンクサイズでパーツファイルのサイズとパーツ数のバランスが取れていることを確認してください。
- **max_bandwidth ** この値は Amazon S3 にデータをアップロードするための最大帯域幅を設定します。デフォルト値はありません。
Amazon S3 Transfer Acceleration をアクティブにする
Amazon S3 Transfer Acceleration は、クライアントと Amazon S3 間の長距離にわたる高速で安全な転送を可能にします。転送アクセラレーションは、Amazon CloudFront のグローバルに分散されたエッジロケーションを使用します。
Transfer Acceleration には追加料金がかかるため、料金表を必ず確認してください。Transfer Acceleration によってユースケースの転送速度が向上するかどうかを判断するには、Amazon S3 転送アクセラレーション速度比較ツールを確認してください。
**注:**転送アクセラレーションは、AWS リージョン間の CopyObject コピーをサポートしていません。
関連情報
AWS CLI の S3 設定
AWS コマンドラインインターフェイス (AWS CLI) とは何ですか?