最近Ansibleを耳にすることが多くなったでしょう。Ansibleとは構成管理ツールの1つです。今回は、入門者向けにAnsibleでできることや環境構築手順をわかりやすく紹介します。この記事が学習の参考になれば幸いです。
1. 【初心者向け】Ansibleとは?
Ansibleとは、Red Hat Linuxで有名なRed Hat社が開発する構成管理ツールです。
Pythonで動作しており、サーバーなどの設定をYAML形式のファイルに定義し、自動で設定を反映します。
AnsibleはInfrastructure as Codeという考えから2012年に誕生しました。
Infrastructure as Codeとは、手動ではなく、コードを使用して、インフラの環境構築や管理を自動化するプロセスをいいます。
Infrastructure as Codeの考えから構成管理ツールと呼ばれるインフラ環境や管理を自動化するツールが登場しました。
このような構成管理ツールにより膨大な工数やヒューマンエラー・インフラ設定の差異を抑制できるようになりました。
1.1 Ansibleでできること
「環境構築や管理を自動化できる」と言われても実際何ができるのかわからない方もいるでしょう。
ここでは、Ansible入門者向けにわかりやすくできることを解説します。
1.1.1 【できること】インフラ構築の自動化
サーバーやネットワーク機器の自動設定はもちろん、アプリケーションのインストールの自動化も可能です。
AnsibleのYAML形式の設定ファイルに記述できるのは、サーバーやネットワーク機器の設定だけではありません。
アプリケーションのインストール情報も記述でき、YAML形式の設定ファイルに記述しておくことで、サーバにアプリケーションを自動でインストールすることも可能です。
また、構築の自動化は複数の環境に対して並行してインフラ構築を実行できますので、設定ファイルの記述方法をマスターすれば、かなりの時間短縮が見込めます。
また、Ansibleでは設定ファイルの内容をテスト実行できるため、事前に設定ファイルの妥当性をチェックできます。
1.1.2 【できること】エージェントレスでの起動
Ansibleでは、管理サーバーのみ構成管理ツールをインストールし、管理対象のサーバーの接続設定をセットアップすれば起動可能です。
Ansibleのように構成管理ツールは管理するサーバーにツールをインストールするルーツだけではありません。
Chefをはじめとする他の構成管理ツールでは管理する対象サーバーにエージェントと呼ばれるツールをインストールする必要があります。
管理対象がサーバーが10環境ある場合、エージェントのセットアップだけでもかなりの工数がかかってしまいます。
しかし、Ansibleでは管理対象サーバーに構成管理ツールのインストールは不要なため、エージェントのセットアップの工数が削減できることは大きなメリットです。
1.1.3 【できること】冪等性の確保
Ansibleでは冪等性(べきとうせい)を確保するよう取り組んでいます。
冪等性とは、同じ内容で実行したら必ず同じ結果が得られることをいいます。
例えば、Ansibleで以前変更を加えた設定ファイルに追加で設定変更したい場合、だた設定を変更して実行すると、設定ファイルが予期せぬ設定に書き換えられる可能性があるでしょう。
そこでAnsibleでは正規表現に一致した箇所だけ変更できるようlineinfileというモジュールを提供しています。
lineinfileを利用することで、何度実行したとしても結果が同じになるよう工夫することが可能です。
コマンドの実行結果を元に処理するモジュールなど一部のモジュールを除き、原則としては冪等性を確保したモジュールを提供しています。
1.2 Chefなど他の構成管理ツールとの比較
構成管理ツールにはAnsible以外にも種類があります。
ここでは、Ansibleとメジャーな2つの構成管理ツールを比較して解説します。
Ansible | Chef | Puppet | |
---|---|---|---|
開発開始 | 2012年 | 2009年 | 2005年 |
管理対象 | Linux・ Windows ・ ネットワーク機器・クラウド環境 | Linux・ Windows ・ ネットワーク機器・クラウド環境 | Linux・ Windows ・ ネットワーク機器・クラウド環境 |
エージェント | 不要 | 必要 | 必要 |
開発言語 | Python | Ruby | Python |
設定ファイルの書式 | 独自のDSL | Ruby DSL | YAML |
このようにAnsibleはエージェントが不要で、設定ファイルの書式がYAMLと学習コストも低いため、導入しやすい構成管理ツールといえるでしょう。
2. Ansibleの仕組み
構成管理ツールを利用すると、インフラ環境の構築・管理が自動化できるというメリットがあることをご理解いただけたと思います。
また、Ansibleはエージェントのインストールが不要で、他の構成管理ツールよりも学習コストが低いことがメリットです。
メリットをご理解いただいた後にAnsibleが動作する仕組みについて解説します。
2.1 ノード
Ansibleではサーバーのことをノードと呼びます。ノードは役割によって次の2種類があります。
ノードの種類 | 役割 |
---|---|
コントロールノード | 構成を管理するノードです。Ansibleをセットアップする環境です。YAML形式のファイルに管理対象の環境情報を設定し、実行します。 |
ターゲットノード | 構成を管理される対象のノードです。Ansibleはセットアップ不要です。コントロールノードからの命令を実行することで、アプリケーションや設定が管理されます。 |
2.2 ファイル構成
Ansibleの設定ファイルは3種類です。ファイル構成は以下の図の通りです。
各ファイルとその役割について解説します。
ファイルの種類 | 役割 |
---|---|
インベントリファイル | 構成管理を行うターゲットノードの接続情報を管理するファイル。ファイル名はデフォルトでは「hosts」です。 |
playbook | ターゲットノードの構成情報を設定するファイル。YAML形式で記述します。
rolesディレクトリ以下に機能単位でYAMLファイルを作成します。 一般的なファイルの管理方法は、作成したファイルのパスをsite.ymlに設定する方法です。 |
ansible.cfg | Ansibleの設定を行うファイルで機能のON/OFFなどを設定します。 |
3. Ansibleの環境構築手順・構成管理の方法
Ansibleでできること・仕組みについて解説してきました。
構成管理を学習するには実際に環境を構築し、構成管理してみるのが一番の近道です。
そこでAnsibleの環境を構築する手順とAnsibleで構成管理を行う方法をあわせて解説します。
ぜひこちらの記事を参考に構成管理を試してみてください。
3.1 ノード準備
まずはコントロールノードとターゲットノード用の環境を準備します。各ノードによってシステム要件がありますので、準備した環境が要件を満たしているか、チェックしましょう。
コントロールノード | ターゲットノード | |
---|---|---|
OS | CentOSやUbuntuのUNIX系OS | UNIX系OS、Windows OS |
ミドルウェア | Python 2.7 または Python 3.5 以降 | Python 2.6以降 または Python 3.5 以降 |
通信手段 | SSH・SFTP※1 が利用できること |
※1 SFTPが利用できない場合は、設定ファイルの変更によりSCPに切り替えることは可能。
特にコントロールノードではWindows OSのサポートがありませんので、注意が必要です。
また、Ansibleの一部のモジュールやプラグインを利用するには、追加のシステム要件がありますので、適宜マニュアルをご確認ください。
3.2 Ansibleのインストール
システム要件を満たすノード用の環境を準備が整ったらAnsibleのインストールを実施します。
ここではCentOSとUbuntuでインストールした場合の手順を紹介します
3.2.1 CentOSにインストールする場合
コントロールノードでyumを利用してインストールします。
$ sudo yum install ansible
3.2.2 Ubuntuにインストールする場合
Ubuntuにインストールする場合は 以下のURLのPPAを利用して、Ansibleのモジュールをインストールします。
▸ "Ansible" team:https://launchpad.net/~ansible/+archive/ubuntu/ansible
まずコントロールノードにPPAを利用して Ansible をインストールします。
実行するコマンドは次の通りです。
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible
3.3 SSHの設定
コントロールノードとターゲットノードで通信する際のSSHを設定します。
コントロールノードにて認証用の公開鍵を生成します。
$ ssh-keygen
鍵の格納先などいくつか入力を求められますので、必要に応じて入力します。
なお、何も入力せず、Enterキーを入力して進めても問題ございません。
入力が完了したら、鍵の格納先に指定したディレクトリに次のファイルが生成されていることを確認します。
- id_rsa
- id_rsa.pub
鍵の格納先に移動して、authorized_keysの作成とパーミッションを変更します。
$ cd .ssh
$ cat id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys
ターゲットノードに鍵をscpで転送します。
ターゲットノードのrootユーザーのパスワードを入力するよう求められますので、パスワードを入力します。
ターゲットノードにrootユーザーでログインし、「/root/.ssh」にコピーされているか、確認します。
# ls .ssh/
ターゲットノードにコピーされていることが確認できたら、コントロールノードからターゲットノードにSSH接続します。
※「%ターゲットノードのIPアドレス%」はお使いの環境に応じて変更します。
$ ssh root@%ターゲットノードのIPアドレス%
3.4 インベントリファイルの設定
インベントリファイルにターゲットノードを設定します。
設定ファイルの書き方は有効になっているインベントリープラグインによって異なります。
今回は一般的なINIとYAMLでの書き方を紹介します。
3.4.1 INIで書いた場合
INIで記載した場合は「/etc/ansible/hosts」に以下のような内容のファイルを作成します。
maiserver.com
[webservers-target]
webserver1.com
webserver2.com
[dbservers-target]
192.168.10.1
192.168.10.2
IPアドレスやドメイン名を列挙することが可能です。
また、角括弧内の中に名前を記載し、その下にIPアドレスやドメイン名を並べてグループとして扱い、グルーピングした単位で構成を管理できます。
3.4.2 YAMLで書いた場合
YAMLで書いた場合は以下のような内容を記載します。
all:
hosts:
mail1:
mailserver.com:
children:
webservers-target:
hosts:
webserver1.com
webserver2.com
dbservers-target:
hosts:
192.168.10.1
192.168.10.2
YAML形式ではINI形式よりも複雑な設定が可能です。
allの直下のhostはグループに所属しないホストの情報を記述します。
children以下にグループに所属するホストを記述します。
3.5 疎通テスト
最後にAnsibleのコントロールノードからターゲットノードに接続できるか、疎通テストを実施します。
コントロールノードの環境にて以下のコマンドを実行し、ターゲットノードにpingを実行します。
$ ansible all -m ping
mailserver.com | success >> {
"changed": false,
"ping": "pong"
}
webserver1.com | success >> {
"changed": false,
"ping": "pong"
}
webserver2.com | success >> {
"changed": false,
"ping": "pong"
}
192.168.10.1 | success >> {
"changed": false,
"ping": "pong"
}
192.168.10.2 | success >> {
"changed": false,
"ping": "pong"
}
コマンドを実行すると、各ターゲットノードに対してpingの実行に成功したか、実行結果が表示されます。
4. 代表的なAnsibleコマンド
Ansibleではいろいろなコマンドを用意していますが、そのなかでも代表的なAnsibleコマンドを紹介します。
4.1 Playbook
ansible-playbookコマンドはPlaybookの内容をターゲットノードで実行するコマンドです。
Playbookとは、ターゲットノードのAnsibleの設定からデプロイメントや設定・管理の状況を定義するファイルです。Playbookは、YAML形式でターゲットノードの状況を設定しますが、やりたいことによって書き方が異なります。
Ansibleの公式ドキュメントにやりたいこと毎に解説されており、GitHubにはPlaybookの書き方のサンプルが公開されています。
Playbookの詳しい書き方を知りたい方は、公式ドキュメントと一緒にGitHubのサンプルをご参考にしてください。
▸【公式ドキュメント】Playbook
▸【GitHub】Ansible Examples
5. まとめ
今回はAnsibleの入門者向けにAnsibleでできることや環境構築手順を解説しました。構成管理ツールはたくさんありますが、Ansibleを利用すると、エージェントのインストールが不要であったり、冪等性が確保されていたりとメリットがあります。
ぜひこの記事を参考にして、Ansibleの環境を構築して、構成管理をしてみてください。