序章

構成管理システムは、管理者や運用チームが多数のサーバーを簡単に制御できるように設計されています。 これらを使用すると、1つの中央の場所から自動化された方法で多くの異なるシステムを制御できます。 Linuxシステムで利用できるChefやPuppetなどの一般的な構成管理システムは数多くありますが、これらは多くの場合、多くの人が望んでいる、または必要としているよりも複雑です。 Ansible は、開始するためのオーバーヘッドがはるかに小さいため、これらのオプションの優れた代替手段です。

Ansibleは、Ansibleコンポーネントがインストールおよび構成されたコンピューターからクライアントマシンを構成することで機能します。 リモートマシンから情報を取得し、コマンドを発行し、ファイルをコピーするために、通常のSSHチャネルを介して通信します。 このため、Ansibleシステムでは、クライアントコンピューターに追加のソフトウェアをインストールする必要はありません。 これは、Ansibleがサーバーの管理を簡素化する1つの方法です。 SSHポートが公開されているサーバーは、ライフサイクルのどの段階にあるかに関係なく、Ansibleの構成の傘下に置くことができます。

Ansibleはモジュラーアプローチを採用しているため、メインシステムの機能を使用して特定のシナリオを処理するように簡単に拡張できます。 モジュールは任意の言語で記述でき、標準のJSONで通信できます。 構成ファイルは、その表現力と一般的なマークアップ言語との類似性により、主にYAMLデータシリアル化形式で記述されます。 Ansibleは、コマンドラインツールまたはPlaybooksと呼ばれる構成スクリプトを介してクライアントと対話できます。

このガイドでは、CentOS 7サーバーにAnsibleをインストールし、ソフトウェアの使用方法の基本を学びます。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • 1台のCentOS7サーバー。 CentOS 7 を使用したサーバーの初期設定の手順に従って、root以外のユーザーを作成し、パスワードなしでサーバーに接続できることを確認します。

ステップ1—Ansibleをインストールする

さまざまなサーバーを管理する手段としてAnsibleの調査を開始するには、少なくとも1台のマシンにAnsibleソフトウェアをインストールする必要があります。

CentOS 7のAnsibleを入手するには、まずCentOS7EPELリポジトリがインストールされていることを確認します。

  1. sudo yum install epel-release

リポジトリがインストールされたら、yumを使用してAnsibleをインストールします。

  1. sudo yum install ansible

これで、Ansibleを介してサーバーを管理するために必要なすべてのソフトウェアが揃いました。

ステップ2—Ansibleホストの設定

Ansibleは、「hosts」ファイルを介して認識しているすべてのサーバーを追跡します。 他のコンピューターとの通信を開始する前に、まずこのファイルを設定する必要があります。

次のようなroot権限でファイルを開きます。

  1. sudo vi /etc/ansible/hosts

多くの設定例がコメントアウトされたファイルが表示されます。 将来、より複雑なシナリオを実装する場合にAnsibleの構成を学習するのに役立つように、これらの例をファイルに保存してください。

hostsファイルはかなり柔軟性があり、いくつかの異なる方法で構成できます。 使用する構文は次のようになります。

ホストファイルの例
[group_name]
alias ansible_ssh_host=your_server_ip

group_nameは、その下にリストされているサーバーを1つの単語で参照できるようにする組織タグです。 エイリアスは、そのサーバーを参照するための単なる名前です。

Ansibleで制御したいサーバーが3つあると想像してください。 AnsibleはSSHを介してクライアントコンピューターと通信するため、管理する各サーバーには、次のように入力してAnsibleサーバーからアクセスできる必要があります。

  1. ssh [email protected]your_server_ip

パスワードの入力を求められることはありません。 Ansibleには確かにパスワードベースのSSH認証を処理する機能がありますが、SSHキーは物事をシンプルに保つのに役立ちます。 チュートリアルDigitalOceanドロップレットでSSHキーを使用する方法に従って、まだ行っていない場合は、各ホストにSSHキーを設定できます。

サーバーのIPアドレスは192.0.2.1192.0.2.2、および192.0.2.3であると想定します。 これらを個別にhost1host2host3として参照できるように、またはグループとしてserversとして参照できるように設定しましょう。 これを構成するには、次のブロックをhostsファイルに追加します。

/ etc / ansible / hosts
[servers]
host1 ansible_ssh_host=192.0.2.1
host2 ansible_ssh_host=192.0.2.2
host3 ansible_ssh_host=192.0.2.3

ホストは複数のグループに属することができ、グループはすべてのメンバーのパラメーターを構成できます。 これを試してみましょう。

Ansibleは、デフォルトで、現在のユーザー名を使用してリモートホストに接続しようとします。 そのユーザーがリモートシステムに存在しない場合、接続を試みると次のエラーが発生します。

Ansible connection error
host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }

sammyユーザーを使用して「servers」グループのサーバーに接続する必要があることをAnsibleに具体的に伝えましょう。 group_varsという名前のディレクトリをAnsible構成構造に作成します。

  1. sudo mkdir /etc/ansible/group_vars

このフォルダー内で、構成するグループごとにYAML形式のファイルを作成できます。

  1. sudo nano /etc/ansible/group_vars/servers

次のコードをファイルに追加します。

/ etc / ansible / group_vars / servers
---
ansible_ssh_user: sammy

YAMLファイルは「—」で始まるので、その部分を忘れないようにしてください。

終了したら、このファイルを保存して閉じます。 これで、Ansibleは、現在のユーザーに関係なく、serversグループに常にsammyユーザーを使用します。

グループの関連付けに関係なく、すべてのサーバーの構成の詳細を指定する場合は、それらの詳細を/etc/ansible/group_vars/allのファイルに入れることができます。 /etc/ansible/host_varsのディレクトリの下にファイルを作成することにより、個々のホストを構成できます。

ステップ3—単純なAnsibleコマンドの使用

ホストがセットアップされ、ホストに正常に接続できるように十分な構成の詳細が設定されたので、最初のコマンドを試すことができます。

次のように入力して、構成したすべてのサーバーにpingを実行します。

  1. ansible -m ping all

Ansibleは次のような出力を返します:

Output
host1 | SUCCESS => { "changed": false, "ping": "pong" } host3 | SUCCESS => { "changed": false, "ping": "pong" } host2 | SUCCESS => { "changed": false, "ping": "pong" }

これは、Ansibleがすべてのホストに接続していることを確認するための基本的なテストです。

コマンドの-m ping部分は、「ping」モジュールを使用するためのAnsibleへの指示です。 これらは基本的に、リモートホストで実行できるコマンドです。 pingモジュールは、Linuxの通常のpingユーティリティと同じようにさまざまな方法で動作しますが、代わりにAnsible接続をチェックします。

allの部分は、「すべてのホスト」を意味します。 グループを簡単に指定することもできます。

  1. ansible -m ping servers

個々のホストを指定することもできます。

  1. ansible -m ping host1

複数のホストをコロンで区切って指定できます。

  1. ansible -m ping host1:host2

shellモジュールを使用すると、ターミナルコマンドをリモートホストに送信して結果を取得できます。 たとえば、host1マシンのメモリ使用量を調べるには、次を使用できます。

  1. ansible -m shell -a 'free -m' host1

ご覧のとおり、-aスイッチを使用して引数をスクリプトに渡します。 出力は次のようになります。

Output
host1 | SUCCESS | rc=0 >> total used free shared buffers cached Mem: 3954 227 3726 0 14 93 -/+ buffers/cache: 119 3834 Swap: 0 0 0

結論

これで、制御するサーバーと通信するようにAnsibleサーバーを構成する必要があります。 ansibleコマンドを使用して簡単なタスクをリモートで実行する方法を知っている各ホストとAnsibleが通信できることを確認できます。

これは便利ですが、この記事ではAnsibleの最も強力な機能であるPlaybooksについては説明していません。 Ansibleを介してサーバーを操作するための優れた基盤を構成したので、次のステップは、Playbookを使用して手間のかかる作業を行う方法を学ぶことです。 詳細については、 Configuration Management 101:AnsiblePlaybookの作成およびUbuntuでシステム構成を自動化するAnsiblePlaybookを作成する方法を参照してください。