すずけんメモ

技術メモです

Vagrant環境にpuppet moduleを利用してさくっとelasticsearchをインストールする

Vagrantで立ち上げたVMにいろいろ環境整えるとき、普段スクラッチでpuppet manifest書いてたんだけど、面倒なのでpuppet module使いたいなと思って調べた。本番環境でガッツリ使いたいとかならちゃんとmanifestをアレンジして管理したほうが良いと思うけど、vagrantで検証用環境作るためならpuppet moduleで良いと思ってる。

puppet moduleの使い方については以下に載っている。

Installing Modules — Documentation — Puppet Labs http://docs.puppetlabs.com/puppet/3/reference/modules_installing.html

VM側のpuppetのmoduleにさくっとelasticsearchを入れて、起動することを試みる。Vagrantfileはこんな感じ。今回はCentOSで。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos64"
  config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210.box"

  config.vm.define :search do |search_config|
      search_config.vm.hostname = "search01.vm.local"
      search_config.vm.network :private_network, ip: "192.168.10.114"
      search_config.vm.network :forwarded_port, guest: 9200, host: 9200,
      searchuto_correct: true
      search_config.vm.network :forwarded_port, guest: 9300, host: 9300,
          auto_correct: true
  end
end

$ vagrant up searchVMを起動できる。

ちなみにpuppetを使えるようになってるミニマムなboxは以下のページに載ってる。puppetlabs提供。

Puppet Vagrant Boxes http://puppet-vagrant-boxes.puppetlabs.com/

必須ではないけど、便利のためssh-configしておく。

$ vagrant ssh-config search --host search01.vm.local >> ~/.ssh/config

これでssh search01.vm.localVMsshできる。では早速manifestを書いていく。といってもすぐに終わる。

manifests/search.pp

include search

roles/search/manifests/init.pp

class search {
  class { 'elasticsearch':
    package_url => 'https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.11.noarch.rpm',
    java_install => true,
  }
}

package_urlhttp://www.elasticsearch.org/overview/elkdownloads/rpmのURLが載っているので都度使いたいのを選ぶといい。今回は0.90.11で。ついでにjava_installを指定しておくと勝手にJavaもいれてくれる。このへんの説明は https://github.com/elasticsearch/puppet-elasticsearch をみると載ってる。

実際にマニフェストを適用する。

# puppet moduleであるelasticsearch-elasticsearchをインストール
$ ssh search01.vm.local "cd /vagrant && sudo puppet module install elasticsearch-elasticsearch"

# manifestの適用を行う
$ ssh search01.vm.local "cd /vagrant && sudo puppet apply --modulepath=/etc/puppet/modules:roles manifests/search.pp"

これでelasticsearchが起動する。以下のコマンドでhost OS側から動作を確認できる。

-> % curl http://192.168.10.114:9200/
{
  "ok" : true,
  "status" : 200,
  "name" : "Wind Dancer",
  "version" : {
    "number" : "0.90.11",
    "build_hash" : "11da1bacf39cec400fd97581668acb2c5450516c",
    "build_timestamp" : "2014-02-03T15:27:39Z",
    "build_snapshot" : false,
    "lucene_version" : "4.6"
  },
  "tagline" : "You Know, for Search"
}

うまく設定すればclusterの構築も手軽にできるはず。