おのおのが好きな事を好きなようにやるハッカソン。
実際に自分の手を動かすのは楽しいですね。
ストレージ拡張自動化システム検討
日本人のみ相手に仕事をしている場合は、わからないことがあれば話をしながら進めることができるが、
海外も視野に入れると時差も休日も言語も違い、これを話しながら進めるのは現実的ではない。
Webフォームから値を入力するとバッチ処理で自動的にストレージ(NAS)の拡張ができるシステム構築を目指す。
Webサーバ
Pythonのフレームワークを利用してWebの入力フォームを作成。
NAS名やボリューム名、拡張サイズを入力する。
バッチサーバ
cronなどジョブスケジューラーを利用してWebフォームで入力された値に従ってバッチ処理を行う。
fabricを利用予定。
NAS管理サーバ
既存のNASを管理しているサーバ。こちらには新たに設定を追加せず、fabricを利用して
バッチサーバからssh経由で送られてきたコマンドを自動で実行するようにしたい。
NASサーバ
拡張対象のNASサーバ
バッチサーバ
Amazon Linuxは以下でインストール可能
1
2
3
4
5
6
sudo su
yum -y install python python-devel gcc
curl http://python-distribute.org/distribute_setup.py | python
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
pip install fabric fexpect
exit
Python自動実行スクリプト作成
まだfabricは絡んでおらず、printでコマンドを書き出しているのみ。
jsonファイル中身
NAS_param.json 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[
{
"nas" : "(NAS Name)" ,
"volume" : "(Volume Name)" ,
"size" : "(Volume size)"
} ,
{
"nas" : "nas_backup01" ,
"volume" : "apache_log" ,
"size" : "+5g"
} ,
{
"nas" : "nas_backup02" ,
"volume" : "tomcat_log" ,
"size" : "+500m"
} ,
{
"nas" : "nas_ecsite01" ,
"volume" : "item_image" ,
"size" : "+10g"
}
]
これを読み込んで処理する。
read_NAS_param.py 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python
# coding: utf-8
import json # jsonを扱うため
import sys # モジュール属性 argv を取得するため
argvs = sys . argv # コマンドライン引数を格納したリストの取得
argc = len ( argvs ) # 引数の個数
f = open ( "NAS_param.json" ) # jsonファイルを読み込む
data = json . load ( f ) # jsonデータを読み込んだファイルオブジェクトからPythonデータを作成
f . close () # ファイルを閉じる
num = len ( data ) #ファイル数をカウント
if argc == 2 and argvs [ 1 ] == "--help" :
print ( "sudo ssh {obj[nas]} vol resize {obj[volume]} {obj[size]}" . format ( obj = data [ 0 ]) ) # ヘルプを表示
if argc == 1 :
for i in range ( num )[ 1 :]: # 配列の2列目から実行
print ( "sudo ssh {obj[nas]} vol resize {obj[volume]} {obj[size]}" . format ( obj = data [ i ]) )
※ デバッグ等コメントは削除
ハッカソン中は引数が無いとエラーになっていたが、上記のようにargc == 2 and
を追加するとうまく実行できるようになった。
以下実行結果
1
2
3
4
5
6
7
fukui-no-MacBook-Air:python_json ftakao2007$ ./read_NAS_param.py --help
sudo ssh ( NAS Name) vol create ( Volume Name) ( Volume size)
fukui-no-MacBook-Air:python_json ftakao2007$ ./read_NAS_param.py
sudo ssh nas_backup01 vol create apache_log 5g
sudo ssh nas_backup02 vol create tomcat_log 500m
sudo ssh nas_ecsite01 vol create item_image 10g
Helpも実行結果も問題なく表示された。
Webサーバ
w3mインストール
動作確認用
Bottle インストール
Djangoが難しかったのでこっちを使ってみた
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wget https://pypi.python.org/packages/source/b/bottle/bottle-0.11.4.tar.gz
tar zxvf cd bottle-0.11.4.tar.gz
cd bottle-0.11.4
vi hello.py
==============================
from bottle import route, run
@route( '/hello' )
def hello() :
return "Hello World!"
run( host = 'localhost' , port = 8080, debug = True)
==============================
python hello.py &
w3m http://localhost:8080/hello
以下のようにするとPCのWebブラウザからリモートアクセスできた。
1
2
run( host = 'ec2-XXX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com' , port = 80, debug = True)
sudo python hello.py #この場合はsudoで実行
※ 以下挫折中 ※
httpdインストール
1
2
sudo yum -y update
sudo yum -y install httpd
Django インストール
1
2
3
4
5
sudo yum install mod_wsgi
sudo pip install django
sudo mkdir /var/www/html/django
cd /var/www/html/django
sudo django-admin.py startproject mysite
開発用サーバの起動と確認
SGの設定で8080ポートを開けておく
1
2
3
4
5
cd mysite
python manage.py runserver 8080 &
w3m http://127.0.0.1:8080
※ 「It worked!」が出れば成功
〜つづく〜
その他
Zaimの家計簿自動入力スクリプトの作成もやりたかった。現在は認証のとろころで詰まってます。ググって自力でできるかなぁ。
できなかったら、次回はその辺やってみて有識者の知恵を拝借できればと思います。