構成管理ツールとしてAnsibleを選ぶべき理由
Ansibleは、多数のサーバーや複数のクラウドインフラを統一的に制御できる構成管理ツールです。構成管理ツールとして巷で人気のあるPuppetやChefなどの置き換えに利用できます。既に国内でも、大量の仮想サーバー環境を持つ大手金融機関や大規模製造業を中心に、多くのユーザー企業が使い始めています。この連載では、いま注目を浴びつつあるAnsibleについて、その特徴および魅力を紹介していきます。
Ansibleとは何か
Ansibleは構成管理ツールとして取り上げられることが多いのですが、大きく分けて3つの役割が統合されています。
- デプロイメントツール
- オーケストレーションツール
- 構成管理ツール
Ansibleでは、PlaybookというYAML形式のテキストファイルに定型業務をタスクとして記述し、それをAnsibleに実行させることにより、様々な処理を実現できます。タスクはモジュールと呼ばれる処理プログラムと紐付いており、サーバーの構成管理だけではなく、ネットワークやロードバランサー、クラウドインフラに対する制御を行うこともできます。システムが稼働するインフラを含んだ全体を構築できる点が、Ansibleがオーケストレーションツールでもある理由です。また、サーバー上に任意のファイルをデプロイしたり、パッケージのインストールを行わせたりするデプロイメントツールとしての側面もあります。
Ansibleが注目されている理由
後発製品のため、従来の構成管理ツールの弱点を克服
一回しか実行しない単発の作業のためだけに手順を記述することなく、任意のコマンド、もしくは任意のモジュールをコマンドラインから呼び出すこともAnsibleでは可能です。これをアドホックコマンドと呼びます。
また、ファイルのアップロード/ダウンロードも行えるため、複数台の管理対象サーバーからのログ採取も可能です。
そして、従来の構成管理ツールで手順を記述する場合に求められたプログラミングの知識は不要です。というのもAnsibleでは、YAML形式のテキストファイルにて手順を列挙するだけで済むからです。
エージェントレスのアーキテクチャ
Ansibleの管理対象サーバーに、エージェントツールは不要です。必要なのは、Python 2.4以降がインストールされていることだけです。最近の主要なLinuxディストリビューションであれば、Pythonは大体インストールされていますので、追加でインストールする必要もありません。
したがって、管理対象サーバーのIPアドレスとSSHの認証情報が分かっていれば、一度もログインせずにAnsibleから利用し始めることができます。また、パスワード認証および公開鍵認証の両方に対応しています。
Ansibleモジュールによる拡張性の高さ
Ansibleには、管理対象サーバーやサービスごとに実に様々なモジュールが用意されています。サービスの起動・停止を行うモジュールから、iptablesのファイアウォールを設定するモジュール、AWSやAzure、OpenStackなどのクラウドインフラを制御するAnsibleモジュールも存在します。
またPlaybookの実行時のステータスなどを、IRCやSlackに通知するモジュールもあります。執筆時点では、拡張モジュールを含めると400種類を超えるAnsibleモジュールが提供されています。
Ansible List of All Modules
http://docs.ansible.com/ansible/list_of_all_modules.html
さらに、腕に自身があれば、BashやPythonなどの言語環境でAnsibleモジュールを書くことも可能です。
Ansibleに取り組むべき理由とメリット
PuppetやChef、そしてAnsibleなどの構成管理ツールを使うべき理由としては、以下のようなものが挙げられます。
- 手動オペレーションによるタイムロスの削減
- メンテナンス時におけるオペレーションミスの発生可能性の低減
- 運用後における手順の変更が、作業手順書に反映されていないことによる作業漏れの撲滅
- 直接ログインする機会を最小限にすることによるセキュリティの向上
Ansibleが備える類似の構成管理ツールに対する優位性
PuppetやChefなどと比べて、構成管理ツールとしてのAnsibleは何か特別なことができるか? と質問されることがあります。この質問に対する答えは「大体同じです」となります。それでは、Ansibleを選択する理由はどこにあるのでしょう?
PlaybookをYAML形式でシンプルに記述できる
ChefのCookbookはRubyの記法で書かれており、Rubyプログラミングの一種だと言えるでしょう。またPuppetのManifestは、Puppet独自の宣言型言語で記述されています。一方AnsibleのPlaybookは、一般的なYAML形式の記法で記述できます、YAML形式は様々な製品でよく使われているため、記述方法の学習コストが少ないと言えます。さらに開発チームと運用チームの両方から分かりやすい表記方法である点も、Dev&Opsを実現する上でとても重要です。
またYAMLの出力処理さえできば、Playbookを自動生成することも容易にできます。
- hosts: webservers become: yes tasks: - name: check install httpd yum: name=httpd state=latest - name: check running and enabled httpd service: name=httpd state=running enabled=yes - name: configure firewalld TCP:80 firewalld: port=80/tcp state=enabled permanent=true immediate=yes
Ansibleはスタンドアローンでも使える
ChefやPuppetと比べて、AnsibleはPush型で構成上シンプルなため、スモールスタートが可能です。クライアント・サーバー型の構成は、必須ではありません。リモートの管理対象サーバーだけではなく、ローカル環境もAnsibleの管理対象にすることができます。管理対象サーバーを増やしたい場合は、inventoryと呼ばれるサーバーのアドレス一覧に一行追記するだけです。もちろん、管理対象サーバー1台だけではなく、すべてに対して適用したり、グループ化された管理対象サーバーに対してのみ適用することも可能です。
[database] 192.168.0.100 [webservers] 192.168.0.101 192.168.0.102 192.168.0.103
Ansibleは冪等性がある
AnsibleのPlaybookでは、対象リソースに対して「何を実行するのか」ではなく、「どういう状態があるべき姿なのか」を記述します。そのため、同じ処理を何回実行しても同じ結果になります。この性質を冪等性(べきとうせい)と呼びます。AnsibleのPlaybookには冪等性があり、この点は、FabricやCapistranoなどの構成管理ツールと比べた場合の優位性となります。
Ansibleの今後の展望
2015年にAnsible社は、Red Hatに買収されました。これにより、Red Hat Enterprise Linux環境におけるアプリケーションのデプロイやソフトウェアデリバリーの仕組みの迅速化、OpenStackのインストールの自動化、コンテナ導入の促進などの効果が期待されます。
またAnsibleは、分散ストレージのCephと同じようにオープンコア戦略を取っており、コアテクノロジーはオープンソース・ソフトウェアですが、Web UIを持つ管理システムのAnsible Towerはプロプラエタリ製品になっています。この点については、Cephの管理ツールのCeph Calamariのように、早期にオープンソース・ソフトウェア化する必要があると考えており、現在、Red Hatの社内で鋭意作業中です。
AnsibleはOpenStackや、OpenShiftなどのPaaS環境とも相性がよいソフトウェアなので、今後、Red Hatの多くの製品で使われていくことでしょう。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Ansible応用編:より実践的なPlaybookを作り上げる
- 実践! AnsibleによるWordPress環境構築
- Ansible:さらにPlaybookをきわめる
- Ansibleにおいてテストを行う理由
- Ansibleのインストールとサンプルコードの実行
- より速く、より小さく、より軽く、 新基盤 Nano Server(後編)
- 開発チームの環境をAnsibleで一括構築しよう
- Ansible Towerのクラウド連携機能による効率化を目指す
- 構成管理ツールのAnsibleが目指す「Infrastructure as YAML」とは?
- 構成管理と自動化のツールAnsibleの最新バージョンと将来の姿