Fabric + Amazon EC2で快適サポート生活 #PyFes
-
Upload
sho-shimauchi -
Category
Technology
-
view
1.798 -
download
3
description
Transcript of Fabric + Amazon EC2で快適サポート生活 #PyFes
![Page 1: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/1.jpg)
Fabric + Amazon EC2で快適サポート生活
2013/07/27 @shiumachi
![Page 2: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/2.jpg)
アジェンダ
• 前回のおさらい: Fabric とは • サポートにおける課題 • EC2 を使った検証環境の構築
![Page 3: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/3.jpg)
お前誰よ?
• Sho Shimauchi ( @shiumachi ) • Cloudera の問い合わせ担当
←付録B、C、D書きました
![Page 4: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/4.jpg)
おことわり
• 今日話す内容は、私が個人で行っているもので、会社全体でやってるわけじゃないです
• あくまでこういうやり方もありますよ、というアイデア程度のものと認識してください
![Page 5: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/5.jpg)
2013.03
![Page 6: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/6.jpg)
![Page 7: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/7.jpg)
drillbitsによる Fabric の紹介
![Page 8: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/8.jpg)
Fabric
• Python製デプロイ・システム管理支援ツール • アプリケーションのデプロイやシステム管理
のコマンドをSSHで実行 • 作成したスクリプトはコマンドラインから実行
可能
![Page 9: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/9.jpg)
特長
![Page 10: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/10.jpg)
特長 マジ簡単
![Page 11: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/11.jpg)
Fabricスクリプトの例
from fabric.api import run def host_type(): run('uname -‐s')
![Page 12: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/12.jpg)
Fabricスクリプトの例
from fabric.api import run def host_type(): run('uname -‐s')
関数名 = 実際のコマンド
![Page 13: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/13.jpg)
Fabricスクリプトの例
from fabric.api import run def host_type(): run('uname -‐s')
関数名 = 実際のコマンド
リモートマシンで 実行するコマンド
![Page 14: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/14.jpg)
Fabricコマンドの実行例
$ fab -‐H localhost,linuxbox host_type
![Page 15: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/15.jpg)
Fabricコマンドの実行例
$ fab -‐H localhost,linuxbox host_type
ターゲットのホスト名 “localhost” と “linuxbox”
![Page 16: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/16.jpg)
Fabricコマンドの実行例
$ fab -‐H localhost,linuxbox host_type
ターゲットのホスト名 “localhost” と “linuxbox”
関数をコマンド として実行
![Page 17: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/17.jpg)
Fabricコマンドの実行例 $ fab -‐H localhost,linuxbox host_type [localhost] run: uname -‐s [localhost] out: Darwin [linuxbox] run: uname -‐s [linuxbox] out: Linux Done. DisconnecUng from localhost... done. DisconnecUng from linuxbox... done.
![Page 18: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/18.jpg)
Fabricコマンドの実行例 $ fab -‐H localhost,linuxbox host_type [localhost] run: uname -‐s [localhost] out: Darwin [linuxbox] run: uname -‐s [linuxbox] out: Linux Done. DisconnecUng from localhost... done. DisconnecUng from linuxbox... done.
localhost
linuxbox
![Page 19: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/19.jpg)
Fabricコマンドの実行例 $ fab -‐H localhost,linuxbox host_type [localhost] run: uname -‐s [localhost] out: Darwin [linuxbox] run: uname -‐s [linuxbox] out: Linux Done. DisconnecUng from localhost... done. DisconnecUng from linuxbox... done.
localhost
linuxbox
リモートマシンで コマンドが実行された
![Page 20: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/20.jpg)
マジ簡単
![Page 21: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/21.jpg)
2013.04
![Page 22: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/22.jpg)
![Page 23: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/23.jpg)
![Page 24: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/24.jpg)
![Page 25: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/25.jpg)
マジ大人気
![Page 26: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/26.jpg)
話は変わって、サポートの話
• ベンダーサポートのメイン業務は障害対応 • 障害対応のキモは現象再現 • 現象再現のキモは環境再現
![Page 27: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/27.jpg)
理想 全てのお客様の環境の複製を
社内に持っている
![Page 28: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/28.jpg)
理想 全てのお客様の環境の複製を
社内に持っている
現実 そんなの無理
![Page 29: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/29.jpg)
サポートの観点からの検証環境 種類 長所 短所
ローカルマシンのVM 手軽に使える (VM起動ソフト以外は)無料
リソースの制約が厳しい(CPU、メモリ、ディスク全て)
社内共有サーバ 比較的豊富なリソースを確保できる 全員で共有するので1人当たりの設備投資は比較的安価
サーバ自体の専有が難しい 破壊的な検証ができない 長期的に見れば安くても、イニシャルコストは結構かかる
クラウド環境 手軽に使える イニシャルコストがかからない 破壊的な検証も容易
ネットワークがない環境だと使用不能 ランニングコストは結構かかる
![Page 30: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/30.jpg)
サポート用環境と他の環境の違い 構築期間 運用期間 環境の種類
Webサービスの環境
数日〜数週間 1年〜数年 (ただし頻繁に更新する)
そこそこ多い
エンタープライズシステム
数ヶ月〜数年 数年以上 ほとんどない
サポート用環境
![Page 31: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/31.jpg)
サポート用環境と他の環境の違い 構築期間 運用期間 環境の種類
Webサービスの環境
数日〜数週間 1年〜数年 (ただし頻繁に更新する)
そこそこ多い
エンタープライズシステム
数ヶ月〜数年 数年以上 ほとんどない
サポート用環境 数分〜数時間 (設計含む)
数時間〜数日 コンポーネントの組み合わせ数だけある(事実上無限)
![Page 32: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/32.jpg)
サポート用環境と他の環境の違い 構築期間 運用期間 環境の種類
Webサービスの環境
数日〜数週間 1年〜数年 (ただし頻繁に更新する)
そこそこ多い
エンタープライズシステム
数ヶ月〜数年 数年以上 ほとんどない
サポート用環境 数分〜数時間 (設計含む)
数時間〜数日 コンポーネントの組み合わせ数だけある(事実上無限) しかも、「間違った」環境を構築する必要もある
![Page 33: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/33.jpg)
サポート対象のソフト
• 約20種類 • メジャーバージョン2つ、それぞれにマイナー
バージョンが5つ、計10バージョン • これらのバージョンが組み合わせて使用され
る
![Page 34: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/34.jpg)
Hadoop: サーバの数が多い
マスタ1 マスタ2 マスタ3
スレーブ スレーブ
スレーブ スレーブ
スレーブ スレーブ
スレーブ スレーブ
クライアント
管理 サーバ
![Page 35: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/35.jpg)
解決策: fabric + EC2 スポットインスタンス
• 環境の組み合わせ数が多く、しかも毎回異なる – chef / ansible などよりも毎回カスタマイズして構
築する方が速い
• 環境は使い捨て – スポットインスタンスなら安く済ませられる
![Page 36: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/36.jpg)
Amazon EC2 スポットインスタンス
• 安い – m1.large だと価格は通常の20%以下 – 1時間あたり6.7円
• 永続化できない – 停止したら削除
m1.large 通常のインスタンス
35円 / 時間
m1.large スポットインスタンス
6.7円 / 時間
![Page 37: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/37.jpg)
基本戦略
• ローカル環境(VMなど)で再現できるなら、極力そちらを使う
• EC2 を使うのは必要な場合だけ(サーバ間の通信の問題やソフトウェアの組み合わせ時の調査など)
![Page 38: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/38.jpg)
基本戦略
• ローカル環境(VMなど)で再現できるなら、極力そちらを使う
• EC2 を使うのは必要な場合だけ(サーバ間の通信の問題やソフトウェアの組み合わせ時の調査など)
• 手動でやった方が早いかどうかのトリアージが重要 – サポートは1分1秒を争う仕事
![Page 39: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/39.jpg)
現象再現までの流れ
インスタンスの起動
OS周りの構築
ソフトウェアの環境構築
現象再現の試行開始
テストデータの投入
![Page 40: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/40.jpg)
現象再現までの流れ
インスタンスの起動
OS周りの構築
ソフトウェアの環境構築
現象再現の試行開始
テストデータの投入
手動で起動している 毎回必要な数も違うた
め、スクリプト化するより手動の方が速い
頻度が上がったら自動化するかも
![Page 41: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/41.jpg)
現象再現までの流れ
インスタンスの起動
OS周りの構築
ソフトウェアの環境構築
現象再現の試行開始
テストデータの投入
Fabric で構築スクリプトを保持
作成後はAMI(EC2上のディスクイメージみたい
なやつ)として保存 ここは Chef / ansible を
使ってもいいかも
![Page 42: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/42.jpg)
現象再現までの流れ
インスタンスの起動
OS周りの構築
ソフトウェアの環境構築
現象再現の試行開始
テストデータの投入
どのコンポーネントをインストールするか、などをFabric
コマンドから選択 インストール後の設定もここ
で行う バージョンの違いはここで吸
収する
![Page 43: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/43.jpg)
現象再現までの流れ
インスタンスの起動
OS周りの構築
ソフトウェアの環境構築
現象再現の試行開始
テストデータの投入
調査対象のソフトや、お客様のユースケースによってテストデータの種類が異な
る まだ自動化できてないので、データ生成から自動化した
い
![Page 44: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/44.jpg)
現象再現までの流れ
インスタンスの起動
OS周りの構築
ソフトウェアの環境構築
現象再現の試行開始
テストデータの投入
多くの場合手動での作業 同一の手順が増えたら自動
化する
![Page 45: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/45.jpg)
実際のスクリプトはこんな感じ
![Page 46: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/46.jpg)
サポートとしてのFabricの使い方
• 「手順書書くよりFabric」 • 「メモ帳に残すよりFabric」 • 大抵は同じ環境は二度と使わない • しかし、場合によっては一週間後に使うかもし
れない • サポートは救急隊員 – 手動の方が早い場合も多い – 自動・手動のバランスをとりましょう
![Page 47: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/47.jpg)
よくある質問 Q. 冪等性はどうなるの? A. Chef とか Ansible を使ってください Q. インストールにも Fabric は使えるの? A. 以下の場合は最初から Chef / Ansible を使いましょう。 -‐ 環境の再利用性が高い -‐ そこそこ複雑な構成 これらのツールは学習コストが高いので考えなしに突撃するのはおすすめしない
![Page 48: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/48.jpg)
よくある質問
Q. 実運用するときにfabfileを1つだけ作るのか、それとも分けた方がいいのか A. 場合によりますが、今後修正・拡張するなら分けた方がいいかと Q. fabtool とか cuisine はいつ使えばいいの? A. fabric だけで書くのがめんどくなったと感じたときに調べればいいと思います
![Page 49: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/49.jpg)
よくある質問 Q. sudo するときにパスワード入れるのめんどくさい A. /etc/sudoers に NOPASSWD 追加してください
Q. 同じIPを env.host に設定するとどうなるの? A. ダブりは削除されます
Q. 標準出力のサイズが大きいとどうなるの? A. プロセスが止まって結果が返ってこなくなるかも
Q. SSHのポートが22番と異なるときはどうすればいい? A. host:port で普通に指定できます
![Page 50: Fabric + Amazon EC2で快適サポート生活 #PyFes](https://reader035.fdocuments.net/reader035/viewer/2022081720/558deee01a28ab2b7e8b4675/html5/thumbnails/50.jpg)
おしまい