Amazon S3 へのアップロードを高速化する方法

AmazonのS3にファイルをアップロードする際に役立つ,高速化のTipsです

aws コマンド(CLI)を使う

CLIが一番軽量・高速です

サブコマンドは cp よりも sync の方が良い

cp よりもsyncの方が高速になります.scpの代わりに rsync を使うのと同じ理由です

cd [コピー元ディレクトリ]
aws s3  sync   .    s3:[コピー先]/

awsコマンドを複数同時起動する

公式FAQに「ファイル転送が遅かったら,awsコマンドを複数同時起動せよ」と書いてあります


aws s3 sync には,rsyncのようにファイル名に対するパターンマッチで転送するファイルを選択する機能があります(フィルタリング機能).

この機能を使って

  • ファイル名の先頭が"0"で始まるファイルだけを sync
  • ファイル名の先頭が"1"で始まるファイルだけを sync

という感じで複数のsyncコマンドを同時に並列起動します


具体的には

 aws s3 sync  .  s3:[コピー先]/  --exclude '*' --include '1*'
 aws s3 sync  .  s3:[コピー先]/  --exclude '*' --include '2*'

という感じで, --exclude "*" で一旦全てのファイルをsync対象外にしてから --include で先頭が1で始まるファイルのみをsync対象にします


オプションは複数回指定できます.例えば,先頭の数字が,偶数と奇数で,2並列でsyncを実行する場合は

 aws s3 sync  .  s3:[コピー先]/  --exclude '*' --include '1*' --include '3*' --include '5*' --include '7*' --include '9*'

 aws s3 sync  .  s3:[コピー先]/  --exclude '*' --include '0*' --include '2*' --include '4*' --include '6*'  --include '8*' 

を実行すれば良いことになります


また念の為,最後に

 aws s3 sync  .  s3:[コピー先]/   

を実行しておけば,コピーし忘れのファイルだけを差分コピーできます

動作パラメータをチューニングする

awsの動作パラメータを変更することでさらに高速化が可能です

関連するパラメータは以下の通り

  • 同時接続数 (デフォルト値: 10)
  • ネットワーク帯域 (デフォルト値:無制限)
aws configure set default.s3.max_concurrent_requrests 20
aws configure set default.s3.max_bandwidth 1000MB/s

原理上は,(同時接続数 * ネットワーク帯域)の帯域が必要になります


基本的に aws s3 コマンドを使うような環境は,メモリやCPUは潤沢に利用できるはずなので,ボトルネックはネットワーク帯域になります.利用可能なネットワーク帯域に応じてこれらパラメータをチューニングしましょう

動作パラメータを確認する

awsコマンドの動作パラメータは設定ファイルに保存されています


設定ファイルのパスは

です