AWSを試す

Amazon Web Service が1年無料だったので試してみた。

 

その前に、事の始まりは、Web Crawlerをやろうと思ってたら、通常のWeb Hosting Service では禁止行為になってたw このサイトの引っ越しついでにCronで・・・とか思ってたんだけど。こっそりやったとしても、Queryも1時間に3000件までしか投げられないようなので、今は17000URL*3Queriesな状況なので、いずれにしろ見つかるのは時間の問題。そんなわけで、Virtual Private Server (VPS) を探す事になった次第。とはいえ、既にVMWare内でやってた事を外でするだけなのだが。

 

AWS以外にも、heroku.com というのが低機能版で無料となっているので、両方試してみるのも良いかも。

 

EC2の設定方法は既にあると思うので省いて(Elastic IPとSecurity GroupをInstanceに割り当てれば外部からアクセスはできるはず)、Cron動かすまでに必要だったものをメモしておこう。OSはUbuntu

Apache のインストール

Webサイトとして使う事を想定してないので、Apache2の設定はもう少し必要なはず。

> sudo apt-get install apache2

スタート、ストップ、リスタート

> sudo /etc/init.d/apache2 start
> sudo /etc/init.d/apache2 stop
> sudo /etc/init.d/apache2 restart
とか
> sudo service apache2 start
> sudo service spache2 stop
> sudo service apache2 restart

Elastic IPでPublic IPをつなげておくと、接続できるようになるはずなので、WEBもIPで表示できるはず。

 

 

PHPとPHP Lib のインストール

> sudo apt-get install php5 libapache2-mod-php5

 

 

MySQLのインストール

> sudo apt-get install mysql-server php5-mysql

 

 

PhpMyAdminのインストール

> sudo apt-get install phpmyadmin

 

 

cURLのインストール

> sudo apt-get install php5-curl

 

(SSHなサイトがPHPの標準関数だけではうまく取れなかったので一部にcurlを使用)

ついでにcurl_setoptの一覧。SSLが結構曲者でサイト毎に違うエラーが出てくるのでかなり面倒。今のところこれで高確率にCrawlできているが、それでもいくつかこぼれる。

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.8.0');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5); // Several site (domain) doen't respond at all. Set time out
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // For 302 transfer
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookies.txt'); // For SSL site
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookies.txt');
$arrayCiphers = array(
 'RC4-SHA:RC4-MD5'    // For SSL error
 ,'TLSv1'    // For curl error: 14077410
);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, implode(":",$arrayCiphers));
$res = curl_exec($ch);

 

 

vsftpd のインストール

> sudo apt-get install vsftpd

 

vsftpdの再起動

> sudo service vsftpd restart

/etc/vsftpd.conf の以下を確認(詳細はvsftpd Manpageで)。FTPSの設定はしてない。

# Deny anonymous
anonymous_enable=NO

# timezon
use_localtime = YES

# PASV settings
pasv_enable=YES
pasv_min_port=49152
pasv_max_port=49252
port_enable=YES
pasv_address=<Public IP> # elastic ip on AWS, You need update this when IP is updated, you can't access PASV.
userlist_deny=NO

# ftp user
userlist_enable=YES
userlist_file=/etc/vsftpd.allowed_users

EC2側でも設定が必要。

Security Groupsで使ってるGroupをクリックして、Inboundに以下を追加しておく。

Custom Rule TCP 49152-29252
Custom Rule TCP 20-21

 

 

Timezone の設定

Cronの動く時間と、Terminal の時間と、FTPから見えるタイムスタンプが違ってたので、vsftpd.conf (use_localtime=YES)とこちらで統一

> sudo dpkg-reconfigure tzdata

が、Filezillaのせいか、タイムスタンプがずれている。ffftpで接続してみたら、これも違う時間にずれていた。しかしffftpの場合は、サーバーの時刻を設定から指定する事で調整するもののようだ。という事で、Filezillaの設定にも時間調整ができるので、そちらで設定する事にした。puttyとCmd から ftp localhost でログインしたら、ちゃんとしたタイムスタンプになっているし、Filezilla から MDTM <file name>でタイムスタンプとると正しい値が帰ってくるので、Filezilla側で時刻を調整する方法であってるだろう。

 

 

Cronの設定

上記でTimezoneの設定をしたら、念の為に確認として以下のコマンドを実行し、設定したタイムゾーンになってるか確認。

> nano /etc/timezone

Cronを再起動しておく。

> sudo /etc/init.d/cron restart

Cronにスケジュールをセットする。

> crontab -e
#<minute> <hour> <day of month> <month> <weekday> <task>
#weekday: 0 is sunday
0 21 * * * /home/foobar/test.sh

とか書いとけば動く。21時にtest.shが実行される。

 

crond がそもそも動いてるのかの確認は以下

> crontab -e

以下を記入し保存

* * * * * /usr/bin/uptime > /tmp/uptime

一分程放置してから、以下のコマンドで時間が書き込まれてたらcrondは動いてる。

> cat /tmp/uptime

 

 

と、大分大雑把だが、こんな作業をした。SSHを使ったputtyでの接続方法も知る必要があるが、それはネットに画像付であるだろう。

 

ブックマーク パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です