S3の既存データを新規で作成した別バケットへ高速移動したい

ヨッシー
2020-12-04
ヨッシー
2020-12-04

はじめに

S3に配置していたアクセスログを、バケット名をリネームしたくて新規で作成して
AWS CLIを使って移動してみました。

結構な日数分、アクセスログが溜まっていたので予想以上時間がかかりそうだったため
高速移動できるようにチューニングしてみました。

必要な設定

  • ローカル環境へのAWS CLIの設定

結論:AWS CLI S3 Configurationで設定

AWS CLIにS3のファイル転送を細かく制御できるオプションがあるため、そちらで設定を行なっていきましょう。
下記のように直接ファイルへオプションを追記して問題ないです。
また、aws configureコマンドを使用してオプションを指定できますが、ここでは割愛します。

細かな仕様はAWS CLIの仕様書を参照してください。
https://docs.aws.amazon.com/cli/latest/topic/s3-config.html


```

vim ~/.aws/config

# 下記を追記

[profile default]

s3 =
max_concurrent_requests = 20 #最大同時リクエスト数
max_queue_size = 10000 #最大タスクキュー数
multipart_threshold = 64MB # マルチパートに分割するファイルサイズの閾値
multipart_chunksize = 16MB # マルチパートチャンクサイズ

```


S3バケット移動


それでは、準備ができましたら下記のコマンドを実行することで、移行元から移行先へのバケットへ
オブジェクトが移動します。

```
aws s3 sync s3://source-backet/source-folder s3://target-backet/target-folder
```

性能結果

S3 Configurationのオプションの設定があるパターンとないパターンでどれほどの転送時間になったか、
パフォーマンス検証してみました。

結果は、以下の通りです。

(S3 Configuration設定あり)
400MBのバケット:60 s 

(S3 COnfiguration設定なし)
400MBのバケット:25 s

こちらの結果から、オプションを設定することによりおおよそ4割の速度削減が確認できました。
おおくのデータがある場合は、有用かもしれません。

まとめ

S3のオブジェクト移動はよくあることかと思いますので、この設定はマストで設定したほうがよさそうですね。