Ansible入門


AnsibleはSSH接続したサーバに対して、ミドルウェアのインストールや設定ファイルの更新を行うツールです。サーバの環境構築を行うためのツールで、SSH接続ができればサーバ側にエージェントのインストールが不要な点が特徴です。また、Ansibleは何回実行しても同じ状態になる「冪等性」も特徴といえます。

🐯 Ansibleの構成

Ansibleは「hostファイル」、「Playbook」、「モジュール」の3つの要素で成り立ちます。

hostsファイル

環境構築を行う先のホストを記述します。

[webservers]
www1.example.com
www2.example.com
[dbservers]
db0.example.com
db1.example.com

[セクション]でグループ化してホストを管理します。これによりホストの役割ごとに環境構築を行いやすくなります。

Playbook

Playbookはサーバの構築したい環境を定義するファイルです。「サーバの状態の定義」といえます。

---
- hosts: webservers
roles:
- common
- webapp
- hosts: dbservers
roles:
- common
- db_middleware

モジュール

モジュールはAnsibleの中でファイルのコピーやサービスの起動などを行うプラグインです。初期状態から入っている代表的なモジュールは次のとおりです。

モジュール名 説明
shell シェル上でコマンドを実行
file ファイルやディレクトリの作成、パーミッションの設定
lineinfile 指定ファイルの行単位の書き換え
copy ファイルの丸コピー
template テンプレートを利用したファイルのコピー
synchronize rsyncと同じ
get_url 指定URLからダウンロード
yum yumコマンド(パッケージの管理)
service serviceコマンド。chkconfigを兼ねる

🗻 BestPracticeのフォルダ・ファイル構成

公式ドキュメントのBestPracticeに沿ったAnsibleのフォルダ構成。

ディレクトリ名 説明
group_vars/ グループごとの変数を定義するのに使います
host_vers/ ホストごとの変数を定義するのに使います
roles/ ディレクトリの下にrole(役割)ごとのディレクトリを作成
roles/*/files/ 該当のRoleのTaskで使うファイルの置き場
roles/*/handlers/ 設定変更後にサービスを再起動させる場合などを定義。main.ymlが起点
roles/*/tasks/ インストールやフォルダ作成などtask定義をここに置きます。main.ymlが起点
roles/*/templates/ Jinja2というテンプレートエンジンを使ったファイルを置きます。拡張子は.j2
roles/*/vars/ roleごとに定義する変数を書いたファイルを置きます。main.ymlが起点
roles/*/defaults/ 該当roleで使う変数のデフォルト値を設定します。main.ymlが起点
roles/*/meta/ roleの依存設定を書きます
site.yml ansible-playbookコマンドに渡すplaybookファイル

🐠 Ansible実行前の文法チェック

--syntax-checkをつけることでYAMLに書かれた構文が間違っていないかをチェックできます。

ansible-playbook -i hosts チェック対象.yml --syntax-check

🗽 補足:hostファイル内で変数を設定できる

hostファイル内に変数を設定できます。

[app]
host1 do_something=true

site.ymlに次のように記述します。

- role: something
when: do_something

🐝 今後読む記事

🍄 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)