【Chef】【CentOS7】初心者が Chef Solo をインストールして最初の cookbook を実行する手順【初心者向け】

初心者が Chef Solo を CentOS7 へインストールして最初の cookbook を実行する手順について解説しです。

 

最近、DevOps についていろんなアイデアを考えています。

大企業になるとサーバが数千台になることがあります。

しかしインフラエンジニアはほんの4~5人で設計・構築・運用をして回すということがあります。

しかも開発側から毎日のように今日中にDBサーバー6台、Webサーバ10台、アプリサーバ10台を構築してほしいというリクエストが来たりします。

こうなるとExcelファイルの手順書を紙で印刷して二人でダブルチェックをしながら、指差し確認をしながら構築していたら企業のサービスが完全に止まってしまします。

 

どうしても自動化したり、システム化をしたりせざるを得ない中で「Infrastructure as Code」が必要なってきます。

以前は Ansible と Serverspec を利用してインフラ構築をしていましたが、今回は Chef(Chef Solo)を試してみます。

 

 

 

 

環境

以下の環境に Chef Solo 環境を構築します。

[root@CentOS7 ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@CentOS7 ~]#

 

 

 

 

ChefDK をインストールする

様々なサイトを調べると Chef のインストール手順で以下のコマンドを実行するケースが多くみられます。

curl -L https://www.opscode.com/chef/install.sh | bash 

 

私も以下のように「https://www.opscode.com/chef/install.sh」を実行して Chef をインストールしました。

特にエラーは出てないので、問題ないと思っていましたが、knife コマンドでクックブック(cookbook)を作成するとエラーになりました。

[root@CentOS7 ~]# curl -L https://www.opscode.com/chef/install.sh | bash 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
                                 Dload  Upload   Total   Spent    Left  Speed 
100 23554  100 23554    0     0  35413      0 –:–:– –:–:– –:–:– 35419 
el 7 x86_64 
Getting information for chef stable  for el… 
downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=&p=el&pv=7&m=x86_64 
  to file /tmp/install.sh.1851/metadata.txt 
trying wget… 
sha1    599b3294c243e362ca77fb89a723c42fc29dae68 
sha256  ccf3b233b2e971a9fde360b6c9a3536ad31369c6c0c256b1f7619650c03695ab 
url     https://packages.chef.io/files/stable/chef/16.1.16/el/7/chef-16.1.16-1.el7.x86_64.rpm 
version 16.1.16 
downloaded metadata file looks valid… 
downloading https://packages.chef.io/files/stable/chef/16.1.16/el/7/chef-16.1.16-1.el7.x86_64.rpm 
  to file /tmp/install.sh.1851/chef-16.1.16-1.el7.x86_64.rpm 
trying wget… 
Comparing checksum with sha256sum… 
 
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 
 
You are installing a package without a version pin.  If you are installing 
on production servers via an automated process this is DANGEROUS and you will 
be upgraded without warning on new releases, even to new major releases. 
Letting the version float is only appropriate in desktop, test, development or 
CI/CD environments. 
 
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 
 
Installing chef 
installing with rpm… 
警告: /tmp/install.sh.1851/chef-16.1.16-1.el7.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 83ef826a: NOKEY 
準備しています…              ################################# [100%] 
更新中 / インストール中… 
   1:chef-16.1.16-1.el7               ################################# [100%] 
Thank you for installing Chef Infra Client! For help getting started visit https://learn.chef.io 
[root@CentOS7 ~]# 

 

 

その後、knife コマンドでクックブックを作成すると以下のようにエラーになりました。

[root@CentOS7 chef-repo]# knife cookbook create hello -o cookbooks 
FATAL: Cannot find subcommand for: ‘cookbook create hello -o cookbooks’ ← エラーになった。 
Available cookbook subcommands: (for details, knife SUB-COMMAND –help) 
 
** COOKBOOK COMMANDS ** 
knife cookbook bulk delete REGEX (options) 
knife cookbook delete COOKBOOK VERSION (options) 
knife cookbook download COOKBOOK [VERSION] (options) 
knife cookbook list (options) 
knife cookbook metadata COOKBOOK (options) 
knife cookbook metadata from file FILE (options) 
knife cookbook show COOKBOOK [VERSION] [PART] [FILENAME] (options) 
knife cookbook upload [COOKBOOKS…] (options) 
 
[root@CentOS7 chef-repo]# 

 

 

上記のような「FATAL: Cannot find subcommand for: ‘~’」のエラーになるケースは多々あるようで、対策としては最初から「ChefDK」をインストールすることで上記エラーを回避できるようです。

 

 

 

ChefDK をダウンロードする

以下のサイトより ChefDK をダウンロードできます。

 

■ChefDKのダウンロードサイト

https://downloads.chef.io/

 

ChefDKの「Get it」ボタンをクリックします。

 

 

 

今回は CentOS7 にインストールするので「Red Hat Enterprise Linux 7」「Download」ボタンをクリックします。

 

 

 

ダウンロードした rpm ファイルをサーバにアップロードします。

 

 

 

 

chefDK をインストールする

yum コマンドでインストールします。

[root@CentOS7 ~]# yum install chefdk-4.8.23-1.el7.x86_64.rpm

 

Chefのバージョンを確認します。

[root@CentOS7 ~]# chef -v 
ChefDK version: 4.8.23 
Chef Infra Client version: 15.11.8 
Chef InSpec version: 4.19.0 
Test Kitchen version: 2.5.1 
Foodcritic version: 16.2.0 
Cookstyle version: 5.23.0 
[root@CentOS7 ~]#

 

chef-solo コマンドからでもバージョン確認ができます。

[root@CentOS7 ~]# chef-solo -v 
Chef Infra Client: 15.11.8 
[root@CentOS7 ~]#

 

 

 

 

chef-solo コマンドを実行する

全体的には以下の流れとなります。

  1. cookbook(クックブック)を作成する
  2. recipe(レシピ)を書く
  3. chef-solo コマンドを実行する

 

Chef の cookbook 用のディレクトリを作成します。

※ディレクトリは /var/chef/cookbooks に作成します。異なるディレクトリに作成すると chef-solo コマンドを実行するとエラーになるので注意。

 

[root@CentOS7 ~]# mkdir -p /var/chef/cookbooks

 

 

chef ディレクトリに移動します。

[root@CentOS7 chef]# cd /var/chef/

 

 

chef generate コマンドで cookbook を作成します。

古いバージョンの場合は、knife cookbook create コマンドで作成しますが、最新のバージョン(15)の場合は chef generate コマンドになります。

chef generate cookbook コマンドで単一の cookbook を作成します。

 

■cookbooks ディレクトリに hello という名前の cookbook を作成

[root@CentOS7 chef]# chef generate cookbook cookbooks/hello
Generating cookbook hello 
– Ensuring correct cookbook content 
 
Your cookbook is ready. Type `cd cookbooks/hello` to enter it. 
 
There are several commands you can run to get started locally developing and testing your cookbook. 
Type `delivery local –help` to see a full list of local testing commands. 
 
Why not start by writing an InSpec test? Tests for the default recipe are stored at: 
 
test/integration/default/default_test.rb 
 
If you’d prefer to dive right in, the default recipe can be found at: 
 
recipes/default.rb 
 
[root@CentOS7 chef]#

 

 

 

chef generate コマンド一覧です。

[root@CentOS7 chef]# chef generate 
Usage: chef generate GENERATOR [options] 
 
Available generators: 
  cookbook        Generate a single cookbook 
  recipe          Generate a new recipe 
  attribute       Generate an attributes file 
  template        Generate a file template 
  file            Generate a cookbook file 
  helpers         Generate a cookbook helper file in libraries 
  resource        Generate a custom resource 
  repo            Generate a Chef Infra code repository 
  policyfile      Generate a Policyfile for use with the install/push commands 
  generator       Copy ChefDK’s generator cookbook so you can customize it 
  build-cookbook  Generate a build cookbook for use with Chef Workflow (Delivery) 
 
[root@CentOS7 chef]#

 

 

 

recipes ディレクトリに移動します。

[root@CentOS7 chef]# cd cookbooks/hello/recipes/

 

 

default.rb ファイルを編集します。

[root@CentOS7 recipes]# vi default.rb 

# Cookbook:: hello 
# Recipe:: default 

# Copyright:: 2020, The Authors, All Rights Reserved. 
log “hello world!” ← 追加します。

 

 

cookbook を指定して chef-solo コマンドを実行します。

[root@CentOS7 recipes]# chef-solo -o hello 
[2020-06-07T11:15:16+09:00] WARN: No config file found or specified on command line. Using command line options instead. 
[2020-06-07T11:15:16+09:00] WARN: ***************************************** 
[2020-06-07T11:15:16+09:00] WARN: Did not find config file: /etc/chef/client.rb. Using command line options instead. 
[2020-06-07T11:15:16+09:00] WARN: ***************************************** 
Starting Chef Infra Client, version 15.11.8 
[2020-06-07T11:15:18+09:00] WARN: Run List override has been provided. 
[2020-06-07T11:15:18+09:00] WARN: Original Run List: [] 
[2020-06-07T11:15:18+09:00] WARN: Overridden Run List: [recipe[hello]] 
resolving cookbooks for run list: [“hello”] 
Synchronizing Cookbooks: 
  – hello (0.1.0) 
Installing Cookbook Gems: 
Compiling Cookbooks… 
Converging 1 resources 
Recipe: hello::default 
  * log[hello world!] action write 
 
[2020-06-07T11:15:18+09:00] WARN: Skipping final node save because override_runlist was given 
 
Running handlers: 
Running handlers complete 
Chef Infra Client finished, 1/1 resources updated in 01 seconds 
[root@CentOS7 recipes]#

 

 

 

CentOS7 に nslookupコマンドをインストールする

次に CentOS7 に nslookup コマンドをインストールしてみます。

デフォルトでは CentOS7 には nslookup コマンドはインストールされていません。(その代わり名前解決の確認をする場合は dig コマンドを使用します。)

[root@CentOS7 recipes]# nslookup 
-bash: nslookup: コマンドが見つかりません 
[root@CentOS7 recipes]#

 

 

cookbook を作成します。

[root@CentOS7 chef]# chef generate cookbook cookbooks/bind-utils

 

 

recipes ディレクトリに移動します。

[root@CentOS7 chef]# cd cookbooks/bind-utils/recipes/

 

 

default.rb ファイルを編集します。

[root@CentOS7 recipes]# vi default.rb 

# Cookbook:: bind-utils 
# Recipe:: default 

# Copyright:: 2020, The Authors, All Rights Reserved. 
 
package “bind-utils” do 
  action :install 
end

 

 

 

 

chef-solo コマンドを実行します。

[root@CentOS7 recipes]# chef-solo -o bind-utils 
[2020-06-07T12:06:27+09:00] WARN: No config file found or specified on command line. Using command line options instead. 
[2020-06-07T12:06:27+09:00] WARN: ***************************************** 
[2020-06-07T12:06:27+09:00] WARN: Did not find config file: /etc/chef/client.rb. Using command line options instead. 
[2020-06-07T12:06:27+09:00] WARN: ***************************************** 
Starting Chef Infra Client, version 15.11.8 
[2020-06-07T12:06:29+09:00] WARN: Run List override has been provided. 
[2020-06-07T12:06:29+09:00] WARN: Original Run List: [] 
[2020-06-07T12:06:29+09:00] WARN: Overridden Run List: [recipe[bind-utils]] 
resolving cookbooks for run list: [“bind-utils”] 
Synchronizing Cookbooks: 
  – bind-utils (0.1.0) 
Installing Cookbook Gems: 
Compiling Cookbooks… 
Converging 1 resources 
Recipe: bind-utils::default 
  * yum_package[bind-utils] action install 
    – install version 32:9.11.4-16.P2.el7_8.6.x86_64 of package bind-utils 
[2020-06-07T12:06:40+09:00] WARN: Skipping final node save because override_runlist was given 
 
Running handlers: 
Running handlers complete 
Chef Infra Client finished, 1/1 resources updated in 12 seconds 
[root@CentOS7 recipes]#

 

 

 

動作確認をします。

[root@CentOS7 chef]# nslookup google.co.jp 
Server:         172.31.0.2 
Address:        172.31.0.2#53 
 
Non-authoritative answer: 
Name:   google.co.jp 
Address: 172.217.175.67 
Name:   google.co.jp 
Address: 2404:6800:4004:807::2003 
 
[root@CentOS7 chef]#

 

 

 

 

 

参考にしたサイト

初めて Chef に触ってパッケージ導入まで進めましたが、以下のサイトを参考にしました。

Chef Solo入門

 

 

参考にした本

以下の本でレシピの書き方や Chef の仕組みの勉強しました。

 

 

Chef実践入門――コードによるインフラ構成の自動化 WEB+DB PRESS plus

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください