[小ネタ]SFTPコマンドで帯域制限してみる

SFTPコマンドで帯域制限してみました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、AWS事業本部のニシヤマです。はいマスキュラー。

AWS Transfer for SFTPの登場により手軽にS3にファイルアップロードができるようになりました。ただ、やりとりするファイルが多い場合など利用される通信帯域が気になることがあります。そんな時の便利なSFTPコマンドのオプションをご紹介します。

やり方

結論からいうとSFTPコマンドの-lオプションで制限が可能です。この際、上限値はKbpsで指定が必要になります。manコマンドでSFTPコマンドのオプションの説明をみるとそのまま帯域制限に関しての説明が書かれています。

     -l limit
             Limits the used bandwidth, specified in Kbit/s.

前提

今回は以下の前提で進めます。

  • アップロード元のEC2はAmazon Linux 2(t2.micro)
  • アップロード先のAWS Transfer for SFTPのセットアップ済み
  • AWS Transfer for SFTPへユーザ作成が完了しEC2からアップロードできる状態

やってみる

帯域制限をしてファイルアップロードまでの時間を比較してみます。

準備

先ずはEC2でアップロードする1GByteのファイルを準備します。1GByteは8,589,935kbitになります。

$ dd if=/dev/zero of=uploadfile bs=1M 
$ ls -lh
-rw-rw-r-- 1 ec2-user ec2-user 1.0G  9月  1 03:16 uploadfile

次にSFTPコマンドは対話式なのでtimeコマンドで転送時間が測れる様にバッチモードで読み込むファイルを用意します。

$ vim /tmp/batchfile 
$ cat /tmp/batchfile 
put uploadfile nishiyama-sftp-backet/uploadfile

ファイルアップロード

帯域制限無し

$ time sftp -i /tmp/sftpkey.pem -b /tmp/batchfile SFTP-user@s-41a1d8c409274b368.server.transfer.ap-northeast-1.amazonaws.com
sftp> put uploadfile nishiyama-sftp-backet/uploadfile

real	0m19.996s
user	0m5.720s
sys	0m2.074s

20秒程度でアップロードできているので、約430Mbpsでアップロード出来ているということになります。

帯域制限あり(その1)

次に約140Mbps(143,165kbps)で制限してアップロードしてみます。単純計算では60秒程度でアップロードできるはずです。

$ time sftp -i /tmp/sftpkey.pem -l 143165 -b /tmp/batchfile SFTP-user@s-41a1d8c409274b368.server.transfer.ap-northeast-1.amazonaws 
sftp> put uploadfile nishiyama-sftp-backet/uploadfile

real	1m0.412s
user	0m5.612s
sys	0m2.048s

ほぼ60秒程度でアップロード出来ています!

帯域制限あり(その2)

次は約70Mbps(71,582kbps)で制限してアップロードしてみます。先ほどの半分の上限なので120秒程度でアップロードできるはずです。

$ time sftp -i /tmp/sftpkey.pem -l 71582 -b /tmp/batchfile SFTP-user@s-41a1d8c409274b368.server.transfer.ap-northeast-1.amazonaws. 
sftp> put uploadfile nishiyama-sftp-backet/uploadfile

real	1m59.627s
user	0m5.762s
sys	0m1.733s

上限値を半分にすることによりほぼ2倍の時間でアップロードコマンドが完了しています。

さいごに

オンプレ環境などからS3にファイルをアップロードしたいけど、DirectConnectなどを経由してSFTPを利用する際にS3へのアップロード以外の用途で回線を利用していると帯域の占有率を気にすることもあると思います。そんな時はこちらのオプションを利用してみてください。この記事がどなたかのお役に立てば幸いです。

最近の格闘技(主にMMA)

昨日、中国で行われたUFC Fight Night深圳でUFCデビュー戦だった魅津希選手が判定の結果勝利を勝ち取りました!男子フライ級廃止によりリリースされてしまった弟の井上直樹選手と二人一緒にUFCで闘う姿がいつか見てみたいですね。 また、メインイベントの女子ストロー級タイトルマッチでは正面から打撃で打ち合い、右フックから畳みかけていったジャン・ウェイリー選手が1R42秒で勝利。ベルトを勝ち取りました!来週のUFC242では約一年振りにハビブ・ヌルマゴメドフ選手が出場。無敗記録を延ばすことができるのかは必見です。UFC2戦目の佐藤天選手の活躍も楽しみですね!