Chef ClientだけでNginxをインストールして起動するまでの最小限の流れ

Chef DKのインストールはしない。
当然 chef generateknife cookbook create も使わない。

Chef ClientだけでNginxをインストールして起動までやる。

Chef Downloads

今回はAmazon Linux 2のEC2インスタンスを用意した。

まずはChef Clientのインストール。

$ sudo yum update -y
$ wget https://packages.chef.io/files/stable/chef/13.7.16/el/7/chef-13.7.16-1.el7.x86_64.rpm
$ sudo rpm -ivh chef-13.7.16-1.el7.x86_64.rpm
$ chef-client --version
$ rm chef-13.7.16-1.el7.x86_64.rpm

Chef Clientのインストールが終わったらRecipeを手動で作っていく。

先にディレクトリを準備。

$ mkdir chef-example-repository
$ cd chef-example-repository
$ mkdir -p cookbooks/nginx/recipes
$ mkdir roles

Roleの作成。

$ vim roles/web.json

こんな感じで記述。

{
  "run_list": [
    "recipe[nginx]"
  ]
}

Recipeの作成。

$ vim cookbooks/nginx/recipes/default.rb

Amazon Linux 2は最初の状態だとNginxがyumでインストールできない。

dev.classmethod.jp

なので、ここでは bash リソースを使って code に直接コマンドを書く。

bash 'install nginx' do
  code 'sudo amazon-linux-extras install nginx1.12'
  not_if { File.exists?("/usr/sbin/nginx") }
end

bash 'start nginx' do
  code <<-EOC
    sudo systemctl start nginx.service
    sudo systemctl enable nginx.service
  EOC
end

作成できたら --why-run で実行内容を確認して、問題なければ実行。

$ chef-client -z -j roles/web.json --why-run
$ chef-client -z -j roles/web.json

Nginxの起動を確認できればOK。

$ systemctl status nginx.service
$ systemctl is-enabled nginx.service