[AWS][DevOps] Vagrant+Chef Solo+BerkshelfでEC2インスタンスにnginxを入れる

By |7月 24, 2013|AWS, DevOps, |0 comments


前回の[AWS][DevOps] VagrantでEC2インスタンスを作成はVagrantでEC2インスタンスを作成しました。今回はChef Soloを使って、このインスタンスにnginxをインストールしてみます。

Chefはサーバ構成管理ツールで、端的に言うとサーバに対するパッケージのインストールや設定変更をRubyで記述し実行するツールです。つまりVagrantでサーバの起動や廃棄をコード化したように、サーバの変更をコード化するツールがChefです。

今回はVagrantで起動したサーバに対して変更を行うという操作をするために、前回の手順で作成したEC2インスタンスを廃棄せず以下の手順でサーバの変更を行います。したがって廃棄してしまっている場合は再度vagrant upをして準備してください。

まず、EC2インスタンスの設定を変更するのでEC2インスタンス自体にChefをインストールします。vagrant sshでログインしてインストールしても良いのですが、設定変更をすべてVagrant+Chefで管理していくという主旨を体感するためにVagrantfileの変更を既存のEC2インスタンスへ適用する手順を行います。

まず、vagrant-omnibusをいうプラグインをインストールします。

$ vagrant plugin install vagrant-omnibus
$ vagrant plugin list
vagrant-aws (0.2.2)
vagrant-omnibus (1.1.0)

そしてVagrantfileを以下のように変更します。

前回との相違は”config.omnibus.chef_version = :latest”が1行追加されただけですね。この状態でvagrant provisionするとEC2インスタンスにChef Soloがインストールされます。

$ vagrant provision
[default] Rsyncing folder: /Users/kojo/Documents/workspace/aws-dummy/ => /vagrant
[default] Installing Chef 11.6.0 Omnibus package...
$ vagrant ssh
Last login: Tue Jul 23 17:36:00 2013 from xxx

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2013.03-release-notes/
There are 6 security update(s) out of 11 total update(s) available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-132-98-51 ~]$ knife -v
Chef: 11.6.0

ChefはCookbook(正確にはRecipe)というファイル群を使ってサーバの構成を行います。実際に構成内容を記述したソースコードがRecipeで、それを包括するディレクトリのようなものはCookbookと呼ばれています。そしてnginxのようなメジャーなパッケージのCookbookは既に誰かが用意してくれていて、Opscodeコミュニティを探せば大体見つかります。

BerkshelfはChefのCookbookを管理するツールで、インストールするとberksコマンドが使えるようになり、予め用意されたBerksfileに従って指定されたサイトから指定されたCookbookを依存管理しながら落としてくるツールです。今回は上記したOpscodeコミュニティからnginxのCookbookを落としてくるのに使います。

それではBerkshelfをインストールします。

$ gem install berkshelf
$ berks -v
Berkshelf (2.0.7)

続いてVagrantからBerkshelfを使うVagrantプラグインをインストールします。

$ vagrant plugin install vagrant-berkshelf
$ vagrant plugin list
vagrant-aws (0.2.2)
vagrant-berkshelf (1.3.3)
vagrant-omnibus (1.1.0)

次にberks cookbookコマンドを叩きます。

$ berks cookbook .
      create  files/default
      create  templates/default
      create  attributes
      create  definitions
      create  libraries
      create  providers
      create  recipes
      create  resources
      create  recipes/default.rb
      create  metadata.rb
      create  LICENSE
      create  README.md
      create  Berksfile
      create  Thorfile
      create  chefignore
      create  .gitignore
         run  git init from "."
      create  Gemfile
    conflict  Vagrantfile
Overwrite /Users/kojo/Documents/workspace/aws-dummy/Vagrantfile? (enter "h" for help) [Ynaqdh] n <=上書きしない
        skip  Vagrantfile

これで一般的なCookbookに必要なファイル群が作成されましたが今回はBerksfileとVagrantfile以外は触りません。Chefは裾野が広いので、また機会があれば触れたいと思います。

次にBerksfileにnginxを落とすための記述をします。

$ vi Berksfile
site: opscode

metadata
cookbook 'nginx' <=追加

これでberksするとOpscodeからnginxのCookbookを落としてきます。依存するCookbookもすべて落としてきてるのがわかります。落としたCookbookは~/.berkshelf/default/vagrant/以下に入るようです。

$ berks
Using . (0.1.0) from metadata
Installing nginx (1.6.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing build-essential (1.4.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing yum (2.3.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing apt (2.0.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing runit (1.1.6) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Installing ohai (1.1.10) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
$ ls ~/.berkshelf/default/vagrant/berkshelf-20130724-93757-14n8ckd-default/
Berksfile	LICENSE		Vagrantfile	build-essential	files		nginx		recipes		templates Berksfile.lock	README.md	apt		chefignore	libraries	ohai		resources	yum Gemfile		Thorfile	attributes	definitions	metadata.rb	providers	runit

続いてVagrantfileに追記します。

6〜10行目が追加された行になります。

これで再度vagrant provisionします。

$ vagrant provision
[Berkshelf] Updating Vagrant's berkshelf: '/Users/kojo/.berkshelf/default/vagrant/berkshelf-20130724-93757-14n8ckd-default'
[Berkshelf] Using . (0.1.0)
[Berkshelf] Using nginx (1.6.0)
[Berkshelf] Using build-essential (1.4.0)
[Berkshelf] Using yum (2.3.0)
[Berkshelf] Using apt (2.0.0)
[Berkshelf] Using runit (1.1.6)
[Berkshelf] Using ohai (1.1.10)
[default] Rsyncing folder: /Users/kojo/Documents/workspace/aws-dummy/ => /vagrant
[default] Rsyncing folder: /Users/kojo/.berkshelf/default/vagrant/berkshelf-20130724-93757-14n8ckd-default/ => /tmp/vagrant-chef-1/chef-solo-1/cookbooks
[default] Chef 11.6.0 Omnibus package is already installed.
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...

以下、つらつらリモートでのChefのログが出ます。

※余談ですが”[default] Rsyncing folder: /Users/kojo/Documents/workspace/aws-dummy/ => /vagrant”とあるようにvagrant provisionするとローカルのaws-dummyディレクトリとリモート(EC2インスタンス)の/vagrantが同期されます。ちょっとしたファイル転送にも使えます(使わないか…)

エラーが出ずに終われば以下のようにsshでログインしてnginxがインストールされたか確認します。

$ vagrant ssh
Last login: Tue Jul 23 21:06:57 2013 from xxx

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2013.03-release-notes/
There are 6 security update(s) out of 11 total update(s) available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-132-98-51 ~]$ nginx -v
nginx version: nginx/1.2.9

バッチリです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です