自分はサーバープロビジョニングといえば、AWS上の本番・ステージング・共有開発機もろもろインフラチームにまかせっきりだった。しかしアプリエンジニアがローカル開発環境を作る用途ならChefやPuppetよりもAnsibleがマッチしていると思った次第。
インフラチーム管理下のサーバーにおいてPuppetマニフェストで管理されている部分はアプリケーションエンジニアは触れないため、変更を加えたい場合は都度依頼を出している。
結果、作成が必要だったのは対象のサーバーを指定するファイルとレシピに相当するyamlファイル、コピーして配置する用の設定ファイル(httpd.conf等)だけで済んだ。至って簡潔。しかも対象サーバーにPython 2.4以上さえ入っていれば使える。
リポジトリには起動用のMakefileとREADMEを追加してコミットしておけば良い。
ちなみに、本エントリの例題構成をプロビジョニングするAnsibleのPlaybookは次の通りになった。わかりやすい。
背景
自分の職場だと、インフラチームはPuppetのマニフェストでサーバーを管理している、例えばサーバーにインストールするパッケージ やApacheの設定である。しかし、そのPuppetマニフェストはアプリエンジニアのローカルの環境を構築する用途としてそのまま使えない。インフラチーム管理下のサーバーにおいてPuppetマニフェストで管理されている部分はアプリケーションエンジニアは触れないため、変更を加えたい場合は都度依頼を出している。
共有開発サーバーとローカル個人環境
例えばApacheとfluentdとElasticsearchはインフラチームが管理しており、KibanaでApacheログが見れるとしよう。Kibanaに思った通りのグラフが出せない時、自由にできる環境がなければどこをいじれば良いのか試行錯誤すらできない。必然的に共有開発サーバーではなく、個人環境が欲しくなる。Ansibleを使ってみる
ここで欲しいのは、Apacheログがfluentdに回収されてElasticsearchに放りこまれてKibanaで見られる環境をコマンド一発で作れる何かである。Chefでも良かったが、もっと気軽に使える物は無いかとAnsibleを試してみた。結果、作成が必要だったのは対象のサーバーを指定するファイルとレシピに相当するyamlファイル、コピーして配置する用の設定ファイル(httpd.conf等)だけで済んだ。至って簡潔。しかも対象サーバーにPython 2.4以上さえ入っていれば使える。
リポジトリには起動用のMakefileとREADMEを追加してコミットしておけば良い。
サーバープロビジョニングツールについて
インフラチームが使う高機能な物と、アプリケーションチームが使う簡易な物、それぞれ別の物が流行ると思う。少なくともChefは二度使った経験からすると、使い方とレシピの書き方を思い出すのが面倒すぎる。ちなみに、本エントリの例題構成をプロビジョニングするAnsibleのPlaybookは次の通りになった。わかりやすい。
- hosts: webserver user: vagrant sudo: yes tasks: # Apache - name: Install apache apt: name=apache2 update_cache=yes - name: Copy /etc/apache2/apache2.conf copy: src=./settings/apache/apache2.conf dest=/etc/apache2/ - name: Restart apache service: name=apache2 state=restarted # Elasticsearch - name: Get apt key for elasticsearch apt_key: url=http://packages.elasticsearch.org/GPG-KEY-elasticsearch - name: Add apt repository apt_repository: repo='deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main' - name: Install JDK apt: name=openjdk-7-jre-headless update_cache=yes - name: Install elasticsearch apt: name=elasticsearch update_cache=yes # Elasticsearch Plugins - name: Remove elasticsearch-head command: /usr/share/elasticsearch/bin/plugin --remove mobz/elasticsearch-head - name: Install elasticsearch-head command: /usr/share/elasticsearch/bin/plugin --install mobz/elasticsearch-head - name: Remove elasticsearch-kibana command: /usr/share/elasticsearch/bin/plugin --remove elasticsearch/kibana3 - name: Install elasticsearch-kibana command: /usr/share/elasticsearch/bin/plugin -url http://download.elasticsearch.org/kibana/kibana/kibana-latest.zip --install elasticsearch/kibana3 - name: Restart elasticsearch service: name=elasticsearch state=restarted # td-agent - name: Get apt key for treasure-data apt_key: url=http://packages.treasure-data.com/debian/RPM-GPG-KEY-td-agent - name: Add apt repository apt_repository: repo='deb http://packages.treasure-data.com/precise/ precise contrib' - name: Install td-agent apt: name=td-agent update_cache=yes - name: Install libcurl-dev apt: name=libcurl4-openssl-dev update_cache=yes - name: Install plugin command: /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch - name: Copy td-agent.conf copy: src=./settings/td-agent/td-agent.conf dest=/etc/td-agent/ - name: Restart td-agent service: name=td-agent state=restarted