【Ansible入門】構成管理環境の学習手順をわかりやすく解説!

    • このページをはてなブックマークに追加

    公開日:2021年06月18日 最終更新日:2021年06月24日

    最近Ansibleを耳にすることが多くなったでしょう。Ansibleとは構成管理ツールの1つです。今回は、入門者向けにAnsibleでできることや環境構築手順をわかりやすく紹介します。この記事が学習の参考になれば幸いです。

    1. 【初心者向け】Ansibleとは?

    出典:USE CASES|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 [email protected]%ターゲットノードの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の環境を構築して、構成管理をしてみてください。


    ▲ページトップへ戻る


    Ansible関連の求人情報をチェック!

    最新の求人情報をチェック!

    月額単価80万円〜90万円
    勤務地 東京都 北区
    勤務地 埼玉県
    • このページをはてなブックマークに追加

    おすすめ記事

  • ピックアップ

    正社員

    【Linux】インフラエンジニア|各種システムの要件定義・運用保守 NEW

    年収 :300万円〜

    新規サービスの開発支援、及びメンテナンス自社での新規に検討している製品、サービスの開発 顧客サポ...

    株式会社デジタルトランスフォーメーション

    フリーランス

    【Solaris/Linux/Windows】インフラエンジニア★インターネット公開システムの運用保守

    月額単価 :80万円〜90万円

    インターネット公開システムの運用保守業務(基盤) 運用支援対象の2システムを基盤担当3名で担当頂き...

    正社員

    【Linux】ITエンジニア|インフラプロジェクトの対応

    年収 :350万円〜

    ◆インフラプロジェクト対応(サーバ構築・障害調査・設定変更など保守運用) ・既存サーバのバージョン...

    アイクラフト株式会社

    正社員

    【インフラエンジニア】自社及び親会社のインフラシステム構築

    年収 :450万円〜750万円

    インフラエンジニアとして、自社又はグループ会社の開発/保守/運用等の案件に携わって頂きます。複数の...

    ジグノシステムジャパン株式会社