今回はAWS上で遅延発生装置を作ってみたいと思います。
Linuxの場合、tc コマンドを用いるのが一般的です。
サブコマンドとして netem というのも使います。ではサクッとやってみます。
この手のカーネルに近いコマンドは、もちろんrootでやります。
# tc qdisc add dev eth0 root netem delay 5ms
実際に試してみます。
別サーバーからPingを打ち、打ってる途中で上記コマンドを、受信側サーバーに打ったところ
ちゃんと5msの遅延が発生しました。
変更や削除のコマンドも書いておきます。
変更
# tc qdisc change dev eth0 root netem delay 10ms
削除
# tc qdisc del dev eth0 root
dev lo とした場合は、ループバックももちろん遅延させることができます。この場合、ping localhost などと打つと、2倍遅延します。
で、ここまではググれば出てくる情報です。ここからが本番
こんな素敵なtcコマンドですが、WindowsやMacでは使えません。特にMacは
「オープンソースだから使えるだろ」
と思うかもしれませんが、iptables同様、カーネルレベルのプログラムなので、そうそう簡単に動きません。
この他、ググって出てくるのは、実サーバーに2枚NICを指し、ケーブルをつないでブリッジとし、遅延発生させる方法ですが、そもそもクラウド上では、UTPケーブルが仮想化されているわけではないので、この方法は通用しません。じゃあ、どうするか。
L2がダメならL3にすればいいじゃない = ルーターにしてしまえばいい!
AWSのNATインスタンスも所詮、iptablesを用いたソフトウェアルーターに過ぎません。であれば、ルーターインスタンスをAWS上に作れば、そのルーターを通すことによって、OSを問わず遅延発生させることができます。長くなったので、エントリを分けます。