Ubuntu 16.04でAnsibleをインストールおよび構成する方法

前書き

構成管理システムは、管理者と運用チームが多数のサーバーを簡単に制御できるように設計されています。 これらを使用すると、1つの中央ロケーションから多くの異なるシステムを自動化された方法で制御できます。

Linuxシステムで使用できるChefやPuppetなど、多くの一般的な構成管理システムがありますが、多くの人が望むまたは必要とするよりも複雑です。 * Ansible *は、これらのオプションに代わる優れた選択肢です。開始するオーバーヘッドがはるかに少ないためです。

このガイドでは、Ubuntu 16.04サーバーにAnsibleをインストールする方法について説明し、ソフトウェアの使用方法の基本について説明します。

Ansibleの仕組み

Ansibleは、Ansibleコンポーネントがインストールおよび構成されたコンピューターからクライアントマシンを構成することで機能します。

リモートマシンから情報を取得し、コマンドを発行し、ファイルをコピーするために、通常のSSHチャネルを介して通信します。 このため、Ansibleシステムでは、追加のソフトウェアをクライアントコンピューターにインストールする必要はありません。

これは、Ansibleがサーバーの管理を簡素化する1つの方法です。 SSHポートが公開されているサーバーは、ライフサイクルのどの段階にあるかにかかわらず、Ansibleの構成傘下に置くことができます。

SSHを介して管理できるコンピューターであれば、Ansibleを介して管理することもできます。

Ansibleはモジュール式のアプローチを採用しており、メインシステムの機能を使用して特定のシナリオに対処するための拡張を容易にします。 モジュールは任意の言語で記述でき、標準のJSONで通信できます。

構成ファイルは、その表現力豊かな性質と一般的なマークアップ言語との類似性により、主にYAMLデータシリアル化形式で記述されています。 Ansibleは、コマンドラインツールまたはPlaybookと呼ばれる構成スクリプトのいずれかを介してクライアントと対話できます。

前提条件

このチュートリアルを実行するには、次のものが必要です。

ステップ1-Ansibleのインストール

さまざまなサーバーを管理する手段としてAnsibleを検討するには、少なくとも1台のマシンにAnsibleソフトウェアをインストールする必要があります。 このセクションでは、Ubuntu 16.04サーバーを使用します。

UbuntuでAnsibleを入手する最良の方法は、プロジェクトのPPA(個人パッケージアーカイブ)をシステムに追加することです。 次のコマンドを入力して、Ansible PPAを追加できます。

sudo apt-add-repository ppa:ansible/ansible

「+ ENTER +」を押して、PPAの追加を受け入れます。

次に、PPAで利用可能なパッケージを認識できるように、システムのパッケージインデックスを更新する必要があります。 その後、ソフトウェアをインストールできます。

sudo apt-get update
sudo apt-get install ansible

前述したように、Ansibleは主にSSHを介してクライアントコンピューターと通信します。 パスワードベースのSSH認証を処理する機能は確かにありますが、SSHキーは物事をシンプルに保つのに役立ちます。 SSHキーをまだセットアップしていない場合は、前提条件にリンクされているチュートリアルに従ってください。

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

手順2-Ansibleホストの構成

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

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

sudo nano /etc/ansible/hosts

多くの設定例が含まれるファイルが表示されますが、これらのホストは構成されているため、実際には機能しません。 まず、各ファイルの前に「#」を追加して、このファイルのすべての行をコメントアウトします。

将来さらに複雑なシナリオを実装したい場合は、これらの例をファイルに保存して構成に役立てます。

すべての行がコメント化されたら、実際のホストの追加を開始できます。

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

ホストファイルの例

[]
alias ansible_ssh_host=

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

したがって、このシナリオでは、Ansibleで制御する3台のサーバーがあることを想像しています。 これらのサーバーには、Ansibleサーバーから次のように入力してアクセスできます。

これを正しく設定した場合、パスワードの入力を求められるべきではありません。 サーバーのIPアドレスは「192.0.2.1 +」、「 192.0.2.2+」、および「192.0.2.3」であると想定します。 これを設定して、これらを個別に「+ host1 」、「 host2 」、「 host3 」、またはグループとして「 servers +」として参照できるようにします。

これは、これを実現するためにホストファイルに追加する必要があるブロックです。

[servers]
host1 ansible_ssh_host=
host2 ansible_ssh_host=
host3 ansible_ssh_host=

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

現在の設定で、Ansibleを使用してこれらのホストのいずれかに接続しようとすると、コマンドは失敗します(rootユーザーとして動作していない場合)。 これは、SSHキーがリモートシステムのルートユーザー用に埋め込まれており、Ansibleがデフォルトで現在のユーザーとして接続しようとするためです。 接続を試行すると、次のエラーが発生します。

Ansible接続エラー

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

Ansibleサーバーでは、* demo *というユーザーを使用しています。 Ansibleは、 `+ ssh demo @ server +`を使用して各ホストに接続しようとします。 デモユーザーがリモートシステムにいない場合、これは機能しません。

「servers」グループ内のすべてのサーバーに、rootユーザーを使用して接続するように指示するファイルを作成できます。

これを行うために、 `+ group_vars +`と呼ばれるAnsible構成構造にディレクトリを作成します。 このフォルダー内で、構成するグループごとにYAML形式のファイルを作成できます。

sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/servers

ここに設定を配置できます。 YAMLファイルは「-」で始まるため、その部分を忘れないでください。

/ etc / ansible / group_vars / servers

---
ansible_ssh_user: root

終了したら、このファイルを保存して閉じます。

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

手順3-簡単なAnsibleコマンドの使用

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

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

ansible -m ping all

ping出力

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

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

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

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

「すべて」はすべてのホストを意味します。 グループを簡単に指定できます:

ansible -m ping servers

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

ansible -m ping host1

コロンで区切ることにより、複数のホストを指定できます。

ansible -m ping host1:host2

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

pingモジュールは実際には引数を取りませんが、別のコマンドを試して、その動作を確認することができます。 「+ -a +」と入力して、スクリプトに引数を渡します。

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

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

シェル出力

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を使用してサーバーを操作するための優れた基盤を設定しましたが、Playbooksを使用してリモートコンピューターの構成を自動化する方法については、今後の記事で重荷を取り上げます。

Related