LoginSignup
7
5

More than 1 year has passed since last update.

【備忘録】Ansibleの仕組みを整理する

Last updated at Posted at 2021-01-03

本記事の目的

社内でのDevOps検証に合わせて、Ansibleの基礎知識を学び、アウトプットとして備忘録を記す。
本記事ではAnsibleのインベントリ、プレイブック、コンフィグの概念について説明する。

インベントリ

1. インベントリとは

  • インベントリ:ターゲットノードをリストして記載するファイル。

2. 接続情報

  • コントロールノード:インベントリとプレイブックを使用して、処理の指示を出す。
  • ターゲットノード:コントロールノードの指示を受けて、処理を実施する。インベントリで、IPアドレスまたはホスト名を記載する事で定義する。
    • グループ:同一の処理を実施するターゲットノード群。インベントリで、"[ ]"でグループ名を囲み、その下にターゲットノードを記載する事で定義する。
  • インベントリ例
inventory
[web_servers]
apache-01
apache-02

[db_servers]
mysql-01
mysql-02

3. 接続変数

  • ターゲットノードへの接続を制御するための変数。インベントリでは、ターゲットノードの後ろに記載する事で定義できる。主な接続変数は以下の通り。
接続変数名 設定内容
ansible_connection ターゲットノードへの接続方法。Linuxサーバに接続する場合は主にssh、Windowsサーバに接続する場合は主にwinrmの値を設定する。
ansible_host ターゲットノードのホスト名及びエイリアス名。
ansible_port ターゲットノードのリモート接続ポート。デフォルトは22
ansible_user ターゲットノードへのリモート接続で使用するユーザー名。
ansible_password ターゲットノードへのリモート接続で使用するパスワード。
  • インベントリ例
inventory
[web_servers]
apache-01 ansible_connection=ssh ansible_host=192.168.6.161 ansible_user=root ansible_password=Password
apache-02 ansible_connection=winrm ansible_host=192.168.6.162 ansible_user=administrator ansible_password=Password

プレイブック

1. プレイブックとは

  • プレイブック:ターゲットノード側で実行したい処理の流れを記載するファイル。
  • セクション:プレイブック内での処理のまとまり。
  • ディレクティブ:セクション内で定義されるキー項目。

2. 主要セクション/ディレクティブ

  • Targetセクション:ターゲットノードを特定する。プレイブックでは接続ディレクティブで定義する。主な接続ディレクティブは以下の通り。
ディレクティブ名 設定内容
hosts ターゲットノードの接続パターン。基本的にはインベントリファイルで定義したターゲットノード及びインベントリグループを指定する。
gather_facts ターゲットノードでの情報取得の有無。trueまたはfalseを指定する。
  • Tasksセクション:処理を実行するセクション。プレイブックではtasksディレクティブで定義する。また、tasksディレクティブではモジュール(Ansibleの処理用コンポーネント)を使用する事ができる。主なモジュールは以下の通り。
モジュール名 設定内容
command 指定したコマンドを実施する。
script 指定したスクリプトを実施する。
yum/apt nameでパッケージ名を指定し、stateで状態を指定する事で、指定したパッケージの状態を定義する。主にパッケージの導入/削除に用いられる。
service nameでサービス名を指定し、stateで状態を指定する事で、指定したサービスの状態を定義する。主にサービスの起動/停止に用いられる。
lineinfile pathで指定されたファイル内でlineで指定された文を検索し、存在しない場合は該当する文の書き換えまたは追記を実施する。
  • Varsセクション:変数を設定する。プレイブックでは変数ディレクティブで定義する。主な変数ディレクティブは以下の通り。
ディレクティブ名 設定内容
vars 基本的な変数を定義する。Jinja2(Python用のテンプレートエンジン)を利用し、"{{}}"の記号を用いて定義する場合が多い。
var_files 変数情報を管理しているファイルを定義する。
  • プレイブック例①
playbook.yml
hosts: web_servers
gather_facts: true
tasks: 
  - name: Execute command 'date'
    command: date
  - name: Execute script on server
    script: test_script.sh
  - name: Execute script on server
    script: test_script.sh
  - name: Install httpd service
    yum:
      name: httpd
      state: installed
  - name: Start httpd service
    service:
      name: httpd
      state: started
  • プレイブック例②
playbook.yml
hosts: web_servers
vars:
  dns_server: 8.8.8.8
tasks:
  - name: Add DNS server to resolv.conf
    lineinfile:
      path: /etc/resolv.conf
      line: 'nameserver {{ dns_server }}'

3. 特殊ディレクティブ

  • whenディレクティブ:タスクに条件を指定して実行する(条件分岐)。tasksセクションのディレクティブとして指定する。複数条件を論理積で指定したい場合はand、論理和で指定したい場合はorを用いて、条件同士をつなげる。

  • プレイブック例

playbook.yml
hosts: db_servers
tasks:
  - name: Install Mysql on Debian
    apt: 
      name: mysql
      state: installed
    when: ansible_os_family == "Debian"
  - name: Install Mysql on RedHat
    yum: 
      name: mysql
      state: installed
    when: ansible_os_family == "RedHat"
  • loopディレクティブ:タスクを繰り返し実行する(反復処理)。tasksセクションのディレクティブとして指定し、その中に{{ item }}という変数名を用いて繰り返し実行したい値を定義する。(なお、Ansibleバージョン2.4以前はLookupプラグインwith_...の使用が推奨されていたが、バージョン2.5以降はloopディレクティブの使用が推奨されている。)
  • プレイブック例
playbook.yml
hosts: db_servers
tasks:
  - name: Create users
    user: 
      name: "{{ item }}"
      state: presemt
    loop:
      - jeorge
      - mary
      - tom

4. ロール

  • ロール:プレイブックを分割するためのコンポーネント。ロールを利用する場合は、Ansibleが認識できる特定のディレクトリを作成し、ディレクトリ配下にmain.ymlを配置する必要がある。また、以下のディレクトリは必ず配置する必要がある。
    • tasksディレクトリ:Tasksセクションの内容を定義したmain.ymlを配置するディレクトリ。

コンフィグ

1.コンフィグとは

  • コンフィグ:Ansibleの設定ファイル。Ansibleの処理におけるパラメーターを設定する。

2.主要パラメーター

パラメーター名 設定内容
log_path Ansible実行コマンドログの配置場所を設定する。
gathering ターゲットノードの詳細情報取得に関する設定を行う。implicitの場合、常に情報収集を行う。explicitの場合、情報収集を行わない。smartの場合、新規の接続の際に情報収集を行い、既存の接続の際には情報収集を行わない。デフォルトはimplicit
forks ターゲットノードの並列処理を行うプロセス数を設定する。デフォルトは5
  • コンフィグファイル例
ansible.cfg
[defaults]
log_path = /var/log/ansible.log
gatherig = implicit
forks = 5

3.優先順位

  • コンフィグファイルは以下の順番で検索される。
優先順位 ファイルパス
環境変数ANSIBLE_CONFIGで指定されたファイル
./ansible.cfg(カレントディレクトリに存在するファイル)
~/.ansible.cfg(ホームディレクトリに存在するファイル)
/etc/ansible/ansible.cfg

感想

今回はAnsibleの基本的な使い方のみをまとめたが、使用可能なディレクティブやモジュールの数が非常に多く、まとめるのに苦労した。
実際にAnsibleを使う場合はロールでプレイブックを分割する事が大半であるため、今後はAnsibleの検証を通じてロールを使いこなせるように理解を深めていきたい。

参考文献

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5