リブセンスのインフラで使ってる
ansibleのお話
湖山 翔平 / Shohei.koyama
@sion_cojp
湖山 翔平 / @sion_cojp
元FPSプロゲーマーでアジアチャンピオン
perl/ruby/golang/openstack
こんな記事書いてます
qiita : インフラエンジニアとしてよく使うコマンド集
slideshare : インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニア
株式会社リブセンス
自己紹介
みなさん
ansibleのベストプラクティスってご存知ですよね!
今日のお話
リブセンスではこんな感じで使ってますよ∼
というお話。
変わったことはしてないです。
今日のお話
リブセンスのディレクトリ構造はこんな感じです
サービス毎にディレクトリを作って、
その配下にあるrolesを読みに行かせてます。
未だにこれがベストプラクティスじゃないと
思って構成を悩み中。
「どのディレクトリ構造、運用がベストか。」
と悩んでました。今も悩んでます。
ネットに載ってるベストプラクティスをそのまま適用しちゃえ∼っ
て思ったら、
ディレクトリ構造がカオスになります。
(よいディレクトリ構成あったら是非教えてください!)
inventory
inventoryは
ansible-playbookを使う前に、rubyのプログラムを叩いてます。
独自サーバ管理ツール + openstackのAPI経由で
最新のホスト情報、role情報をゲットして
inventoryに書き込んでます
inventoryはシンボリックリンクを貼って
etckeepeerに管理させてます
openstackのIPをgetするrubyはこんな感じ
ちなみに今日作ったplaybookのpull reqがこちら。
発射(dry run)
$ ansible-playbook -i inventory/test spot/hogehoge.yml --check
rolesを使うときに、
tasks/main.ymlを読み込ませずに出来ないかなぁと
思いまいした。
今日久々にansible触って思ったこと
こんな感じが理想
before after
毎回フルパスかくの面倒くさい
handlerかくの面倒くさい roles/handlers/main.yml
に書いてるものを読みに行っ
てくれる!
勝手にroles/php/files/配下
を読みに行くので、
フルパス書かなくてよい!
roles/phpを指定!
chef:
サーバ構築、packerで社内用vagrant box作成
ansible:
脆弱性対応、スポット作業、mackerelの監視追加
実はリブセンスのインフラではchefとansibleを併用してます。
なぜ併用?
個人的chefの所感
メリット:
可読性高い
用意されてるリソースが便利
構成がシンプル
ohai連携でサーバのデータが取ってこれる
多様なサーバがあったら分岐しやすい、ちょっと複雑なことをしやすい
ruby実装
デメリット:
初回導入に時間かかる
chef-solo? chef-server? knife-solo? 覚えること多い。
client側にchef-dkのインストールが必要なので、初回のbootstrapに時間かかる
複雑なディレクトリ構造(environmentsやら、site-cookbooks)
ターミナル2つ開かないと並列処理できない(roundsmanで出来るという話)
個人的ansibleの所感
メリット:
シンプルな構造
(sshして・・・を叩くって形。ansible, ansible-playbookさえ覚えれば良い)
自由度が高い(ディレクトリ構成を自分で決めれたり)
playbookに格納されてるスクリプトを遠隔で打てる
並列処理
デメリット:
用意されてるリソース(モジュール)が少ない分、shellモジュールでガリガリ書くことが多
くなり、可読性が低くなる
自由度が高い分、ルールを設けないとカオスになる。
オプションが多くてすぐ忘れる
yaml
python実装
こういう住み分けになりました
ツールは会社にあった使い方をするのがベスト。
最後に言いたいことは
ご静聴ありがとうございました!

リブセンスのインフラで使ってるAnsibleのお話