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と通信するための環境ファイル用のディレクトリ作成
この後、.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が立ち上がる。
メモ書