skymatix Developers Blog

株式会社スカイマティクスの開発チームによるDevelopers Blogです。

S3へのファイル転送を高速化する手順

システムエンジニアの椎葉です。

ファイル数が多くなるとファイルの転送に時間がかかってしまいます。
ファイル転送の改善で処理時間やEC2のコストを削減することができます。
今回の例でも30%ほど転送時間&コストを削減することができているので是非参考にしてみてください。

設定項目

今回改善するために変更する設定は下記の2つです。

項目名 説明
max_concurrent_requests 同時に実行できるリクエストの最大数を制御。この設定により、バケットへの同時アクセスを制御することができる。デフォルト:10
max_queue_size タスクキュー内の最大タスク数を制御。タスクが多くなると速度も速くなるが、比例して多くのメモリが必要になる。デフォルト:1000
設定変更のコマンド

設定を変更する際は下記のコマンドを実行します。

aws configure set default.s3.max_concurrent_requests 100
aws configure set default.s3.max_queue_size 1000

「.aws/config」ファイルに下記のように設定が反映されます。

[default]
s3 =
    max_concurrent_requests = 100
    max_queue_size = 1000
使用するサンプルデータ

今回使用するサンプルはファイルサイズ1MB以下のデータ217,739個となります。

設定値毎の処理速度の違い

「aws s3 cp」「aws s3 sync」コマンドで確認を行いました。

設定 AWSコマンド 処理時間
max_concurrent_requests:10
max_queue_size:1000
aws s3 sync 15:50
max_concurrent_requests:10
max_queue_size:1000
aws s3 cp --recursive 15:11
max_concurrent_requests:100
max_queue_size:1000
aws s3 cp --recursive 11:30
max_concurrent_requests:100
max_queue_size:1000
aws s3 sync 11:17
max_concurrent_requests:100
max_queue_size:10000
aws s3 sync 11:01
max_concurrent_requests:1000
max_queue_size:100000
aws s3 sync 11:11
検証結果

一定以上の数値にするとそれ以上は設定を変えても結果は変わらないようです。 今回の検証ではmax_concurrent_requests:100、max_queue_size:1000の設定が良い結果となりました。 転送速度やメモリの容量によって最適な値が変わってくるので環境ごとに最適な設定値を設定する必要があります。

終わりに

処理時間の改善やコスト削減で、この記事が皆さんの参考になると嬉しいです。
ここで紹介したもの以外にも改善できる設定等はあるので引き続き検証していきたいと思います。

www.slideshare.net