※個人用まとめ※
はじめに
構成管理ツールとは
サーバ構築を自動化するためのツールです。
繰り返し行うような構築作業の手間と時間を減らすことや人為的ミスの防止、構築の可視化などが導入する目的となります。
また、構築手順を記述したもの(Recipeやplaybook)をGit等で管理することでサーバ設定の変更履歴を管理したり、属人化を防ぐといったメリットもあります。
Chef, Ansible, puppetなどが有名です。
用語の定義
以下の通り用語を定義します。
- ローカルPC : 構成管理用のファイル/ディレクトリの作成等を行う端末
- 管理サーバ : 構成管理用のファイル/ディレクトリ等を管理するサーバ
- クライアントサーバ : 構成管理対象のサーバ(構成管理をされる側)
この記事の内容について
- 諸事情により「Chef」と「Ansible」に絞って記載します。他のツールについては記載しません。
- 「構成管理ツールを導入するためには何が必要か?」ということを調査の目的としていたため、ChefとAnsibleを動作させる環境ができるまでの手順をまとめることをゴールとしています。そのため、Recipeやplaybookの具体的な書き方等には触れません。
Chef、Ansibleの導入に必要なもの
■Chef
公式サイトhttps://docs.chef.io/index.html
基本構成
無理やり図にすると下記のような形。
|--- Node(クライアントサーバ)【Chef-client】---|
|--- Node(クライアントサーバ)【Chef-client】---|```
参考サイト: https://codezine.jp/article/detail/7484 ←こちらの図の方が分かりやすいです。
### 必要なもの、作業
1. sshのインストール(ローカルPC、クライアントサーバ)※クラウド環境では不要と思われる
1. sudo可能なユーザを作成(クライアントサーバ)
1. sudoユーザが管理サーバへsshで接続できるように設定(クライアントサーバ -> 管理サーバ)
1. Rubyの動作環境を構築(クライアントサーバ、管理サーバ)
1. Chef-Zeroをインストール(ローカルPC)、もしくはChef-Serverをインストール(管理サーバ)、もしくはChefのHosted型を契約(管理サーバ)
※「Chefの種類」参照。Chef-Zeroの場合はローカルPCと管理サーバは同じものになります。
1. Chef-Clientをインストール(クライアントサーバ)
1. Knifeのインストール(クライアントサーバ、ローカルPC) ※ KnifeはChefをコマンドラインから操作するためのプラグインです。
1. kitchen(chefのリポジトリ)を作成(ローカルPC)
```$ chef generate repo <cookbookを置くディレクトリ>```
kitchen (キッチン) > cookbooks(クックブック) > Recipeレシピ という階層になります。
1. Recipeの作成
1. クライアントサーバにRecipeを実行する
```knife zero -c conf.rb chef_client 'name:[ホスト名]' -x [ユーザ名] -i [公開鍵]```
### Chefの種類
- Chef Hosted: 管理画面あり。無料で5ノードまで利用可。Chef社によるSaaSモデルの提供。※公式の推奨。サポート付らしい。
- Chef Server: 管理画面あり。無料で25ノードまで利用可。オープンソース。クライアントーサーバ型。※こちらも別料金でアドオンやサポートが付く。
- Chef Zero: ローカルで動作するインメモリのChefServer。※公式でテスト運用を推奨とされている。
- Chef-provisioning:クラスタをプロビジョニングするためのツール。機能的に構成管理もやろうと思えばできる。ただし、サポートされているプラットフォームが少ない(クラウドはAWSとGCPが対応予定という程度)。
- Chef Solo:今までは単一で動作する環境として提供されていたが、まもなく非推奨となる。
## Ansible
### 公式サイト
http://docs.ansible.com/ansible/
### 基本構成
管理サーバ(=ローカルPC)
|---> クライアントサーバ
|---> クライアントサーバ
### 必要なもの、作業
1. sshをインストール(管理サーバ、クライアントサーバ)※クラウド環境では不要と思われる
1. Pythonの動作環境を構築(クライアントサーバ、管理サーバ)※Linux系はデフォルトで動作する場合が多いので不要かもしれない。
※2016/7/4追記:CentOSにデフォルトで入っているpythonのバージョンは2.6だったので、python 2.7以上が必要なansibleはデフォルトでは動作しないようです。
1. sudo可能なユーザを作成(クライアントサーバ)
1. 管理サーバからsudoユーザへsshで接続できるように設定(管理サーバ -> クライアントサーバ)
1. ansibleをインストール(管理サーバ)
1. playbookの作成
1. インベントリファイル(サーバ情報やSSHの接続情報等を定義するファイル)の作成
1. 管理サーバでplaybookを実行する
```ansible-playbook -i [インベントリファイル名] [playbookの実行ファイル名]```
### その他
- Ansibleは元々GitHubで開発されていたオープンソースのアプリケーションです。
Ansible本体のライセンスはGPL v3です。公開されているパッケージを利用するだけであれば特に制約はありません。
※ただし、本体のソースコードに手を加え、Ansibleを含んだツールやプロダクト販売する場合には制約があるようです。
参考ページ: https://github.com/ansible/ansible/blob/devel/COPYING
- 2015年にRedHatに買収されました。それにより、サポートやコンサルティングに関連した有料プランが提供されています。