c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

EC2でvsftpdのpasv_addressをbootupのしかけでどうにかする

AWSのEC2くそおそいね!(挨拶)
LargeがさくらのVPS 4Gの4倍くらい遅い!値段何倍だよ!(挨拶)
Groongaをビルドしたら30分かかった!(挨拶)


ーー
AWSを仕事で使う機会が最近また出てきました。
まあそれがどうしたって感じですけど、まあ今までとちょっと違う感じのお客さんなのです。


まあ、うまくぼかして言うと、FTPとかつかえないとダメなんですよね。びたいちぼかせてないけど。
「えーマジFTP?」「FTPが許されるのは・・・」
世の中にはFTPがないと呼吸困難になって死ぬ人がいるらしいので、仕方がありません*1

オチ

yum install vsftpd
してvsftpを入れて、
AWSのセキュリティゾーンに

Custom TPC rule
Port range:60000-60010
Source:0.0.0.0/0

Custom TPC rule
Port range:21
Source:0.0.0.0/0

みたいな設定をした上で、vsftpd.confに
pasv_min_port=60000
pasv_max_port=60010
pasv_address=123.123.123.123(EC2インスタンスの、パブリック側IPアドレス
こんなのを追記してvsftp再起動すれば完璧ですね。*2

EC2がオチるとオチがつかない

で、上はネットのかしこにある情報なんですけど、これEC2再起動したらダメなんですよね。
ElasticIP(固定IP)つけておけばオッケーですけど、無いとダメです。
AWSってどんどん増やせるのが前提じゃないですか、そうなるとElasticIpをつけたり外したりとかまじ☆めんどい!


ただ、そうなると再起動する度にいちいちSSHでログインして、
pasv_address=123.123.123.123
を書き換えるとかしなきゃいけない。
なにそれAMI保存しておけばいくらでも増やせるのがクラウドじゃないの?マジ☆メンドイ!

スクリプトを設定しましょう

ってことで、スクリプトつくればいいんだよね。

#!/usr/bin/perl

$PUBLIC_IP = `curl http://169.254.169.254/latest/meta-data/public-ipv4`;
$TMPL = '/etc/vsftpd/vsftpd.conf.tmpl';
$CONF = '/etc/vsftpd/vsftpd.conf';

open $fh, "<", $TMPL;
open $oh, ">", $CONF;

while(<$fh>){
	$_ =~ s/_REPLACE_TO_PUBLIC_IP_/$PUBLIC_IP/g;
	print $oh $_;
}
`/etc/init.d/vsftpd restart`

こんなコードを保存して、/etc/rc.localあたりから呼ぶようにしておくといいですね。


その前に、
/etc/vsftpd/vsftpd.conf.tmpl
ってファイルをつくっておいて、

pasv_address=_REPLACE_TO_PUBLIC_IP_

って書いておいてね、置換されるよ!

オチの解説

curl http://169.254.169.254/latest/meta-data/public-ipv4
こんなのをEC2インスタンスから実行すると、パブリックのIPがとれる。
他にも色々とれるので
curl http://169.254.169.254/latest/meta-data/
とかやってみるといいね。

curl http://169.254.169.254/latest/user-data/
とかもググってみるといいよ。


っていうかね、いまさらこれ知ったよ俺。しらなかったよ俺。どんだけAWS活用してないの俺。

もっといい解決策あれば是非お教え下さい。

*1:勿論SSHもKeyとか使えない

*2:ポートレンジは変えてもいい