構成管理ツールとは
多くの複数台のサーバに対して、あらかじめ用意した設定ファイルに従って、ソフトウェアのインストールや設定を自動的に実行できるツールは「構成管理ツール」と呼ばれています。
代表的な構成管理ツールには、Ansible、Puppet、Chef などがあります。
構成管理ツールは、サーバだけではなく、ネットワークが自動化された大規模なネットワークインフラでは、ネットワーク機器に対しても活用されています。構成管理ツールのAnsibleでは以下の「サーバーOS」「ネットワーク製品」「クラウド製品」を管理できます。
ネットワーク製品は、Cisco、Juniper、F5、A10、ARISTA,NOKIA等が対応しています。
構成管理ツールを使用しない場合、設定・管理対象のネットワーク機器ごとに、ログインし、コマンドを実行し、設定ファイルの更新、管理を行う必要があります。
一方、構成管理ツールを使用する場合には一元的に集中管理できます。管理サーバにAnsibleをインストールすれば、各ネットワーク機器の設定や起動状態などを一元的に管理できます。
構成管理ツールを導入することにより、構成ドリフトを抑制できるメリットもあります。構成ドリフト(逸脱)は、手順が正しく従わなかったり、適切に実装されなかったりした場合に、発生します。構成管理ツールを導入することで、手順書管理の手動オペレーションを自動化し安全で効率的なシステム構成を管理できるようになることから、構成ドリフトが発生しにくいネットワークシステムとなります。
構成管理ツール:Ansibleとは
Ansible(アンジブル)は、Red Hat社が開発するオープンソースの構成管理ツールです。Ansibleには、構成管理ツールを含めて、正確には大きく以下の機能があります。
・ 構成管理ツール
・ デプロイメントツール
・ オーケストレーションツール
Ansibleはデプロイメントツールとして、サーバ上に任意のファイルをデプロイしたり、パッケージのインストールを行わせる機能もあります。また、オーケストレーションツールとして、システム、アプリケーション、サービスの設定/運用管理を自動化する機能もあります。
構成管理ツール:Ansibleの3つの特徴
Ansibleには大きく以下の3つの特徴があります。
・ エージェントレス
・ モジュールによる拡張性の高さ
・ 後発製品であるため、従来の構成管理ツールの問題点を克服
Ansibleの管理対象となるサーバやネットワーク機器に、エージェントツールのインストールは不要であり、エージェントレスモデルを採用しています。
Ansibleには、管理対象となるサーバ、ネットワーク機器、サービスごとに様々なモジュールが用意されており、サービス起動・停止行うモジュール、iptablesのファイアウォール設定するモジュール、AWSなどのクラウドインフラを制御するAnsibleモジュールなどがあります。
Ansibleは、従来の構成管理ツールで手順を記述する際に求められてたプログラミングの知識は不要であり、YAML形式のテキストファイルで手順を列挙するだけで良い利点もあります。
構成管理ツール:Ansibleの仕組み
Ansibleでは、Playbookと呼ばれるファイルを元に、AnsibleサーバがPython codeの生成後に管理対象となるサーバやネットワーク機器に転送してSSHやNETCONF等のプロトコル経由で実行します。
Ansibleを動作させる上で最も重要なファイル(コード)は以下の2つとなります。
・ Playbook(プレイブック)
→ 管理対象となる対象デバイスやAnsibleが実行するタスクを記述するファイル
・ Inventory(インベントリ)
→ 管理対象の役割とホスト情報を記述するファイル
構成管理ツール:Ansible、Puppet、Chefの比較
Ansibleの場合、構成管理サーバから管理対象となるデバイス(サーバやネットワーク機器)へ設定情報などを送信するPush型(プッシュ型)の通信形態となりますが、PuppetとChefでは構成管理サーバから設定情報を取得するPull型(プル型)の通信形態となります。
Ansibleの場合、構成管理となる対象デバイスにソフトウェアのインストールを行う必要がないエージェントレスモデルを採用しています。一方、PuppetとChefでは、構成管理対象となる対象デバイスに別途ソフトウェアのインストールが必要となるエージェントモデルを採用しています。その他、Ansible、Puppet、Chefの違いは以下の通りとなります。
比較項目 | Ansible | Puppet | Chef |
開発組織 | RedHat | Puppet Labs | Chef Software |
使用言語 | Python | Ruby | Ruby |
アーキテクチャ | エージェントレス | エージェント | エージェント |
構成管理方法 | Push型通信 | Pull型通信 | Pull型通信 |
制御ファイル | playbook | manifest | Recipe |
コード記述言語 | YAML | 独自言語 | Ruby |
使用プロトコル | SSH/NETCONF | HTTP/HTTPS | HTTP/HTTPS |
サーバ側待ち受けポート | – | TCP 8140 | TCP 10002 |