Ansibleを入門者向けに解説!インフラ構築自動化、構成管理の重要性とは?
Ansibleの由来はアーシュラ・K・ル=グウィンのSF小説に登場する超光速通信技術だといわれています。
物語中では思考や情報を瞬時に伝達するネットワーク基盤として描かれています。この技術で艦隊を統率・集中管理します。
Ansibleは複雑で膨大なサーバー群を一括管理し、人が手で行うよりも迅速に環境構築・設定を行います。
本記事ではまずAnsibleを学ぶに際し、必要となる基礎知識をキーワードでお伝えします。もし分からない単語があれば調べてみて下さい。
次にAnsibleとは何か、特徴・できること・Ansibleの構成要素などについて解説していきます。
簡単にではありますがインストール方法にも触れます。
最後にインフラ構築自動化と構成管理の重要性について、それぞれ見ていきましょう。
Ansibleを学ぶ前に
Ansibleサーバーの構築や設定を行うツールですから、Ansibleの記事を読んでいると、関連する専門用語が沢山出てきます。
- ネットワーク関連(ホスト・IPアドレス・ping)
- プロトコル(SSH)
- Linux関連(Linuxディストリビューション・root権限)
- 言語・記法(Python・YAML)
- 概念(冪等性・DevOps)
このため初心者の方は単語の意味が分からないまま英文を読んでいるかの状態になり、理解できずに諦めたくなる可能性があります。
現役のエンジニアやプログラマでさえインフラ周りの単語はよく知らない場合もあります。
詳しい使い方まで調べなくて構いません。用語が指すのがどんなものかだけ確認してから、もしくは確認しながら記事を読み進めましょう。
Ansible(アンシブル)とは
Ansibleはサーバーインフラ構築の自動化を行う構成管理ツールです。
Ansibleは他ツールと比較すると歴史は浅いですが、登場から急激にそのシェアを伸ばし、今では主流の構成管理ツールになりました。
- 2005年 Puppet
- 2009年 Chef
- 2012年 Ansible
AnsibleはRed Hatが開発しており、GNU GPL 3.0 ライセンスのオープンソースプロジェクトとして公開されています。
Ansibleの公式ドキュメントは丁寧で分かりやすいです。全て英語ですので英語が苦手な方は大変かもしれません。
サーバーインフラとは
生活インフラという単語を聞いたことはありませんか。生活インフラは電気・ガス・水道など生活する上でなくてはならないインフラです。
同様にサーバーインフラはサーバーを正常に稼働させていく上で、なくてはならないサーバー基盤のことです。
安定したサーバー基盤があるからこそ、私達は安心してアプリケーションを使用し、様々なツールを利用できます。
構成管理ツールとは
さて生活インフラでは電柱を立てて電線を通し、ガス管や水道管を整備し、老朽化したら修繕をしなければなりません。
サーバーインフラでは初期設定や必要なミドルウェアのインストール、そしてバージョンアップなどをしていかなくてはなりません。
現実の配管工事は難しいかもしれませんが、サーバーインフラの構築や構成の変更は自動化することができます。
構成管理ツールはこれらの様々な構築や設定にかかる手順の自動化を実現。
構成管理ツールを使用すると、今まで環境構築手順書に記載していた内容を設定ファイルに集約することができます。
設定ファイルを見ればシステムやサーバー、稼働しているアプリケーションなどの構成を一目で把握できるようになります。
Ansibleの特徴
次にAnsibleの特徴について見ていきましょう。
可読性が高い
Ansibleはとても単純でシンプルです。Ansibleの設定ファイルの記述方法やコマンド操作などを習得するのは容易でしょう。
またAnsibleはPythonで実装されています。Pythonも可読性が高く学習しやすい言語です。
ほとんどのLinuxディストリビューションにはPythonがデフォルトでインストールされており、直ぐに利用することが可能です。
冪等性(べきとうせい)
冪等性(べきとうせい・idempotence)とは、ある操作を何回繰り返しても同じ結果になるという概念です。
commandモジュールなどの一部のモジュールを除き、Ansibleモジュールは冪等です。
例えばディレクトリ作成タスクを実行する際、ディレクトリが存在しない場合のみに実行します。
既にディレクトリがある場合にエラーを表示したり、同じディレクトリを作成しようとしたりはしません。
エージェントレス
ここでのエージェントは管理対象のサーバーにインストールするソフトウェアです。
ChefやPuppetなど多くの構成管理ツールでは、あらかじめエージェントをインストールしておかなければなりません。
対象サーバーにあるエージェントは定期的に管理サーバーにアクセスし、設定ファイルに従ってサーバーの状態を更新します。
Ansibleはエージェントレスです。Ansibleは標準SSHやParamikoモジュールを利用して通信を管理します。
このためメンテナンス時の処理時間が少なく、パフォーマンスが大幅に改善されます。
Ansibleにできること
Ansibleで実現できることについてまとめました。
継続的インテグレーション・デリバリー
AnsibleはCI/CDパイプラインにも対応しています。
他のGitホスティングサービスやクラウドのCI/CDサービスとの連携ができます。またSlack連携のためのモジュールも容易されています。
オーケストレーション・プロビジョニング
Ansibleはサーバーインフラの構築と設定に関する全ての情報を知っています。
このためあらかじめ設定された動作に従い、サーバーインフラ全体の自律的制御を担うことが可能。
このため障害発生時の再起動や、システム負荷増大時のオートスケールなどが可能です。
Ansibleが苦手なこと
Ansibleの特徴やできることを振り返ると良いことばかりに見えてきます。しかしAnsibleはまだ発展途上のため苦手なこともあります。
UI周りは開発段階
Ansible Tower(旧称 AWX)はAnsibleを組織で運用する際に利用できるWebアプリケーションです。
Ansible Towerを導入すると設定ファイルの記載方法や操作コマンドが分からないメンバーでも、ボタン1つで特定の操作を行えます。
しかしまだ開発段階のため、全てのCLIコマンドに対応している訳ではありません。またGUIとコマンドの同期に失敗する場合もあります。
Windowsのサポートは限定的
インストールガイドを見ても察しは付きますが、Ansibleは主にLinuxディストリビューションやmacOSをサポートしています。
Windowsのサポートについては制限があり、Windows上にLinux仮想環境を構築する必要があります。
Ansibleを構成する要素
本項ではAnsibleの仕組みをその構成要素から説明していきたいと思います。
PlaybookやInventoryなど聞き慣れない単語も多いと思いますが、一つひとつ順番に確認していきましょう。
Ansible Module
Ansible Moduleは再利用可能な処理をまとめたものです。
例えばfileモジュールを利用するとディレクトリ操作が、lineinfileモジュールを利用するとファイルの編集作業ができます。
Ansible Moduleは公開されているモジュールをダウンロードしても良いですし、カスタマイズや自作も可能です。
Ansible Inventory
Inventory(インベントリ)は処理対象のサーバーを列挙するファイルです。デフォルトは「/etc/ansible/hosts」です。
サーバーをグループ化して記述することで、グループ毎に一括処理を行うことができるようになります。
- 192.168.100.1
- 192.168.100.2
- [webservers]
- webserver01.example.org
webserver02.example.org
例えば「Ansibleのpingモジュールを使用して、グループwebserversをチェックする」場合は、以下のようなコマンドを使用します。
- ~$ ansible webservers -m ping
- webserver01.example.org | UNREACHABLE! => {
- “changed”: false,
- “msg”: “timed out”,
- “unreachable”: true
- }
- webserver02.example.org | SUCCESS => {
- “changed”: false,
- “ping”: “pong”
- }
Ansible Playbook
Playbook(プレイブック)はYAML形式のテキストファイルです。ここに記述されたタスクがAnsibleに実行されます。
Playbookには以下のような情報を記載します。
- hosts 処理を適用するグループ
- sudo root権限(管理者権限)で実行するか
- vars 変数の定義
- tasks 実行するタスクの名前や処理
- – hosts: webservers
- sudo: yes
- vars:
- – user_name: Ansible Beginner
- tasks:
- – name: Disable SELinux
- command: /sbin/setenforce 0
- – name: Install httpd
- yum: name=httpd state=latest
Ansibleのセットアップ
インストール方法は各OSによって異なります。本記事ではCentOS7にインストールする方法について説明します。
詳細は公式ドキュメントのインストールガイドを参照して下さい。
前提条件
Pythonがインストールされていることが前提条件です。もしインストールされていない場合は、以下のコマンドでインストールして下さい。
- ~$ yum update -y
- ~$ yum install -y python
- ~$ python –version
- Python 2.7.5
簡略化のためPython2で説明を行いますが、Python2は古いため本来は最新のバージョンが良いです。
しかしインストール後のパスの設定や必要なモジュールのインストールなど、少々複雑なので初心者の方はご注意下さい。
Dockerを使用すれば繰り返し練習を行えますので、最初はバージョンやOSなど、記事やハンズオン通りに行うのが良いと思います。
Ansibleのインストール
次のコマンドを入力して、Ansibleをインストールして下さい。
- ~$ yum install -y ansible
- ~$ ansible –version
- ansible 2.4.2.0
- config file = /etc/ansible/ansible.cfg
- configured module search path = [u’/root/.ansible/plugins/modules’, u’/usr/share/ansible/plugins/modules’]
- ansible python module location = /usr/lib/python2.7/site-packages/ansible
- executable location = /usr/bin/ansible
- python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
「ansible –version」コマンドを打つと、ansible.cfgやモジュール検索対象のディレクトリが表示されます。
また現在使用しているPythonのバージョンも表示されます。
もしインストールしたバージョンと異なる場合は、複数のPythonがインストールされていないか確認しましょう。
構成管理の重要性
ITインフラを提供するシステムやサービスは増え続け、今では各サービスを連携して利用するのが当たり前になっています。
これらの多種多様なサービスに対して手動で作業を行うことや、全体像を把握することはもはや困難になってきました。
構成管理ツールでの集中管理が重要なのはこのためです。
インフラ構築自動化の重要性
近年、自動化が注目されるに至った要因はいくつか考えられます。特に大きい要因は以下の2つです。
DevOpsの開発環境を整備する
1つはアジャイル開発と共に注目されているDevOpsです。DevOpsでは毎回行う作業はなるべく自動化し開発に注力できるようにします。
インフラ構築自動化ツールにはソースコードの変更がマージされてから、各環境に適用するまでに必要な機能が全て揃っています。
サーバー管理者の負担を軽くする
もう1つは多種多様な働き方やコスト面から、サーバー管理者の負担をなるべく減らす方向に進んでいることです。
従来はサーバーに障害が発生するとメンテナンス対応のため、昼夜・平日休日の別なく出勤しなければなりませんでした。
現在はオーケストレーション・プロビジョニングにより、なるべくシステム側で解決できるよう対策を行うようになりました。
おわりに
インフラ構築の自動化が加速度的に進んでいる現在、構成管理ツールの需要はますます増加していくでしょう。
Ansibleは学習コストが低いため、中でも入門者におすすめのツールです。
サーバー管理者の方はもちろんのこと、それ以外のエンジニアも概要程度は知っておくと困らないと思います。
toiroフリーランスは、SHIFTグループがプライムとして参画している独自案件をフリーランスエンジニア向けに紹介する唯一のプラットフォームサービスです。
エージェントによるサポートもありますので、ご利用を検討してみてはいかがでしょうか。