AnsibleはSSH接続したサーバに対して、ミドルウェアのインストールや設定ファイルの更新を行うツールです。サーバの環境構築を行うためのツールで、SSH接続ができればサーバ側にエージェントのインストールが不要な点が特徴です。また、Ansibleは何回実行しても同じ状態になる「冪等性」も特徴といえます。
🎉 Ansibleの構成
Ansibleは「hostファイル」、「Playbook」、「モジュール」の3つの要素で成り立ちます。
hostsファイル
環境構築を行う先のホストを記述します。
[webservers] |
[セクション]
でグループ化してホストを管理します。これによりホストの役割ごとに環境構築を行いやすくなります。
Playbook
Playbookはサーバの構築したい環境を定義するファイルです。「サーバの状態の定義」といえます。
|
モジュール
モジュールは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] |
site.yml
に次のように記述します。
- role: something |
🗻 今後読む記事
😎 参考リンク
- Ansible チュートリアル
- Ansible 入門
- bash - How to chmod +x a file with Ansible?
- Ansibleでユーザ追加とグループ作成方法
- How to create an empty file with Ansible?
- Ansible でファイル内に変数を使う場合は copy ではなく template で