LoginSignup
13

More than 5 years have passed since last update.

Amazon Linux 2015.03 に chef を適用したらコケてハマった件

Last updated at Posted at 2015-03-25

はじめに

最新の Amazon Linux 2015.03 の EC2 に対して、以前に作成した chef を適用したらコケてしまい、
ハマってしまって、色々と調べて何とか解決したときの自分用のメモです。( 後述するが実は 2014.09 だった )

今回適用した chef の recipe は、Amazon Linux 2014.03 で構築した際に作成したもの

下記がエラーが出た時の出力内容

$ knife solo cook ec2-user@hogehoge.com -i ~/.ssh/hogehoge.pem
・
・
・
省略
・
・
[2015-03-25T06:18:57+00:00] ERROR: Running exception handlers
[2015-03-25T06:18:57+00:00] ERROR: Exception handlers complete
[2015-03-25T06:18:57+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 13 resources updated
[2015-03-25T06:18:57+00:00] ERROR: mysql_client[default] (mysql::client line 20) had an error: Mixlib::ShellOut::ShellCommandFailed: package[mysql-devel] (/home/ec2-user/chef-solo/cookbooks-2/mysql/libraries/provider_mysql_client_rhel.rb line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of /usr/bin/python /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/provider/package/yum-dump.py --installed ----
STDOUT:
STDERR: Traceback (most recent call last):
  File "/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/provider/package/yum-dump.py", line 36, in <module>
    import yum
ImportError: No module named yum
---- End output of /usr/bin/python /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/provider/package/yum-dump.py --installed ----
Ran /usr/bin/python /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/provider/package/yum-dump.py --installed returned 1
[2015-03-25T06:18:57+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
ERROR: RuntimeError: chef-solo failed. See output above.

mysql::client のインストールでエラー
python の実行に失敗している様子

対応内容 ( 第1次 )

以前にも、mysql がインストール出来ない場合があり、その時は、アマゾンの新しいバージョンが認識できないために起こっていたため、
cookbooks の update で解決できるかと思い、まず update

$ berks update

cookbook を update したので再度 knife cook すると、今度は、最初の package のインストール時点でエラーが発生…

しかも同じ python ( yum-dump.py ) の実行エラーだった

この時点から調査開始

調査結果

ググってみると、古い記事だが同じように import yum でコケてる人がいるみたい

-c でそのまま コマンドを実行できるみたいなので、サーバーで試してみる

[ec2-user@hogehoge.com ~]$ python -c "import yum"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named yum

うん。やっぱりエラー
記事の Reply に alternatives を変更しろとあったので、そもそも alternatives を確認

[ec2-user@hogehoge.com ~]$ ls -al /usr/bin/python
lrwxrwxrwx 1 root root 24  3月 25 06:18 /usr/bin/python -> /etc/alternatives/python
[ec2-user@hogehoge.com ~]$ ls -al /etc/alternatives/python
lrwxrwxrwx 1 root root 18  3月 25 06:18 /etc/alternatives/python -> /usr/bin/python2.6

2.6 になっている
python2.7 もあったので、import yum を試してみたらエラーが出なかった

[ec2-user@hogehoge.com ~]$ /usr/bin/python2.6 -c "import yum"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named yum
[ec2-user@hogehoge.com ~]$ /usr/bin/python2.7 -c "import yum"
[ec2-user@hogehoge.com ~]$

そもそも以前の 2014.03 のサーバーには、python2.7 なんて無かったので、更にググる

そうすると新しい 2015.05 では、python の 2.7 デフォルトになっているみたい
http://aws.amazon.com/jp/amazon-linux-ami/2015.03-release-notes/
http://dev.classmethod.jp/cloud/aws/amazon-linux-ami-2015-03/

しかも、2.6 使う場合は、別途インストールが必要とある

けど、今回の構築した ec2 には 2.6 が入っている…何故????

色々調べた結果、構築した ec2 は 2015.03 と思っていたが、
使用した AMI を確認すると、amzn-ami-hvm-2014.09.2.x86_64-ebs だった

結論としては、実行した recipe の最初で yum update していたことを忘れていて、それにより 2014.09 から
2015.03 に update され、python2.7 が追加され、2014.09 時点で入っていた 2.6 が残っていると判断した

てか、そもそも、yum update で Amazon Linux のバージョンが変わることを知らなかった…恥ずかしい

対応内容 ( 第2次 - 最終 )

/usr/bin/python の向き先が、python2.6 になっているので、2015.03 のデフォルトである python2.7 に変更

[ec2-user@hogehoge.com ~]$ sudo alternatives --set python /usr/bin/python2.7

再度 knife solo cook を実行すると、正常に実行できた

まとめ

ec2 で yum update すると最新バージョンにアップデートされてしまう
 バージョン固定する方法もあるみたい

ec2 の最新バージョンを使用するのは慎重に
 今回は、yum update により意図せず最新になってしまった…
 以前も、最新のバージョンが chef の recipe が対応しておらずハマったことがあるので

chef の導入よってサーバーの状態は固定化できるが、そもそも EC2 自体が最新バージョンを利用することを推奨しているため、その運用を行うと recipe のメンテが結構必要になる
 なんだかんだ同じ構成のサーバーを構築する際には、毎回何かしら recipe の修正 ( cookbook の update ) が入る

結局 python2.6 で何故動かなかったかの原因はわからずじまい
 2.6 の再インストールが必要??

 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13