Amazon Linuxで簡易Chef Server(chef-zero)を動かしてみた
ども、大瀧です。最近かげきしょうじょ!にハマってます。マンガ好きの方にオススメです。
さて、大和さんのシリーズ「Chefを始める」でChef Client & Serverの構築が解説されていますが、Chef ServerのセットアップとChef ClientのValidationって結構面倒だと思いませんか?
簡単にセットアップ&Clientから接続できる開発環境向けのChef Server、chef-zeroなるものがあると聞き、例によってAmazon Linuxにインストールしてみました。
準備するもの
Amazon Linux 1つ。t1.microでOKです。
1. Rubygemsと依存パッケージをインストール
chef-zeroは、RubyGemsで提供されています。今回は深い意味はないですが、Ruby 1.9とそのRubygemsを準備しておきます。
[ec2]$ sudo yum install ruby19 rubygems19 [ec2]$ sudo ln -sf /usr/bin/ruby1.9 /usr/bin/ruby [ec2]$ sudo ln -sf /usr/bin/gem1.9 /usr/bin/gem [ec2]$ gem list *** LOCAL GEMS *** [ec2]$
また、chef-zeroが依存するGemにはRuby拡張をビルドするものがあるため、Development Toolsパッケージグループとruby19-develパッケージ、openssl-develパッケージもインストールしておきます。
[ec2]$ sudo yum groupinstall "Development Tools" [ec2]$ sudo yum install ruby19-devel openssl-devel
2. chef-zeroのインストール
chef-zeroのインストールはgem installで一発です。依存するjson gemも一緒に入れましょう。
[ec2]$ sudo gem install chef-zero json --no-ri --no-rdoc Building native extensions. This could take a while... Fetching: mixlib-log-1.6.0.gem (100%) Fetching: hashie-2.0.5.gem (100%) Fetching: moneta-0.6.0.gem (100%) Fetching: chef-zero-1.0.1.gem (100%) Fetching: json-1.8.0.gem (100%) Successfully installed puma-2.0.1 Successfully installed mixlib-log-1.6.0 Successfully installed hashie-2.0.5 Successfully installed moneta-0.6.0 Successfully installed chef-zero-1.0.1 Successfully installed json-1.8.0 5 gems installed [ec2]$
3. chef-zeroの実行
で、いきなり実行できます。デフォルトではフォアグラウンドで実行するため、&をつけてバックグラウンドで起動するのがオススメです。Amazon Linuxは一定時間端末を放っておくと、自動的にSSHコネクションが切断されるためです。とりあえず必要そうなオプションを以下に示します(-hオプションでも確認できます)。
オプション名 | 機能 | デフォルト値 |
---|---|---|
-H X.X.X.X | Listenするインターフェース | 127.0.0.1 |
-p XXXX | Listenするポート番号 | 8889 |
ポート番号を1023番より小さい番号にするためには、rootの権限が必要です。その場合は、sudoコマンドで実行しましょう。
[ec2]$ chef-zero -H 0.0.0.0 & [2] 27218 >> Starting Chef Zero (v1.0.1)... >> Puma (v2.0.1) is listening at http://0.0.0.0:8889 >> Press CTRL+C to stop
[5/23 追記(@sawanobolyさんご指摘ありがとうございました)]
実行例ではインターフェース0.0.0.0を指定しているため、任意のホストから接続できる状態です。後述の通り、chef-zeroではClient認証を行わないので0.0.0.0にする場合は、iptablesやEC2のセキュリティグループなど、OSもしくはAWSレベルでアクセス制限を設定しましょう。
以下にセキュリティグループの設定例を示します。1つ目のエントリーはChef Client用にVPCサブネットのネットワーク、2つ目のエントリーはChef Workstationとなる手元のMBAが接続するネットワークのグローバルIPアドレスにしました。
4. 接続確認
適当なChef Workstationからchef-zeroを実行するEC2に接続してみます。chef-zeroはClient認証を行わない(どんなキーでもAcceptする)ので、適当なClientキーでOKです。Workstationのセットアップ方法は、大和さんのエントリーを参照してください。~/.chef/knife.rbファイル内のchef_server_urlエントリーが、httpsではなくhttpになること、ポート番号をchef-zero実行時の-pオプションに合わせることに注意してください。
[work]$ cat ~/.chef/knife.rb log_level :info log_location STDOUT node_name 'otaki' client_key '/Users/otakiryuta/.chef/otaki.pem' validation_client_name 'chef-validator' validation_key '/Users/otakiryuta/.chef/chef-validator.pem' chef_server_url 'http://ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com:8889/' syntax_check_cache_path '/Users/otakiryuta/.chef/syntax_check_cache' [work]$
試しに、ユーザー一覧を参照してみます。
[work]$ knife user list admin
ちゃんと出ました!
まとめ
Chef soloに比べると敷居が高いChef Serverですが、Cookbook開発や動作確認であればchef-zeroで十分代用できるんじゃないかと思います。皆さんのChef力向上にお役立てください!