普段は Chef でレシピを書いているのですが、Itamae Meetup #1 に向けて Itamae を触ってみました。
エージェントレスで実行できるのは魅力ですね。
AWS EC2 上で Itamae を使ってみようとしたのですが、Amazon Linux のバージョンが上がったからか、いくつかつまずきポイントがありました。
「これだけやれば EC2 上で使える!」というまとめがなかったので書いてみます。
前提
- Amazon Linux AMI release 2015.09
- リモート実行するために、同じVPC、同じサブネット内に EC2 を2つ立てています。
- Itamae をインストール/レシピを保持するサーバ
- Itamae レシピを適用されるサーバ
Install
片方のサーバに Itamae をインストールしてみます。
io-console をインストールしないと、
/usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in require: cannot load such file -- io/console (LoadError)
と怒られます。
[ec2-user@ip-172-31-31-189 ~]$ sudo gem install itamae
Fetching: thor-0.19.1.gem (100%)
Successfully installed thor-0.19.1
Fetching: net-ssh-2.9.2.gem (100%)
...
Installing ri documentation for itamae-1.8.0
Done installing documentation for thor, net-ssh, net-scp, net-telnet, sfl, specinfra, hashie, ansi, schash, itamae after 8 seconds
10 gems installed
[ec2-user@ip-172-31-31-189 ~]$ sudo yum install ruby-devel gcc-c++
読み込んだプラグイン:priorities, update-motd, upgrade-helper
amzn-main/latest
rch 0:4.8.3-3.20.amzn1 ruby-devel.noarch 1:2.0-0.3.amzn1
...
依存性関連をインストールしました:
cpp48.x86_64 0:4.8.3-9.109.amzn1 gcc.noarch 0:4.8.3-3.20.amzn1
gcc48.x86_64 0:4.8.3-9.109.amzn1 gcc48-c++.x86_64 0:4.8.3-9.109.amzn1
glibc-devel.x86_64 0:2.17-78.161.amzn1 glibc-headers.x86_64 0:2.17-78.161.amzn1
kernel-headers.x86_64 0:4.1.13-18.26.amzn1 libgomp.x86_64 0:4.8.3-9.109.amzn1
libmpc.x86_64 0:1.0.1-3.3.amzn1 libstdc++48-devel.x86_64 0:4.8.3-9.109.amzn1
mpfr.x86_64 0:3.1.1-4.14.amzn1 ruby20-devel.x86_64 0:2.0.0.647-1.28.amzn1
完了しました!
[ec2-user@ip-172-31-31-189 ~]$ sudo gem install io-console
Building native extensions. This could take a while...
Successfully installed io-console-0.4.2
Parsing documentation for io-console-0.4.2
Installing ri documentation for io-console-0.4.2
Done installing documentation for io-console after 0 seconds
1 gem installed
レシピの作成
今回は Git をインストールするためのレシピを書きます。
package "git" do
action :install
end
ローカル実行する
Gitがインストールされていないことを確認します。
[ec2-user@ip-172-31-31-189 ~]$ git --version
-bash: git: コマンドが見つかりません
ローカルにレシピ適用してみます。
[ec2-user@ip-172-31-31-189 ~]$ sudo /usr/local/bin/itamae local git.rb
INFO : Starting Itamae...
INFO : Recipe: /home/ec2-user/git.rb
INFO : package[git] installed will change from 'false' to 'true'
インストールされているようです。↓
[ec2-user@ip-172-31-31-189 ~]$ git --version
git version 2.4.3
リモートサーバにレシピ適用する
リモートサーバにSSHし、Gitがインストールされていないことを確認します。
[ec2-user@ip-172-31-31-189 ~]$ ssh -i hoge.key ec2-user@52.193.5.33
Last login: Tue Dec 8 17:06:28 2015 from 52.192.181.173
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/
3 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-31-190 ~]$ git --version
-bash: git: コマンドが見つかりません
このサーバに対してレシピを実行します。
[ec2-user@ip-172-31-31-189 ~]$ sudo /usr/local/bin/itamae ssh -h 52.193.5.33 -i hoge.key -u ec2-user git.rb
INFO : Starting Itamae...
INFO : Recipe: /home/ec2-user/git.rb
INFO : package[git] installed will change from 'false' to 'true'
うまくレシピ適用できているようです。↓
[ec2-user@ip-172-31-31-189 ~]$ ssh -i hoge.key ec2-user@52.193.5.33
Last login: Tue Dec 8 17:06:28 2015 from 52.192.181.173
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/
3 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-31-190 ~]$ git --version
git version 2.4.3
まとめ
Itamae の EC2 へのインストール、EC2 へのレシピ適用ができました。
パスを通したりなど細かい話はいったん置いておいて、最低限使えるところまで。
Chef のレシピはそのまま移行できるのかなど細かいことは分かっていないので色々試していきたいです。