前書き

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

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

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

Ansibleの仕組み

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

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

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

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

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

前提条件

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

  • 2つ以上のUbuntu 18.04サーバー。 これらの1つは_Ansibleサーバー_として使用され、残りは_Ansibleホスト_として使用されます。 それぞれに、 `+ sudo +`特権を持つ非* root *ユーザーと基本的なファイアウォールが設定されている必要があります。 これは、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 [Ubuntu 18.04の初期サーバーセットアップガイド]に従って設定できます。 このガイド全体の例では3つのAnsibleホストを指定していますが、表示されるコマンドと構成は任意の数のクライアントに合わせて調整できることに注意してください。

  • Ansibleサーバー上の非* root *ユーザー用に生成されたSSHキー。 これを行うには、https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-1804 [SSHキーを設定する方法]のガイドのステップ1に従ってください。 Ubuntu 18.04]。 このチュートリアルでは、キーペアをデフォルトの場所( +〜/ .ssh / id_rsa +)に保存することができ、パスワードで保護する必要はありません。

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

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

Ubuntu向けのAnsibleの最新バージョンを入手するには、プロジェクトのPPA(パーソナルパッケージアーカイブ)をシステムに追加できます。 ただし、これを行う前に、最初に `+ software-properties-common`パッケージがインストールされていることを確認する必要があります。 このソフトウェアは、これおよび他の独立したソフトウェアリポジトリの管理を容易にします。

sudo apt update
sudo apt install software-properties-common

次に、次のコマンドを入力してAnsible PPAを追加します。

sudo apt-add-repository ppa:ansible/ansible

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

次に、PPAで使用可能なパッケージを認識できるように、システムのパッケージインデックスをもう一度更新します。

sudo apt update

この更新後、Ansibleソフトウェアをインストールできます。

sudo apt install ansible

これで、Ansibleサーバーには、ホストの管理に必要なすべてのソフトウェアが含まれています。

手順2-AnsibleホストへのSSHアクセスの構成

前述のように、Ansibleは主にSSHを介してクライアントコンピューターと通信します。 パスワードベースのSSH認証を処理する機能は確かにありますが、SSHキーを使用すると、物事を簡単に保つことができます。

Ansibleサーバーで、 `+ cat +`コマンドを使用して、非ルートユーザーのSSH公開キーファイルの内容を端末の出力に出力します。

cat ~/.ssh/id_rsa.pub

結果の出力をクリップボードにコピーしてから、新しいターミナルを開き、SSHを使用してAnsibleホストの1つに接続します。

ssh @

クライアントマシンの* root *ユーザーに切り替えます。

su -
  • root *ユーザーとして、 `〜/ .ssh +`ディレクトリ内の ` authorized_keys +`を開きます:

nano ~/.ssh/authorized_keys

ファイルに、AnsibleサーバーユーザーのSSHキーを貼り付け、ファイルを保存してエディターを閉じます( + CTRL + X ++ Y +、次に `+ ENTER `を押します)。 次に、 ` exit +`コマンドを実行して、ホストの非* root *ユーザーに戻ります。

exit

最後に、Ansibleは `+ / usr / bin / python `にあるPythonインタープリターを使用してモジュールを実行するため、Ansibleが通信できるようにホストにPython 2をインストールする必要があります。 次のコマンドを実行して、ホストのパッケージインデックスを更新し、 ` python`パッケージをインストールします。

sudo apt update
sudo apt install python

これに続いて、 `+ exit +`コマンドをもう一度実行してクライアントへの接続を閉じることができます:

exit

Ansibleサーバーで制御するサーバーごとにこのプロセスを繰り返します。 次に、Ansibleの `+ hosts +`ファイルを使用してこれらのホストに接続するようにAnsibleサーバーを設定します。

ステップ3-Ansibleホストのセットアップ

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

次のように、 `+ sudo +`権限でファイルを開きます:

sudo nano /etc/ansible/hosts

ファイル内には、コメントアウトされたいくつかの設定例があります(各行の前に `#`が付いています)。 これらの例は、それぞれにリストされているホストが構成されているため、実際には機能しません。 ただし、将来、より複雑なシナリオを実装する場合は、これらの例をファイルに保存して構成に役立てます。

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

[]
ansible_host=

この例では、「+ group_name 」はその下にリストされたサーバーを1つの単語で参照できる組織タグであり、「 alias +」は1つの特定のサーバーを参照する名前です。

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

これを正しく設定した場合、パスワードの入力を求められるべきではありません。 デモンストレーションの目的で、ホストのIPアドレスが「203.0.113.1 +」、「 203.0.113.2+」、および「203.0.113.3」であると想定します。 これらを個別に「+ host1 」、「 host2 」、「 host3 」、または「 servers +」という名前のグループとして参照できるように設定します。

これは、これを達成するために `+ hosts`ファイルに追加するブロックです:

/ etc / ansible / hosts

[servers]
host1 ansible_host=
host2 ansible_host=
host3 ansible_host=

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

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

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

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

「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_user: root

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

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

ステップ4-簡単な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がすべてのホストに接続していることを確認するための基本的なテストです。

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

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 Playbookは、サーバー構成とマルチマシン展開を管理するための強力でシンプルな方法です。 Playbookの概要については、https://www.digitalocean.com/community/tutorials/configuration-management-101-writing-ansible-playbooks [このガイド]を参照してください。 さらに、ツールの詳細については、https://docs.ansible.com/ansible/latest/index.html [公式のAnsibleドキュメント]を確認することをお勧めします。