序章
構成管理システムは、管理者や運用チームが多数のサーバーを簡単に制御できるように設計されています。 これらを使用すると、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リポジトリがインストールされていることを確認します。
- sudo yum install epel-release
リポジトリがインストールされたら、Ansibleをインストールします yum
:
- sudo yum install ansible
これで、Ansibleを介してサーバーを管理するために必要なすべてのソフトウェアが揃いました。
ステップ2—Ansibleホストの設定
Ansibleは、「hosts」ファイルを介して認識しているすべてのサーバーを追跡します。 他のコンピューターとの通信を開始する前に、まずこのファイルを設定する必要があります。
次のようなroot権限でファイルを開きます。
- sudo vi /etc/ansible/hosts
多くの設定例がコメントアウトされたファイルが表示されます。 将来、より複雑なシナリオを実装する場合にAnsibleの構成を学習するのに役立つように、これらの例をファイルに保存してください。
hostsファイルはかなり柔軟性があり、いくつかの異なる方法で構成できます。 使用する構文は次のようになります。
[group_name]
alias ansible_ssh_host=your_server_ip
The group_name
は、その下にリストされているサーバーを1つの単語で参照できる組織タグです。 エイリアスは、そのサーバーを参照するための単なる名前です。
Ansibleで制御したいサーバーが3つあると想像してください。 AnsibleはSSHを介してクライアントコンピューターと通信するため、管理する各サーバーには、次のように入力してAnsibleサーバーからアクセスできる必要があります。
- ssh root@your_server_ip
パスワードの入力を求められることはありません。 Ansibleには確かにパスワードベースのSSH認証を処理する機能がありますが、SSHキーは物事をシンプルに保つのに役立ちます。 チュートリアルDigitalOceanドロップレットでSSHキーを使用する方法に従って、まだ行っていない場合は、各ホストにSSHキーを設定できます。
サーバーの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は、デフォルトで、現在のユーザー名を使用してリモートホストに接続しようとします。 そのユーザーがリモートシステムに存在しない場合、接続を試みると次のエラーが発生します。
Ansible connection errorhost1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
sammyユーザーを使用して「servers」グループのサーバーに接続する必要があることをAnsibleに具体的に伝えましょう。 と呼ばれるAnsible構成構造にディレクトリを作成します group_vars
.
- sudo mkdir /etc/ansible/group_vars
このフォルダー内で、構成するグループごとにYAML形式のファイルを作成できます。
- sudo nano /etc/ansible/group_vars/servers
次のコードをファイルに追加します。
---
ansible_ssh_user: sammy
YAMLファイルは「—」で始まるので、その部分を忘れないようにしてください。
終了したら、このファイルを保存して閉じます。 これで、Ansibleは常にsammyユーザーを使用します servers
現在のユーザーに関係なく、グループ。
グループの関連付けに関係なく、すべてのサーバーの構成の詳細を指定する場合は、それらの詳細を次のファイルに入れることができます。 /etc/ansible/group_vars/all
. 個々のホストは、次のディレクトリの下にファイルを作成することで構成できます。 /etc/ansible/host_vars
.
ステップ3—単純なAnsibleコマンドの使用
ホストがセットアップされ、ホストに正常に接続できるように十分な構成の詳細が設定されたので、最初のコマンドを試すことができます。
次のように入力して、構成したすべてのサーバーにpingを実行します。
- ansible -m ping all
Ansibleは次のような出力を返します:
Outputhost1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
これは、Ansibleがすべてのホストに接続していることを確認するための基本的なテストです。
The -m ping
コマンドの一部は、「ping」モジュールを使用するためのAnsibleへの指示です。 これらは基本的に、リモートホストで実行できるコマンドです。 pingモジュールは、Linuxの通常のpingユーティリティと同じようにさまざまな方法で動作しますが、代わりにAnsible接続をチェックします。
The all
部分は「すべてのホスト」を意味します。 グループを簡単に指定することもできます。
- ansible -m ping servers
個々のホストを指定することもできます。
- ansible -m ping host1
複数のホストをコロンで区切って指定できます。
- ansible -m ping host1:host2
The shell
モジュールを使用すると、ターミナルコマンドをリモートホストに送信して結果を取得できます。 たとえば、host1マシンのメモリ使用量を調べるには、次を使用できます。
- ansible -m shell -a 'free -m' host1
ご覧のとおり、スクリプトに引数を渡すには、 -a
スイッチ。 出力は次のようになります。
Outputhost1 | 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を作成する方法を参照してください。