MySQL5.6のchefの書き方の決定版が出来たので公開する。
chefでサーバーの構築をプログラマブルにやるっていうのはもうだいぶ昔から定番になってきています。
今回は特にMySQL 5.6のインストールをchefで行う場合のケースについて書いていきます。
MySQL5.6はインストールがなかなかめんどくさく、chefを使わなくても結構大変です。
だがしかし、度重なる試行錯誤の末、ついにMySQL5.6をchefでインストールする決定版が出来たため、公開しようと思います!
ただし、今回はEC2 + RDS等、webサーバーとDBサーバーを分けて、かつEC2(webサーバー)のみにMySQL5.6をインストールする場合のことを書いていきます。
ちなみにserverはCentOSを想定していますのでubuntuの方はすみません
- そもそもchefとは
- MySQL5.6を単純にインストールする場合
- MySQL5.6をchefでインストールする
- まとめ
そもそもchefとは
このブログでもなんども言及していますが、サーバー構築を自動化してくれるツールです。
chefserverをたてるケースや、chef soloを利用するケースがあります。
対象サーバーが1台くらいならばchef soloを利用しても構わないでしょう。
chef soloの使い方に関してはこちらの記事が役立ちます。
ChefでRaspberry Piをセットアップする - naoty.to_s
MySQL5.6を単純にインストールする場合
仮にchefを使わない場合こうなります。
cd /tmp wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-5.6.13-1.el6.x86_64.rpm-bundle.tar tar xf MySQL-5.6.13-1.el6.x86_64.rpm-bundle.tar sudo yum remove mysql mysql-server sudo yum localinstall MySQL-shared-compat-5.6.13-1.el6.x86_64.rpm sudo yum localinstall MySQL-shared-5.6.13-1.el6.x86_64.rpm sudo yum localinstall MySQL-server-5.6.13-1.el6.x86_64.rpm sudo yum localinstall MySQL-devel-5.6.13-1.el6.x86_64.rpm sudo yum localinstall MySQL-client-5.6.13-1.el6.x86_64.rpm sudo cat /root/.mysql_secret /etc/init.d/mysql start mysql -u root -p set password = PASSWORD('password');
ざーっと殴り書きですがこんな感じ。
RPMパッケージをwgetで取得し、tarで解凍。
それぞれyumでinstallします。
ちなみにこれはMySQL serverもインストールする場合。
今回のケースはMySQL-client, MySQL-devel, MYSQL-shareのみでオッケーです。
MySQL5.6をchefでインストールする
まず最低限の構造は次のようになります
mysql/
/attributes
default.rb
/recipes
default.rb
このような構造
まずattributesから説明します
attributes/default.rbは次のようになります
default['mysql']['versions'] = "5.6.13-1.el6.x86_64" default['mysql']['file_name'] = "MySQL-5.6.13-1.el6.x86_64.rpm-bundle.tar" default['mysql']['remote_uri'] = "http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-5.6.13-1.el6.x86_64.rpm-bundle.tar" default['mysql']['rpm'] = [ { :rpm_file => "MySQL-client-5.6.13-1.el6.x86_64.rpm", :package_name => "MySQL-client" }, { :rpm_file => "MySQL-devel-5.6.13-1.el6.x86_64.rpm", :package_name => "MySQL-devel" }, { :rpm_file => "MySQL-shared-5.6.13-1.el6.x86_64.rpm", :package_name => "MySQL-shared" } ]
とりあえずここはこんな感じでコピペしてしまうとよいでしょう。
ポイントは基本的にパッケージやRPMのURLなんかはattributesに書いておくとよいでしょう。
次はrecipes/default.rbです
remote_file "/tmp/#{node['mysql']['file_name']}" do source "#{node['mysql']['remote_uri']}" end bash "install_mysql" do user "root" cwd "/tmp" code <<-EOH tar xf "#{node['mysql']['file_name']}" EOH end node['mysql']['rpm'].each do |rpm| package rpm[:package_name] do action :install provider Chef::Provider::Package::Rpm source "/tmp/#{rpm[:rpm_file]}" end end
というわけでたったこれだけで出来ます!
recipes/default.rbから説明すると
まずrpmパッケージをインストールします。
remote_file "/tmp/#{node['mysql']['file_name']}" do source "#{node['mysql']['remote_uri']}" end
ここはchefを使わない場合の
cd /tmp wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-5.6.13-1.el6.x86_64.rpm-bundle.tar
を表しています。
次にtarを解凍します。
bash "install_mysql" do user "root" cwd "/tmp" code <<-EOH tar xf "#{node['mysql']['file_name']}" EOH end
ここはbashというリソースを使います。
tar xf MySQL-5.6.13-1.el6.x86_64.rpm-bundle.tar
これを行っています。
ちなみにbashというリソースは万能ですが、
ここでwgetを行うとたびたび失敗します。
出来る奴もありますが、MySQL5.6に限っては確実に失敗します。
最後にインストールです。
node['mysql']['rpm'].each do |rpm| package rpm[:package_name] do action :install provider Chef::Provider::Package::Rpm source "/tmp/#{rpm[:rpm_file]}" end end
パッケージリソースにprovider Chef::Provider::Package::Rpmというオプションを使います。
これは
sudo yum localinstall MySQL-shared-5.6.13-1.el6.x86_64.rpm sudo yum localinstall MySQL-devel-5.6.13-1.el6.x86_64.rpm sudo yum localinstall MySQL-client-5.6.13-1.el6.x86_64.rpm
これを表します。
まとめ
というわけで色々な資料を参考に決定版を作成しました。
なんだかんだいって一番ためになるのはchefの公式ドキュメントだったりします。
あとはattributesにどんなことを書くかというのはポイントかと。
個人的にRPMのURLや、ファイル名バージョンなどはattributesに書くといいかと思います。
さらに最適化するならば、
versions = "5.6.13-1.el6.x86_64" default['mysql']['file_name'] = "MySQL-#{versions}.rpm-bundle.tar"
のような書き方もありかと思います。
chefってなかなか決定版がないので、これを気にオリジナルの決定版を探っていくとよいかと思います。
とりあえずMySQL5.6のchefに関しては今回の記事を参考にしていただけると幸いです!
参考図書
chefの基本ならこれ!
入門Chef Solo - Infrastructure as Code
- 作者: 伊藤直也
- 出版社/メーカー: 伊藤直也
- 発売日: 2013/03/11
- メディア: Kindle版
- 購入: 16人 クリック: 1,027回
- この商品を含むブログ (16件) を見る