Octopress Blog

自分のためのまとめブログ

シェフハンズオンセミナー

AWSのUbuntuでChefを動かす

デフォルトのAWSで用意されているUbuntuにChefをインストールする。
ハンズオンのインスタンスは必要なパッケージがすでにいくらかインストールされていたみたいなので トライアンドエラーで設定。

事前準備

Opscodeでアカウントを作成して鍵ファイルとknife.rbを事前にDLしておく。
AWSのインスタンスを利用できる状態にしておく。
AWSのaccess keyとsecret access keyを用意しておく。

AWSにChefクライアントをインストール

Ubuntu 12.04.2 LTSの64bitを選択

必要パッケージとChef クライアントのインストール

1
2
3
4
5
sudo apt-get update
sudo apt-get upgrade
curl -L http://www.opscode.com/chef/install.sh | sudo bash
#sudo apt-get install ruby git tree g++
sudo apt-get install (パッケージたくさん)

※ パッケージはハンズオンで入っていたパッケージを根こそぎ入れた。必要なパッケージは現在精査中。

Chefのgemは以下に入っていることを意識すること
-> デフォルトのgemを使うと残念なことになるらしい。

1
ls -ld /opt/chef/embedded/bin/gem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cd ~
git clone https://github.com/opscode/chef-repo.git
cd chef-repo
tree
.
├── chef-repo
│   ├── certificates
│   │   └── README.md
│   ├── chefignore
│   ├── config
│   │   └── rake.rb
│   ├── cookbooks
│   │   └── README.md
│   ├── data_bags
│   │   └── README.md
│   ├── environments
│   │   └── README.md
│   ├── LICENSE
│   ├── Rakefile
│   ├── README.md
│   └── roles
│       └── README.md
└── credentials.tgz

WorkstationとしてChef serverと通信するための環境ファイル用のディレクトリ作成

1
mkdir .chef

この後、.chefにOpscodeからダウンロードした鍵とknife.rbをscpする。その後chef-repoディレクトリに移動して

1
2
knife client list
XXXX-validator

※ pemファイルをリネームしているとここでエラーが出てしまう。DLしたファイル名をそのまま使う。

knife-ec2インストール

先ほどのgemのPATHを意識すること!!

1
sudo /opt/chef/embedded/bin/gem install knife-ec2 --no-ri --no-rdoc

knife.rbにAWSアクセスするためのキーを記載する

1
2
3
4
# knife for AWS
knife[:aws_access_key_id]     = "XXXXXXXXXXXXXXX"
knife[:aws_secret_access_key] = "XXXXXXXXXXXXXXXXXXXXXXXXXX"
knife[:region] = "ap-northeast-1"

cookbookをWorkstationへclone

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
cd ~/chef-repo/cookbooks
git clone https://github.com/cl-lab-k/apache2-take.git
cd apache2-take
tree
.
├── attributes
│   └── default.rb     *重要
├── CHANGELOG.md
├── example
│   └── apache2-take-ubuntu.sh
├── files
│   └── default
│       └── tests
│           └── minitest
│               ├── default_test.rb
│               └── support
│                   └── helpers.rb
├── Gemfile
├── metadata.rb
├── README.md
├── recipes
│   └── default.rb     *重要
├── templates
│   └── default        *重要
│       ├── default.erb
│       ├── ports.conf.erb
│       └── twitter-search.html.erb
└── test
    └── kitchen
        └── Kitchenfile

手軽なcookbook

Apache2 install

※ 以下はスクリプトで実行した場合の例。Chefは使っていない。

script

1
2
cd ~/chef-repo/cookbooks/apache2-take/example/
sudo sh ./apache2-take-ubuntu.sh

スクリプトの内容は以下

  • Apache2のインストール&起動
  • Apache2のリクエスト待ち受けポートの変更
  • Apache2で”default”サイトを有効化
  • githubからサイト用コンテンツをclone
  • githubからサイト用コンテンツをダウンロード

同様のものをChefで処理

テスト

1
2
cd ~/chef-repo
knife cookbook test apache2-take

FoodCriticを使ったテスト

1
2
sudo /opt/chef/embedded/bin/gem install foodcritic --no-ri --no-rdoc
/opt/chef/embedded/bin/foodcritic cookbooks/apache2-take

このままだと以下の様なエラーが出る

1
2
FC008: Generated cookbook metadata needs updating: cookbooks/apache2-take/metadata.rb:2
FC008: Generated cookbook metadata needs updating: cookbooks/apache2-take/metadata.rb:3

ここでコードの内容を確認し、スタイルを修正する。

1
[DEPRECATION] "eval" is deprecated. Please use "evaluate" instead

これはバージョンのWarningっぽい。動くので今はスルー。

cookbookのアップロード

1
2
cd ~/chef-repo/cookbooks/apache2-take
knife cookbook upload apache2-take

EC2インスタンス起動

1
knife ec2 server create -S [key pair] -i [key file (XXX.pem)] -r "recipe[apache2-take]" -I ami-77cf4976 --flavor t1.micro -Z ap-northeast-1a -G [Security Group] -x ubuntu -N aws-handson -VV

これで新しいインスタンスが作成され、apacheが立ち上がる。

メモ書

  • コンバージョン(収束)させる
    -> あるべき状態になる、将来ありたい状態と現状を埋める仕組み

  • 98%の情報は下記のURLに存在する!
    http://docs.opscode.com/chef/resources.html