16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

サーバーのプロビジョニングをmitamae + hochoでやる方法

Last updated at Posted at 2018-08-29

mitamaeとは

Chefに比べ、よりシンプルかつ依存(chef server, cookbook, berkshelf, data_bags)が少なく実行できるItamaeというツールがあるんですが、mitamaeはmrubyを使うことでそこから更に依存(Rubyインタプリタ, RubyGems)を減らしシンプルにしたツールです。

歴史:
https://k0kubun.hatenablog.com/entry/itamae-mruby
https://k0kubun.hatenablog.com/entry/mitamae

何故mitamaeは便利なのか

itamae sshを使うとサーバーに何も入ってない状態のまま気軽にサーバーをプロビジョニングできるため非常に便利なのですが、itamae ssh は各コマンドごとにssh越しの通信が発生してしまい非常に遅く不快なため、通の間ではomnibus-itamaeなどでRuby処理系やitamae.gemごとItamaeをサーバーにインストールしitamae localを実行するのがベストプラクティスとなっています。

結局サーバーに持っていくならシングルバイナリであるmitamaeを使うほうがクリーンで問題が起きにくいですし、またmitamaeは最初からitamae sshをサポートしないつもりでコマンド実行のかわりに直接Cの関数呼び出しが行われるような実装も入っているため、一般にitamae localより実行が高速です。

hochoとは

Itamaeメンテナの一人であるsorahさんが作った、Itamaeとmitamaeを実行するためのツールです。手元でこのgemをインストールし、設定ファイルのYAMLを書いてhocho apply を実行すると、レシピをサーバーにrsyncしてmitamaeバイナリをダウンロードして実行、といったことが簡単に行なえます。

台数の少ない用途でmitamaeを実行する場合、sshとrsyncだけで手軽にレシピが実行できるhochoを使うと便利です。

使い方

何か適当に空のディレクトリを用意して移動しておいてください。

1. hocho gemをインストールする

Gemfile
source 'https://rubygems.org'

gem 'hocho'

bundle install しておきます。

2. hosts.yml を用意する

あらかじめ .ssh/config をいじって ssh foo-bar できるようにしておいてください。その後、カレントディレクトリに以下のような hosts.yml を書きます

hosts.yml
foo-bar:
  properties:
    run_list:
      - default.rb

最新の情報は https://github.com/sorah/hocho#setup を参照してください

3. レシピを用意する

run_list を指定したので、その名前 (今回は default.rb) でレシピを書いておきます。

default.rb
execute 'echo hello world'

4. hocho.yml を用意する

最後に、hocho.ymlを用意すれば準備完了です。多分最初は一番面倒なパートですが(Linux x86_64の場合は)コピペで動くと思います。

property_providers:
  - add_default:
      properties:
        preferred_driver: mitamae

driver_options:
  mitamae:
    mitamae_path: /usr/local/bin/mitamae
    mitamae_options: ['--log-level', 'info']
    mitamae_prepare_script: |
      wget -O /usr/local/bin/mitamae https://github.com/itamae-kitchen/mitamae/releases/download/v1.6.2/mitamae-x86_64-linux &&
      echo "047cc776f2b0b555c7a6d90c32c7c581529bfc1a5db48ddb3090ee79d55ce3f3  /usr/local/bin/mitamae" | shasum -a 256 -c &&
      chmod +x /usr/local/bin/mitamae

裏技として、ヘルパー的なレシピをmitamae_optionsの先頭に書いたりできます。場合によっては--log-levelはdebugにしておいた方が快適かもしれません。

最新の情報は https://github.com/sorah/hocho#setup を参照してください

5. 実行

sudo passwordを入力するのがダルい時は$SUDO_PASSWORDが何らかの形で渡るようにしておくと楽です

$ read -s SUDO_PASSWORD; export SUDO_PASSWORD

$ bundle exec hocho apply --dry-run foo-bar
Running using mitamae
=> $ rsync -az --copy-links --copy-unsafe-links --delete --exclude\=.git --rsh ssh\ -o\ \"PubkeyAuthentication\=yes\"\ -o\ \"PasswordAuthentication\=yes\"\ -o\ \"PreferredAuthentications\=none,publickey,password,keyboard-interactive\"\ -o\ \"User\=k0kubun\"\ -o\ \"Port\=xxxx\"\ -o\ \"HostName\=xxx.xx.xxx.xxx\"\ -o\ \"IdentityFile\=\~/.ssh/xxx\" . xxx.xx.xxx.xx:/tmp/hocho-run-LRmQto5bS/itamae
$ test -x /usr/local/bin/mitamae
$ umask 0077 && cat > /tmp/hocho-run-LRmQto5bS/node.json
$ chmod 0700 /dev/shm/hocho-run-3AMga3Ydr/tmp.WVJHiETiDB; cat > /dev/shm/hocho-run-3AMga3Ydr/tmp.WVJHiETiDB; chmod +x /dev/shm/hocho-run-3AMga3Ydr/tmp.WVJHiETiDB
=> kubernetes-master # /usr/local/bin/mitamae local -j /tmp/hocho-run-LRmQto5bS/node.json --log-level info --dry-run default.rb
$ bash
[foo-bar]   INFO : Starting MItamae...
[foo-bar]   INFO : Recipe: /tmp/hocho-run-LRmQto5bS/itamae/default.rb
[foo-bar]   INFO :   execute[echo hello world] executed will change from 'false' to 'true'
$ shred --remove /dev/shm/hocho-run-3AMga3Ydr/tmp.WVJHiETiDB
=> kubernetes-master $ rm -rf /tmp/hocho-run-LRmQto5bS/itamae
$ rm -rf /tmp/hocho-run-LRmQto5bS/itamae

本番は --dry-run を外してください。

以上で、快適にmitamaeが実行できるようになったかと思います。レシピの書き方は https://github.com/itamae-kitchen/itamae/wiki とかを参考にしてください。

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?