【AWS S3】AWS CLIで爆速データ転送大作戦
はじめに
とある事情で1ファイル数百GB以上のオブジェクトを別のS3にコピーするタスクがありました。
そこでなんとか爆速転送をしようと色々右往左往したので知見を備忘録として残します。
S3で爆速転送をしたい方は是非参考にしてもらえると嬉しいです。
参考資料
-
Amazon S3 への大容量ファイルのアップロードを最適化する
- 公式資料必要なパラメタが乗っている
-
AWS CLI S3コマンドの並列処理設定 - Qiita
- 日本語で優しくパラメタの説明があったので参考
デフォルト設定
~/.aws/configの設定
[profile default]
region = ap-northeast-1
output = json
s3 =
max_concurrent_requests = 10
max_queue_size = 1000
multipart_threshold = 8MB
multipart_chunksize = 8MB
この設定で学んだこと
max_concurrent_requests
はもっと増やしても良い。
AWS側でリソースは持っているので料金を気にしないなら、並列リクエストは増やしたほうが得
multipart_threshold
は基本TRUE
になりそう。
(この設定はマルチパートアップロードのオン・オフなので、
極端にファイルサイズを大きくしなければ大丈夫)
速度
44MiB/s
転送に1時間以上かかる
少しパラメータ調整
~/.aws/configの設定
[profile default]
region = ap-northeast-1
output = json
s3 =
max_concurrent_requests = 50
max_queue_size = 30000
multipart_threshold = 500MB
multipart_chunksize = 300MB
速度
244MiB/s
1時間未満で転送が終わる
この設定で学んだこと
max_concurrent_requests
はまだ増やせる。50だとここがボトルネック。
max_queue_size
は大きすぎる、これだとマルチパートで転送するデータがキューに溜まるのに時間がかかる。
multipart_chunksize
はSnowflakeのマイクロパーティションが50MB~500MBぐらいの小分けデータで管理していることを参考に調整。
爆速チューニング
~/.aws/configの設定
[profile default]
region = ap-northeast-1
output = json
s3 =
max_concurrent_requests = 500
max_queue_size = 3000
multipart_threshold = 500MB
multipart_chunksize = 500MB
速度
11000MiB/s (11GiB/s)
転送が始まったと思ったら終わる
この設定で学んだこと
max_concurrent_requests
を増やした影響か転送が開始されるまでの待ち時間が2,3分ほどかかった。
(転送開始後は数秒で終わる)
まとめ
max_queue_size
にリクエストが溜まったらアップロードみたいな形になると思うので、
通信環境を見ながらmax_concurrent_requests
とmultipart_chunksize
を調整するのが良さそう。
また、爆速転送用のprofileを用意したが、ロール認証をするとprofileがdefault
になって悩む方は export AWS_PROFILE=<爆速転送用_profile>
をbashで実行すると幸せになるかも
さいごに
みんなもS3の爆速転送をして待ち時間をなくそう!!
ただし、リージョンを跨ぐ転送の場合は使いすぎは厳禁!お金が吹き飛びます
以上hamaでした〜
Discussion