- 歴史
- 概要
- 構成
- 基本的な使い方
- 変数
- 変数(外部ファイル)
- 変数(groupごとに定義)
- 変数(hostごとに定義)
- 繰り返し処理
- 条件分岐
- 出力結果を保存
- 結果結果を整形して保存
- Advancedな使い方
- 推奨構成
DevOpsやCI/CDの中核にあるのが自動化である。あらゆる場面において作業を自動化することが推奨される。
従来はインフラ屋さんが手動で実施していたインフラ設定作業も自動化の対象に含まれる。
インフラ設定管理を自動化するためのツールが設定管理ツールであり、その中で今、最も人気があるのがAnsibleだ。
ここではAnsibleについてみていこう。
歴史
chef、puppetなどに比べると構成管理ツールとしては比較的新しい。
概要
基本設計理念
- Immutable Infrastracture
- 冪等性の担保
- 各モジュールがそれぞれの方法で冪等性をチェックしてる
製品(OSS)
製品(有償)
Dry-run機能
- check
- 変更を加えない処理を実施
- diff
- ファイルの変更を確認
Orchestration機能
- アプリケーションのデプロイのこと
- 複数の手順を順序通りに実行してアプリケーションをデプロイすることができる
- スケールアウトはInventoryに追加するだけで実施できる
機器、ベンダごとのモジュールが必要
- ベンダ間の差異は抽象化はされていない
- NAPALMとは思想が異なる
構成
module
- taskの中で利用できる指示の集まり
- デバイスごとに異なる
- コレクションとして管理・入るされている
task
- 処理
play
- taskの集まり
playbook
- playの集まり
- YAML形式で記述
- 以下のキーワードから構成される
- name
- hosts
- vars
- tasks
inventory
- taskの対象となるhostを定義したファイル
- 実行時に-iオプションで指定する
- 指定されなかった場合はデフォルトでは/etc/ansible/hostsを探す
基本的な使い方
実行方法
ansibleコマンド
- adhoc実行するためのコマンド
-m
でモジュール指定- 指定しなければ
ansible.builtin.command
- 指定しなければ
-a
でモジュールへの引数指定
ansible-playbookコマンド
- playbookを実行するコマンド
-i
:インベントリファイル-v
:デバッグ
変数
vars
でplaybook内に変数を定義- {{ 変数名 }}で参照
変数(外部ファイル)
vars_files
で外部ファイルに変数を定義して呼び出せる
変数(groupごとに定義)
- group_vars/に<group名>.yml
変数(hostごとに定義)
- host_vars/に<host名>.yml
- inventoryファイルに直接記載することもできる
繰り返し処理
- 基本的には
loop
を使う with_<plugin>
でもできるuntil
はシステムが特定の状態になるまで待機するときに使える
条件分岐
when
を使う
出力結果を保存
- 結果を返す処理を実行
register
で結果を変数へ格納local_acion: copy
で変数をファイルへ出力
結果結果を整形して保存
register
した変数をset_fact
でホスト変数へtemplate
でホスト変数を整形してファイル化
Advancedな使い方
taskをモジュール化する
- roleはtaskをモジュール化したもの
- rolesフォルダに作成する
ansible-galaxy
コマンドでひな形を作成できる
- 呼び出し方は3種類ある
roles
include_role
import_role
複雑な処理を実施したい
ネットワーク機器を管理する
- localhostで実行する
- gather_factsはno
- ネットワーク機器ではなくLocal PCの情報を集めてしまう
推奨構成
一般的な環境
production # inventory file for production servers staging # inventory file for staging environment group_vars/ group1.yml # here we assign variables to particular groups group2.yml host_vars/ hostname1.yml # here we assign variables to particular systems hostname2.yml library/ # if any custom modules, put them here (optional) module_utils/ # if any custom module_utils to support modules, put them here (optional) filter_plugins/ # if any custom filter plugins, put them here (optional) site.yml # master playbook webservers.yml # playbook for webserver tier dbservers.yml # playbook for dbserver tier roles/ common/ webtier/ monitoring/
productionとstagingで共通する変数が少ない場合
inventories/ production/ hosts # inventory file for production servers group_vars/ group1.yml # here we assign variables to particular groups group2.yml host_vars/ hostname1.yml # here we assign variables to particular systems hostname2.yml staging/ hosts # inventory file for staging environment group_vars/ group1.yml # here we assign variables to particular groups group2.yml host_vars/ stagehost1.yml # here we assign variables to particular systems stagehost2.yml library/ module_utils/ filter_plugins/ site.yml webservers.yml dbservers.yml roles/ common/ webtier/ monitoring/