この連載では、Ansibleとはどういったものなのかを理解し、実際に使えるようになるまでを説明します。
第一回ではAnsibleとは何かを解説します。
- Ansibleとは
- 環境構築編
Ansibleとは
Ansibleとはオープンソースの構成管理ツールの一つです。
構成管理ツールとはソフトウェアや設定ファイルなどの構成を自動的に管理してくれるツールです。
新しいデバイスを用意する場合、大抵はそのままでは使えません。必要なソフトウェアをインストールし、設定ファイルを編集してやっと使用できるようになります。これが1台や2台なら手作業でやっても大した時間はかかりませんが、数十台、数百台という数のデバイスに対して行う場合、多大な時間と労力がかかります。操作ミスが発生するかもしれません。
このような問題を解決してくれるのが構成管理ツールです。設定ファイルにより事前に設定した構成を複数台のデバイスに対して自動で設定してくれます。作業工数を削減することができ、ミスも減るので品質も向上します。
Ansibleを使う理由
構成管理ツールにはAnsible以外にもChefやPuppetなどのツールが存在します。ではなぜAnsibleを使うのでしょうか。それには3つの理由があります。
エージェントレス
Ansibleの特徴の一つはエージェントレスであることです。
Ansible以外の構成管理ツールでは、
- 構成管理の対象となる端末にエージェントと呼ばれる常駐プログラムをインストールする必要がある
- エージェントを常駐させておく必要があるため管理対象の機器のHWリソースを使用しつづける
等の運用上の手間であったり、リソース上のデメリットが存在します。 ソフトウェアのインストールや設定の手間を省くために構成管理ツールを使用するわけですが、そのためには、エージェントを各端末にインストールしなければなりません。
これに対しAnsibleはエージェントレス、すなわちエージェントなしで動作します。PythonとSSH接続さえ可能であれば対象端末での作業は不要です。この手間の少なさがAnsibleが選ばれる理由の一つです。
冪等性
冪等性(べきとうせい)とは、ある操作を繰り返した回数に関わらず結果が一定となる性質のことです。この性質が構成管理に置いては重要な意味を持ちます。
例えば、あるソフトウェアを起動するという構成管理を行う状況を考えます。冪等性がない場合、2回目以降は既に実行中のソフトウェアの起動処理をすることになります。実行時の状態に関わらず同じ操作を実行することになり、無駄な処理や意図しない結果となる可能性があります。
冪等性がある場合、2回目以降の実行をしたとしても、結果は変わりません。実行後の最終的な結果を想定し、その状態にするために必要な処理を行うため、無駄な処理は行わず結果も一定となります。
Ansibleでは、ほとんどの処理に対して冪等性が保証されています。
設定ファイルが使いやすい
Ansibleの設定ファイルはYAMLという形式で記述されます。単純な形式で書く側も読む側もわかりやすいフォーマットです。
またAnsibleではファイル分割や変数をサポートしているため、設定ファイルの再利用がしやすく、毎回設定ファイルをスクラッチで作成する必要がありません。
Ansibleの仕組み
ノード
Ansibleでは端末のことを「ノード」と呼びます。ノードは役割によって以下の2つに分けられます。
ターゲットノード
構成管理の対象となるノードです。コントロールノードから送られてきた処理が実行されます。
コントロールノード
ターゲットノードの構成を管理するためのノードです。Ansibleをインストールし、設定ファイルを記述しコマンドを実行します。
ファイル構成
Ansibleでは以下のファイルを設定することで構成管理を行います。
インベントリファイル
ターゲットノードの接続情報の定義を行うファイルです。デフォルトのファイル名は「hosts」です。ここで定義したターゲットノードに対して構成管理を行います。
playbook
ターゲットノードに対して実行する構成を設定するファイルです。YAMLファイルで記述されます。機能単位で部品化してrolesディレクトリ以下に格納し、site.ymlでそれらを呼び出す形式が一般的です。
ansible.cfg
Ansible自体の設定行うファイルです。パスの設定や機能のオン/オフの設定を行います。
構成管理の手順
Ansibleを使った構成管理の大まかな手順は以下の通りです。次回以降、この手順に沿って構成管理を実施していきます。
ノードの用意
SSHとPython 2.4以上がインストールされたノードを用意します。
Ansibleのインストール
コントロールノードにAnsibleをインストールします。
SSHの設定
コントロールノードとターゲットノード間でSSH用の鍵を交換します。
インベントリファイルの作成
対象となるターゲットノードをインベントリファイルに記述します。
動作確認
自動化したい構成を一度マニュアルで作成します。手作業で行って失敗する構成は自動化しても失敗します。なので問題点の切り分けのために実際にその構成で動作するのかを確認します。
playbookの作成
確認できた構成をplaybookに記述します。これを実行すれば構成は完了です。
まとめ
この記事ではAnsibleとは何か、Ansibleの仕組みについてまとめました。
次回は、Ansibleの環境構築を行う方法を紹介します。
最後までお読みいただきありがとうございます。