FreeBSD on EC2の感想
はじめに
勉強がてらPaaSもどきを作ってみたくて、Amazon EC2にFreeBSDを入れてjail環境を構築してみた。
自分はLinuxの経験はそこそこあるけど、FreeBSDを使うのが今回が初めてで、EC2についてもあまり詳しくないため、何かおかしい所等があればぜひご指摘を。
全般
構築自体は問題なし
FreeBSD素人の自分でもFreeBSDハンドブックとか見ながら構築できたので、Amazon EC2に起因する問題は特になかった。後述の通り、jailのネットワーク関連が若干特殊な対応が必要だったが。
ただ、FreeBSDはLinuxに比べると情報量が圧倒的に少ないため、今使っているバージョン(8.2)でも有効な情報なのかどうかが分からないことが多かった(特に最初の頃)。
スケールアップできない
EC2のようなクラウドを使うメリットの1つとして、
- スケールアウト(ノードの追加)
- スケールアップ(CPU、メモリ等のリソースの追加)
が行いやすいというのが挙げられるが、FreeBSDをEC2で使う場合には、スケールアップの恩恵は受けられない。こちらのページを見ていただければ分かる通り、現在利用可能なFreeBSDのAMIが、以下のどちらかのインスタンスタイプでしか動作しない。
名前から大体想像付く通り、これら2つのインスタンス間のスペック(そして金額)の差は圧倒的で、マイクロインスタンスを使っていて不可が増えてきたからスケールアップして、というのは全く現実的ではない。
これに最初から気づいていれば、EC2じゃなくて違うクラウドベンダーを使ったかもしれないのに・・・
jailのネットワーク設定
前述の通り、jail環境を作るのがFreeBSDを使い始めた一番の理由。ネットワーク設定関係が若干特殊だと思われるため、少しメモしておく。
IPアドレスの割当
jailを作る際には各jailにIPアドレスを1つ割り当てて、それを使ってもらうというのが普通らしいんだけど、EC2のような環境では勝手に10.x.x.xとか192.168.x.xのようなアドレスを使う事は出来ない。そのため、ループバックインターフェースに複数のIPアドレスを割り当てて対応した。
$ sudo ifconfig lo0 alias 127.0.0.100 netmask 255.255.255.255
/etc/rc.conf.jail にもそれを記載しておく。
ifconfig_lo0_alias0="inet 127.0.0.100 netmask 255.255.255.255"
jail内ではjetty(Javaサーブレットコンテナ)を8080ポートで動かし、ホスト環境上でのnginxがリバースプロクシとして動作するように設定した。
jail内から外部への通信
フォーラムのこのスレッドを参考にした。
jailに割り当てたIPアドレスは127.0.x.xのため、そのままだとネットワーク的に外部に出ていくことが出来ない。今回の例で言うと、具体的にはjail内からは別のインスタンスのMySQLを参照出来る必要がある(+名前解決)。
その為、PF(?)を使って以下のように設定した。
まず設定ファイルのコピー。
$ sudo cp -a /usr/share/examples/pf/pf.conf /etc
次に/etc/pf.confに以下を追記。
allowed_outbound_ports="{3306,53}" nat on xn0 from 127.0.0.0/16 to any port $allowed_outbound_ports -> xn0
あとはPFを起動。
sudo /etc/rc.d/pf start
全体的な感想
jail環境の構築は楽しい。smallインスタンスが使えれば・・・