Chefを使用してEC2インスタンスを操作するチュートリアル:その2

記事タイトルとURLをコピーする

こんにちは!インフラエンジニアの柳瀬です!
以前、Chefのチュートリアルを書いてから早いもので一ヶ月が経過してしまいました(すみません)。
9月号のSoftware DesignでもChefが特集されておりますし、これからより注目を浴びていきそうですね!
私も頑張って「攻め」の仕事術を学んでいきたいと思います。 knife ec2を使用してEC2インスタンスを起動と終了は以下の流れで行います。

  1. ローカルPCにOpscode社から提供されているcookbookのダウンロード
  2. Chef-Serverにcookbookをアップロードする
  3. EC2に接続するための設定を追加
  4. knife ec2による起動、動作確認
  5. apache2のrecipeを適用、動作確認
  6. EC2インスタンスのterminate、nodeリストからの削除

それではさっそく進めていきたいと思います。

1)ローカルPCにOpscode社から提供されているcookbookのダウンロード

こちらの作業はとても簡単です。
Opscode社から提供されているcookbookは以下のコマンドでダウンロード出来ます。

$ knife cookbook site vendor chef-client

2)Chef-Serverにcookbookをアップロードする

こちらの作業も以下のコマンドを実行するだけですので難しくはありません。

$ knife cookbook upload chef-client

3)EC2に接続するための設定を追加

こちらもそんなに難しいものではありません。
.chef/knife.rbにアクセスキーID、シークレットアクセスキーの情報を追記します。

$ echo "knife[:aws_access_key_id]     = "YOUR_ACCESSKEY"" >> .chef/knife.rb
$ echo "knife[:aws_secret_access_key] = "YOUR_SECRET_ACCESSKEY_"" >> .chef/knife.rb

4)knife ec2による起動、動作確認

それではいよいよEC2インスタンスの起動です。
ちなみにknifeコマンドは"knife --help"と実行する事でhelpを確認が出来ますが、EC2操作に関するhelpは以下のように実行してください。

$ knife ec2 --help

** EC2 COMMANDS **
knife ec2 instance data (options)
knife ec2 server list (options)
knife ec2 server create (options)
knife ec2 server delete SERVER [SERVER] (options)

さらに出力されたサブコマンドのhelpを参照する場合は以下のように実行します

$ knife ec2 instance data --help

現在起動しているEC2インスタンスは以下のようなコマンドを実行する事で一覧表示が出来ます

$ knife ec2 server list --region ap-southeast-1

knifeコマンドでEC2インスタンスを起動するには以下の情報を指定し、これに加えて実際は鍵を登録するユーザ名を指定します。

AWSの用語knife ec2コマンドのオプション名
Regionregion
Availability Zoneavailability-zone
AMI IDimage
Instance Typeflavor
Security Groupgroups
Key Pairsssh-key

それでは以下のように実行してインスタンスを起動してみます。
注意すべき点は事前にローカルのSSH公開鍵をAWSに登録した上でオプションに指定する事と、セキュリティグループもSSHアクセス可能な設定にしておく事です。

$ knife ec2 server create --run-list 'recipe[chef-client]' --region ap-southeast-1 --availability-zone ap-southeast-1a --image ami-f292eca0 --flavor t1.micro --groups yanase-develop --ssh-key yanase-ubuntu --ssh-user ubuntu

以下のコマンドでnodeとして追加されている事が確認出来ます。
実際にEC2インスタンスに接続すればchef-clientのプロセスも確認出きるはずです。

$ knife node list
i-3d87f568

5)apache2のrecipeの適用、動作確認

せっかくなので先ほど起動したインスタンスにapache2のrecipeを適用してみましょう。
まずは先ほど起動したnodeの詳細を見るとRecipeにchef-clietnが適用されている事が分かります。

$ knife node show i-3d87f568
Node Name:   i-3d87f568
Environment: _default
FQDN:        ip-10-136-21-61.ap-southeast-1.compute.internal
IP:          10.136.21.61
Run List:    recipe[chef-client]
Roles:
Recipes      chef-client
Platform:    ubuntu 10.04

それでは先ほどと同様にcookbookをダウンロードしてサーバにアップしましょう。

$ knife cookbook site vendor apache2
$ knife cookbook upload apache2

次に以下のコマンドでnodeにレシピを追加します。

$ knife node run_list add i-3d87f568 'recipe[apache2]'
run_list:
    recipe[chef-client]
    recipe[apache2]

先ほどと同じコマンドを実行するとapache2のrecipeが適用されています。

$ knife node show i-3d87f568
Node Name:   i-3d87f568
Environment: _default
FQDN:        ip-10-136-21-61.ap-southeast-1.compute.internal
IP:          10.136.21.61
Run List:    recipe[chef-client], recipe[apache2]
Roles:
Recipes      chef-client
Platform:    ubuntu 10.04

chef-clientはデフォルトで30分間隔でchef-serverにアクセスしてrecipeの適用を行いますが、待てない方は起動したインスタンスにログインして以下のコマンドを実行してください。

$ sudo chef-client

6)EC2インスタンスのterminate、nodeリストからの削除

それでは動作確認が終わったのでインスタンスをterminateします。

knife ec2 server delete i-3d87f568 --region ap-southeast-1

忘れずにnodeリストからも削除します。

$ knife node delete i-3d87f568

これで一通りの動作確認が出来ました。
しかし、これはあくまで基本的な動作確認です、実際は環境に合わせてrecipeを編集して一度に適用するなどの運用で効果を発揮します。
自分で一からrecipeの作成は大変でしょうから、Opscode社から提供されているものに修正を加えながらchefに慣れていくのも良さそうです。