Upload
fujishiro-takuya
View
2.307
Download
6
Embed Size (px)
DESCRIPTION
#hbstudy
Citation preview
hbstudy#41×IDCF クラウドハンズオン
2 / 24
目次
0. この文書について .................................................................. 3
1. IDCF クラウド上に仮想マシンを作成してみる .......................................... 4
1) ポータルサイトから作業用の仮想マシンを作成 .................................... 4
2) SSH接続するためのネットワーク設定 ............................................. 4
2. Fabricをインストールして触ってみる ................................................ 5
1) 作業用 VM(CentOS 6.3)に SSHログイン ............................................ 5
2) Fabricをインストール .......................................................... 5
3) 秘密鍵を設置 .................................................................. 5
4) fabfileを作成し実行 ........................................................... 5
3. Fabricから Redis をインストールしてみる ............................................ 7
1) EPELリポジトリを追加し、Redis をインストール .................................. 7
4. Fabricから API経由で仮想マシンを作成してみる ...................................... 8
1) リポジトリを追加し、APIツールインストール ..................................... 8
2) APIキーとシークレットキーを設置 ............................................... 9
3) 仮想マシン作成 ............................................................... 10
4) /etc/hostsに名前登録 ......................................................... 12
5. 作成した仮想マシンを Fabric からセットアップしてみる .............................. 13
1) ユーザー追加 ................................................................. 13
2) sshd設定 ..................................................................... 13
3) /etc/hostsに名前登録 ......................................................... 14
4) Redisのクライアントをインストール ............................................ 15
5) コンテンツを設置 ............................................................. 15
6) Monitインストール ............................................................ 17
7) Web公開 ...................................................................... 18
6. 自動でスケールアウトしてみる ..................................................... 18
1) cronスクリプト設置 ........................................................... 19
2) 負荷をかけます ............................................................... 21
7. [Appendix]ロードバランサーに自動追加 ............................................. 22
hbstudy#41×IDCF クラウドハンズオン
3 / 24
0. この文書について
この文書は、hbstudy#41のハンズオンにて、IDCフロンティアのクラウドサービス セルフタイプ(以
下、IDCFクラウド)を用い、オートスケーリング構成を作成する手順です。
動作検証は行っておりますが、自己責任でどうぞご利用ください。
hbstudy#41×IDCF クラウドハンズオン
4 / 24
1. IDCF クラウド上に仮想マシンを作成してみる
※IDCF クラウドの操作方法については、エントリーガイド(pp.21-27)を参照してください
1) ポータルサイトから作業用の仮想マシンを作成
https://noahcloud.jp/ へアクセスし、配布したユーザ名/パスワードにてログインします。
以下の設定で仮想マシンを作成します。
テンプレート [LATEST] CentOS 6.3 64-bit
VMタイプ M4 ( Hourly ) 2CPU, 4GB RAM
ディスク選択 必要ありません
仮想マシン名 任意
グループ名 任意
SSH Keys SSH鍵生成
※生成後、秘密鍵をローカルにコピーしてください
2) SSH 接続するためのネットワーク設定
ポータルサイトで TCP22 番を開放するようポートフォーワーディングルールとファイアウォール
を設定します。
※ここでの設定は、仮想マシン作成後(ステータスが Running)になった後に実施してください
「リソース」>「ネットワーク」>「ファイアウォール」にて、TCP22番を開けます。
この後、HTTPも使うので、TCP80 番も開けてください。
「リソース」>「ネットワーク」>「ポートフォーワーディング」にて、TCP22 番を転送します。
※ネットワーク設定については、エントリーガイド(pp.29-31)を参照してください
hbstudy#41×IDCF クラウドハンズオン
5 / 24
2. Fabric をインストールして触ってみる
1) 作業用 VM(CentOS 6.3)に SSH ログイン
ローカルの環境から、作成した仮想マシンに SSH 接続します。
2) Fabric をインストール
以下のコマンドで、Python 他必要なパッケージをインストールします。
# yum install python python-devel gcc -y
次に、pip(Python パッケージ管理ツール)をインストールします。
# curl http://python-distribute.org/distribute_setup.py | python
# curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
Fabricのインストールは超カンタン。
# pip install fabric fexpect
3) 秘密鍵を設置
Fabricは SSHで接続します。仮想マシン作成時に保管した SSH秘密鍵を、作業用 VMに設置します。
# vi ~/.ssh/id_rsa
~保存した秘密鍵の内容をコピペ~
# chmod 600 ~/.ssh/id_rsa
※SCP 等のファイル転送でもかまいません
4) fabfile を作成し実行
fabfile.py という名前でファイルを作成し、以下の内容を記述します。
今後は、このファイルに追記していくことになります。
ここでの内容は、「uname –s」コマンドでホストタイプを確認する host_type 関数を作成します。
hbstudy#41×IDCF クラウドハンズオン
6 / 24
【~/fabfile.py】
from fabric.api import *
def host_type():
run('uname -s')
Fabricは次のように実行します。
# fab –H [ホスト名または IPアドレス] <コマンド>
# fab -H localhost host_type
[localhost] Executing task 'host_type'
[localhost] run: uname -s
[localhost] out: Linux
[localhost] out:
Done.
Disconnecting from localhost... done.
コマンドオプション等詳細はヘルプをどうぞ。
# fab --help
複数のサーバを指定して実行する場合は、「,」で繋げます。
# fab –H localhost,host1,host2 check_hostname
hbstudy#41×IDCF クラウドハンズオン
7 / 24
3. Fabric から Redis をインストールしてみる
1) EPELリポジトリを追加し、Redis をインストール
オートスケール用のデータ格納先として Redisを使います。Redis は EPEL リポジトリからパッケー
ジインストールします。Fabric のコードは、fabfile.py に追記していきます。
【~/fabfile.py】
from fabric.contrib.files import *
def setup_repo_epel():
sudo("""
yum -y localinstall \
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
""")
def setup_redis():
setup_repo_epel()
sudo("""
yum -y install redis
""")
comment("/etc/redis.conf",r"bind 127.0.0.1")
sudo("""
chkconfig redis on
service redis restart
""")
※epel-release-6-8.noarch.rpmがなければ最新のバージョンに置き換えてください
Fabric を実行します。Redis サービスが起動できれば成功。
# fab -H localhost setup_redis
[localhost] Executing task 'setup_redis'
[localhost] sudo:
yum -y localinstall
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
~略~
[localhost] out: redis-server を起動中: [ OK ]
[localhost] out:
hbstudy#41×IDCF クラウドハンズオン
8 / 24
[localhost] out:
Done.
Disconnecting from localhost... done.
4. Fabric から API 経由で仮想マシンを作成してみる
1) リポジトリを追加し、API ツールインストール
IDCFから提供している CloudStack APIを実行するためのコマンドラインツールをインストールする
ため、IDCFのリポジトリ追加と APIツールを yum インストールします。
【~/fabfile.py】
def install_idcf_api():
run("""
yum -y localinstall \
http://repo.cloud.idc.jp/Linux/CentOS/6/idc/x86_64/idcf-release-8-0.0.idcf.el6.noarch.rpm
yum -y install idcf.compute -y
idcf-compute-api -v
""")
Fabric を実行します。idcf-compute-api コマンドを実行してバージョンがでれば成功。
# fab -H localhost install_idcf_api
[localhost] Executing task 'install_idcf_api'
[localhost] run:
yum -y localinstall
~略~
[localhost] out: idcf-compute-api v0.10.0
[localhost] out:
Done.
Disconnecting from localhost... done.
hbstudy#41×IDCF クラウドハンズオン
9 / 24
2) API キーとシークレットキーを設置
API アクセスのための情報を、~/idcfrcに記述します。
【~/.idcfrc】
[account]
host=https://api.noahcloud.jp/portal/client/api
api_key=ここに APIキーを入れる
secret_key=ここにシークレットキーを入れる
API キーおよび秘密鍵は、IDCF クラウドのポータル右上の「マイプロファイル」をクリックすると
表示されます。(最新のエンドポイントの情報は FAQ を参照します)
hbstudy#41×IDCF クラウドハンズオン
10 / 24
3) 仮想マシン作成
API ツールを使ってスケールさせる WEBサーバー用仮想マシンを作成します。仮想マシン作成のジョ
ブ投入後、作成完了まで確認し続けます。ID は下記のものを利用し、keypare(SSH 秘密鍵)は、作
業用仮想マシン作成時に作成した鍵の名前を指定します。
テンプレート:[LATEST] CentOS 6.3 64-bit 2008
VMタイプ:S2 ( Hourly ) 1CPU, 2GB RAM 22
ゾーン:jp-east-t1v 1
【~/fabfile.py】
import json
import os,sys,time
SCALE_GROUP = "sclgrp"
def setup_idcf_vm(displayname="scale"):
resp = local("""
idcf-compute-api deployVirtualMachine \
--keypair {keypair} \
--displayname {displayname} \
--group {group} \
--templateid {templateid} \
--serviceofferingid {serviceofferingid} \
--zoneid {zoneid}
""".format(keypair="testkey", #your ssh-key name
displayname=displayname,
group=SCALE_GROUP,
templateid="2008", #(2008) [LATEST] CentOS 6.3 64-bit
serviceofferingid="22", #(22) S2
zoneid="1"),capture=True)
print resp
retval = json.loads(resp, 'UTF-8')
ret = retval["deployvirtualmachineresponse"]
vm_id = ret["id"]
jobid = ret["jobid"]
wait_job(jobid)
hbstudy#41×IDCF クラウドハンズオン
11 / 24
print "__vmid__,%d" %vm_id
def wait_job(jobid):
while True:
resp = local("""
idcf-compute-api queryAsyncJobResult --jobid {jobid}
""".format(jobid=jobid),capture=True)
retval = json.loads(resp, 'UTF-8')
ret = retval["queryasyncjobresultresponse"]
if ret["jobstatus"] == 1:
print resp
break
else:
time.sleep(30)
Fabric を実行します。仮想マシンができあがり、IP アドレス等の設定情報が返ってくれば成功。
# fab -H localhost setup_idcf_vm:displayname=scale00
[localhost] Executing task 'setup_idcf_vm'
~略~
[localhost] local:
idcf-compute-api queryAsyncJobResult --jobid 123294
{
"queryasyncjobresultresponse": {
"jobid": 123294,
"jobprocstatus": 0,
"jobresult": {
"virtualmachine": {
~略~
"jobresultcode": 0,
"jobresulttype": "object",
"jobstatus": 1
}
}
hbstudy#41×IDCF クラウドハンズオン
12 / 24
Done.
4) /etc/hosts に名前登録
作業用 VMの hosts に今作成した仮想マシンの名前を「monitor」として登録します。
※以降の手順では、IPアドレスではなく「monitor」という名前を使います
【~/fabfile.py】
def setup_hosts(ip=None,host_name=None):
print ip
print host_name
if ip and host_name:
append("/etc/hosts",
["{0} {1}".format(ip,host_name)],
use_sudo=True)
Fabric を実行します。IPアドレスは、今作成された仮想マシンの IPアドレスに変更してください。
# fab -H localhost setup_hosts:ip=10.1.2.124,host_name=monitor
hbstudy#41×IDCF クラウドハンズオン
13 / 24
5. 作成した仮想マシンを Fabric からセットアップしてみる
1) ユーザー追加
作成した仮想マシンに、ユーザー:devops を作成し、sudo の実行権限設定をします。
【~/fabfile.py】
SUDOERS = "devops"
def setup_sudoers(user=SUDOERS):
run("""
useradd {user}
usermod -a -G wheel {user}
mkdir -p -m 700 /home/{user}/.ssh
cp /root/.ssh/authorized_keys /home/{user}/.ssh/
chown -R {user}:{user} /home/{user}
chmod 600 /home/{user}/.ssh/authorized_keys
""".format(user=user))
uncomment("/etc/pam.d/su",r"auth\s+sufficient\s+pam_wheel.so\s+trust use_uid")
uncomment("/etc/sudoers",r"%wheel\sALL=\(ALL\)\s+NOPASSWD:\sALL")
Fabric を実行します。devops ユーザーで SSHログインできれば成功。
# fab -H monitor setup_sudoers
[monitor] Executing task 'setup_sudoers'
~略~
Done.
Disconnecting from monitor... done.
# ssh devops@monitor
~略~
[devops@ホスト名 ~]$
[devops@ホスト名 ~]$ exit
#
2) sshd設定
作成した仮想マシンに、sshd の設定をします。root ログイン禁止、空のパスワード禁止。
hbstudy#41×IDCF クラウドハンズオン
14 / 24
【~/fabfile.py】
def sshd_config(user=SUDOERS):
comment("/etc/ssh/sshd_config",r"^PermitRootLogin yes")
uncomment("/etc/ssh/sshd_config",r"PermitEmptyPasswords no")
append("/etc/ssh/sshd_config",
["PermitRootLogin no",
"AllowUsers {0}".format(user)])
run("service sshd restart")
Fabric を実行します。実際にログインして確認しても OK。
失敗して二度とログインできなくなったら仮想マシンを再作成!
# fab -H monitor sshd_config
[monitor] Executing task 'sshd_config'
~略~
[monitor] out: sshd を起動中: [ OK ]
[monitor] out:
[monitor] out:
Done.
Disconnecting from monitor... done.
3) /etc/hosts に名前登録
作成した仮想マシンの hosts にデータ格納先(Redis)サーバを「redis-server」として登録します。
Fabric は先ほど作ったものを利用します。
※IPアドレスは、作業用 VM の IPアドレスに変更してください。
# ifconfig eth0
~略~
# fab -u devops -H monitor setup_hosts:ip=10.1.1.94,host_name=redis-server
[monitor] Executing task 'setup_hosts'
10.1.2.23
redis-server
[monitor] sudo: echo '10.1.2.23 redis-server' >> /etc/hosts
Done.
Disconnecting from monitor... done.
hbstudy#41×IDCF クラウドハンズオン
15 / 24
4) Redis のクライアントをインストール
Redis のパッケージをインストールするのみです。
【~/fabfile.py】
def setup_redis_cli():
setup_repo_epel()
sudo("""
yum -y install redis
""")
# fab -u devops -H monitor setup_redis_cli
[monitor] Executing task 'setup_hosts'
~略~
Done.
Disconnecting from monitor... done.
5) コンテンツを設置
Python CGI をコンテンツとして作成します。
今回はホスト名を表示するだけ。
【~/hello_py.cgi】※http://repo.cloud.idc.jp/Tmp/hello_py.cgi に置いてます
#!/usr/bin/python
# -*- coding: utf-8 -*-
html = '''
<HTML>
<HEAD>
<TITLE>test</TITLE>
</HEAD>
<BODY>
<HR>
<DIV ALIGN="center">
<H1>%s</H1>
<HR>
</DIV>
</BODY>
hbstudy#41×IDCF クラウドハンズオン
16 / 24
</HTML>
'''
import socket
name = socket.gethostname()
print html % name
今作成したコンテンツを、サーバーにアップロードします。
【~/fabfile.py】
from fabric.operations import *
def setup_cgi():
sudo("""
yum -y install httpd
chkconfig httpd on
service httpd start
""")
put("~/hello_py.cgi","/var/www/cgi-bin/hello_py.cgi",use_sudo=True)
sudo("chmod 755 /var/www/cgi-bin/hello_py.cgi")
run("curl -s http://localhost/cgi-bin/hello_py.cgi | sed -e 's/<[^>]*>//g'")
# fab -u devops -H monitor setup_cgi
~略~
[monitor] out: i-1063-23685-VM
[monitor] out:
Done.
Disconnecting from monitor... done.
hbstudy#41×IDCF クラウドハンズオン
17 / 24
6) Monit インストール
WEB サーバの負荷状況は monit から監視します。
まず、Monitの監視設定を作成します。
1 分のロードアベレージが 2を超えたら、Redisにプッシュします。
【~/loadavg.rc】
check system loadavg
if loadavg (1min) > 2 then exec "/usr/bin/redis-cli -h %(redis_server)s rpush
scale:%(scale_group)s:up %(host_name)s"
※2行目の if からは 1行で書いてください
次に Monitをインストールする Fabfileを作成します。
【~/fabfile.py】
def hostname():
return run("hostname")
def setup_monit():
setup_repo_epel()
sudo("""
yum -y install monit
""")
upload_template("loadavg.rc","/etc/monit.d",use_sudo=True,backup=False,
context=dict(redis_server="redis-server",
host_name=hostname(),
scale_group=SCALE_GROUP))
sudo("""
chkconfig monit on
service monit restart
""")
Fabric を実行します。Monit のサービスが起動できれば成功。
# fab -u devops -H monitor setup_monit
~略~
[monitor] out: monit を起動中: monit: generated unique Monit id ~ and stored to
'/root/.monit.id'
[monitor] out: [ OK ]
hbstudy#41×IDCF クラウドハンズオン
18 / 24
Done.
Disconnecting from monitor... done.
7) Web 公開
ポータルサイトで HTTP をロードバランシング設定し公開します。
「リソース」>「ネットワーク」>「ロードバランサー」にて、80番のルールを作成し、作成した
サーバを分散先として登録します。
※ロードバランサー設定については、エントリーガイド(pp.32)を参照してください
http://【公開 IP アドレス】/cgi-bin/hello_py.cgi
へ接続し動作確認。
hbstudy#41×IDCF クラウドハンズオン
19 / 24
6. 自動でスケールアウトしてみる
1) cronスクリプト設置
Redis の状態を見て、スケールアウトさせるスクリプトを設置します。
まず、スクリプトの中で実行する、稼働中の VMの数える Fabricを作成します。
【~/fabfile.py】
def count_idcf_vms():
with hide('running', 'stdout', 'stderr'):
resp = local("""
idcf-compute-api listVirtualMachines --state Running
""",capture=True)
retval = json.loads(resp,'UTF-8')
ret = retval["listvirtualmachinesresponse"]
count = ret["count"]
print count
動作を確認します。
# fab -u devops -H monitor count_idcf_vms
[monitor] Executing task 'count_idcf_vms'
2
Done.
スケールを制御するスクリプトを設置します。
【~/scale.sh】※http://repo.cloud.idc.jp/Tmp/scale.sh に置いてます
#!/bin/bash
queue="scale:sclgrp:up"
lock_key="scale:sclgrp:lock"
incrd_key="scale:sclgrp:incrd"
path="`dirname $0`"
log_file="scale.log"
log() {
echo [`date`] $1 >> ${path}/${log_file}
hbstudy#41×IDCF クラウドハンズオン
20 / 24
}
log "-------------------------"
queue_count=$(redis-cli llen $queue | awk '{print $1}')
log "queue_count: $queue_count"
if [ $queue_count -gt 0 ]; then
vm_name=$(redis-cli lpop $queue | awk '{print $1}')
log "queued by: $vm_name"
locked=$(redis-cli get $lock_key | awk '{print $1}')
incrd=$(redis-cli get $incrd_key | awk '{print $1}')
if [ -z "$locked" ]; then
locked=0
fi
if [ -z "$incrd" ]; then
incrd=0
fi
log "locked: $locked"
log "incrd: $incrd"
vm_count=$(fab -f ~/fabfile.py -H localhost count_idcf_vms | awk 'NR==2 {print $0}')
log "vm_count: $vm_count"
if [ $locked -lt 1 ]; then
redis-cli incr $lock_key
redis-cli incr $incrd_key
fab -f ~/fabfile.py -H localhost setup_idcf_vm:displayname=scale_$incrd
redis-cli set $lock_key 0
redis-cli del $queue
else
log "not deploying new vm"
fi
fi
# cd ~
# chmod +x scale.sh
# crontab –e
*/3 * * * * /root/scale.sh
hbstudy#41×IDCF クラウドハンズオン
21 / 24
2) 負荷をかけます
stress コマンドで負荷をかけます。
【~/fabfile.py】
def setup_stress():
sudo("yum -y install stress")
def do_stress():
run("stress --cpu 8 --timeout 10m")
stress コマンドをインストール後、実行します。
# fab -u devops -H monitor setup_stress
# fab -u devops -H monitor do_stress
以上で、負荷がかかり始め、数分で VMが作成されるはずです。ポータルサイトをご覧ください。
VM が作られるまでの過程を確認するには、monitor サーバーで Monitの動作を確認。
SSH で別セッションを張ってみてください。
[devops@ホスト名 ~]$ tail -f /var/log/monit
[JST Dec 6 16:11:33] error : 'loadavg' loadavg(1min) of 3.5 matches resource limit
[loadavg(1min)>2.0]
[JST Dec 6 16:11:33] info : 'loadavg' exec: /usr/bin/redis-cli
redis-serverでスケールスクリプトの動作を確認。
# tail -f ~/scale.log
[Thu Dec 6 18:34:01 JST 2012] -------------------------
[Thu Dec 6 18:34:01 JST 2012] queue_count: 0
[Thu Dec 6 18:35:01 JST 2012] -------------------------
[Thu Dec 6 18:35:01 JST 2012] queue_count: 1
[Thu Dec 6 18:35:01 JST 2012] queued by: i-1063-16861-VM
[Thu Dec 6 18:35:01 JST 2012] locked: 0
[Thu Dec 6 18:35:01 JST 2012] incrd: 0
[Thu Dec 6 18:35:02 JST 2012] vm_count: 2
ポータルから scale_0 という仮想マシンができていることを確認してください。
作成されていれば成功。
hbstudy#41×IDCF クラウドハンズオン
22 / 24
7. [Appendix]ロードバランサーに自動追加
時間が余ればこちらもお試しください。
自動で作成された仮想マシンが、自動でロードバランサーに組み込まれるところを作ります。
ポータルから設定したロードバランサーのルール ID を確認します。
# idcf-compute-api listLoadBalancerRules
{
"listloadbalancerrulesresponse": {
"count": 1,
"loadbalancerrule": [
{
"account": "hbstudy1",
"algorithm": "roundrobin",
"cidrlist": "",
"domain": "70000001277",
"domainid": 1278,
"id": 42849,
以下略
ロードバランサーに追加する Fabric を作成します。
【~/fabfile.py】
def add_balancing_server(vmid):
resp = local("""
idcf-compute-api assignToLoadBalancerRule\
--id {id} \
--virtualmachineids {virtualmachineids}
""".format(id="42849", #your ID of the load balancer rule
virtualmachineids=vmid),capture=True)
print resp
※ルールの ID は先に確認したものに置き換えてください。
hbstudy#41×IDCF クラウドハンズオン
23 / 24
スケールスクリプトを修正します。(赤字のところを追記)
【~/scale.sh】※http://repo.cloud.idc.jp/Tmp/scale2.sh に置いてます
#!/bin/bash
queue="scale:sclgrp:up"
lock_key="scale:sclgrp:lock"
incrd_key="scale:sclgrp:incrd"
path="`dirname $0`"
log_file="scale.log"
log() {
echo [`date`] $1 >> ${path}/${log_file}
}
log "-------------------------"
queue_count=$(redis-cli llen $queue | awk '{print $1}')
log "queue_count: $queue_count"
if [ $queue_count -gt 0 ]; then
vm_name=$(redis-cli lpop $queue | awk '{print $1}')
log "queued by: $vm_name"
locked=$(redis-cli get $lock_key | awk '{print $1}')
incrd=$(redis-cli get $incrd_key | awk '{print $1}')
if [ -z "$locked" ]; then
locked=0
fi
if [ -z "$incrd" ]; then
incrd=0
fi
log "locked: $locked"
log "incrd: $incrd"
vm_count=$(fab -f ~/fabfile.py -H localhost count_idcf_vms | awk 'NR==2 {print $0}')
log "vm_count: $vm_count"
if [ $locked -lt 1 ]; then
redis-cli incr $lock_key
redis-cli incr $incrd_key
# fab -f ~/fabfile.py -H localhost setup_idcf_vm:displayname=scale_$incrd
hbstudy#41×IDCF クラウドハンズオン
24 / 24
vm_id=$(fab -f ~/fabfile.py -H localhost setup_idcf_vm:displayname=scale_$incrd |
grep "__vmid__" | cut -d',' -f2)
fab -f ~/fabfile.py -H localhost add_balancing_server:vmid=$vm_id
redis-cli set $lock_key 0
redis-cli del $queue
else
log "not deploying new vm"
fi
fi
この後、負荷をかけて自動で作成された仮想マシンはロードバランサーに追加されます。
ポータルからロードバランサーの設定を確認してみてください。
この状態では、追加された仮想マシンでは httpdが動おらず、ヘルスチェックに失敗するので HTTP
の通信は分散されません。
httpd のインストール、コンテンツのアップロードが必要です。
まだ時間が余っている人は考えてみてはいかがでしょうか。。。。
ここまでの fabfile は以下の URLに置いています。
http://repo.cloud.idc.jp/Tmp/fabfile.py