Ubuntu16.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は、コマンドラインツールまたはPlaybooksと呼ばれる構成スクリプトを介してクライアントと対話できます。
前提条件
このチュートリアルに従うには、次のものが必要です。
- sudo非rootユーザーとSSHキーを備えた1つのUbuntu16.04サーバー。これは、この初期サーバーセットアップチュートリアル(ステップ4を含む)に従ってセットアップできます。
ステップ1—Ansibleをインストールする
さまざまなサーバーを管理する手段としてAnsibleの調査を開始するには、少なくとも1台のマシンにAnsibleソフトウェアをインストールする必要があります。 このセクションでは、Ubuntu16.04サーバーを使用します。
Ansible for Ubuntuを入手する最良の方法は、プロジェクトのPPA(パーソナルパッケージアーカイブ)をシステムに追加することです。 次のコマンドを入力して、AnsiblePPAを追加できます。
- 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」ファイルを介して認識しているすべてのサーバーを追跡します。 他のコンピューターとの通信を開始する前に、まずこのファイルを設定する必要があります。
次のようなroot権限でファイルを開きます。
- sudo nano /etc/ansible/hosts
多くの設定例を含むファイルが表示されますが、これらのホストが構成されているため、実際にはどれも機能しません。 まず、各行の前に「#」を追加して、このファイルのすべての行をコメントアウトしましょう。
将来、より複雑なシナリオを実装する場合に備えて、これらの例をファイルに保存します。
すべての行がコメント化されたら、実際のホストの追加を開始できます。
hostsファイルはかなり柔軟性があり、いくつかの異なる方法で構成できます。 使用する構文は次のようになります。
[group_name]
alias ansible_ssh_host=your_server_ip
group_nameは、その下にリストされているサーバーを1つの単語で参照できるようにする組織タグです。 エイリアスは、そのサーバーを参照するための単なる名前です。
したがって、このシナリオでは、Ansibleで制御するサーバーが3つあると想像しています。 これらのサーバーには、Ansibleサーバーから次のように入力してアクセスできます。
- ssh root@your_server_ip
これを正しく設定した場合、パスワードの入力を求められることはありません。 サーバーのIPアドレスは 192.0.2.1
, 192.0.2.2
、 と 192.0.2.3
. これらを個別に参照できるように設定します host1
, host2
、 と host3
、またはグループとして servers
.
これを実現するために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を使用してこれらのホストのいずれかに接続しようとすると、コマンドは失敗します(rootユーザーとして操作していない場合)。 これは、SSHキーがリモートシステムのrootユーザーに埋め込まれており、Ansibleがデフォルトで現在のユーザーとして接続しようとするためです。 接続しようとすると、次のエラーが発生します。
host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
Ansibleサーバーでは、demoというユーザーを使用しています。 Ansibleは各ホストに接続しようとします ssh demo@server
. デモユーザーがリモートシステムを使用していない場合、これは機能しません。
「servers」グループ内のすべてのサーバーにrootユーザーを使用して接続するように指示するファイルを作成できます。
これを行うには、Ansible構成構造に次のディレクトリを作成します。 group_vars
. このフォルダー内で、構成するグループごとにYAML形式のファイルを作成できます。
- sudo mkdir /etc/ansible/group_vars
- sudo nano /etc/ansible/group_vars/servers
ここに構成を入れることができます。 YAMLファイルは「—」で始まるので、その部分を忘れないようにしてください。
---
ansible_ssh_user: root
終了したら、このファイルを保存して閉じます。
グループの関連付けに関係なく、すべてのサーバーの構成の詳細を指定する場合は、それらの詳細を次のファイルに入れることができます。 /etc/ansible/group_vars/all
. 個々のホストは、次のディレクトリの下にファイルを作成することで構成できます。 /etc/ansible/host_vars
.
ステップ3—単純なAnsibleコマンドの使用
ホストがセットアップされ、ホストに正常に接続できるように十分な構成の詳細が設定されたので、最初のコマンドを試すことができます。
次のように入力して、構成したすべてのサーバーにpingを実行します。
- ansible -m ping all
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
The -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を使用してリモートコンピューターの構成を自動化する方法については、今後の記事で説明します。