前書き

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

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

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

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

前提条件

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

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

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

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

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

sudo yum install epel-release

リポジトリをインストールしたら、 `+ yum +`でAnsibleをインストールします。

sudo yum install ansible

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

手順2-Ansibleホストの構成

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

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

sudo vi /etc/ansible/hosts

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

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

ホストファイルの例

[]
alias ansible_ssh_host=

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

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

パスワードの入力を求められるべきではありません。 Ansibleは確かにパスワードベースのSSH認証を処理する機能を備えていますが、SSHキーは物事をシンプルに保つのに役立ちます。 チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets[DigitalOcean DropletsでSSHキーを使用する方法]に従ってSSHキーを設定できます。まだホストがない場合は、各ホスト。

サーバーのIPアドレスは「192.0.2.1 +」、「 192.0.2.2+」、および「192.0.2.3」であると想定します。 これを設定して、これらを個別に「+ host1 」、「 host2 」、「 host3 」、またはグループとして「 servers +」として参照できるようにします。 これを設定するには、このブロックをホストファイルに追加します。

/ etc / ansible / hosts

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

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

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

Ansible connection errorhost1 | UNREACHABLE! => {
   "changed": false,
   "msg": "Failed to connect to the host via ssh.",
   "unreachable": true
}
  • sammy *ユーザーで「servers」グループのサーバーに接続する必要があることを具体的にAnsibleに伝えましょう。 `+ group_vars +`という名前のAnsible構成構造にディレクトリを作成します。

sudo mkdir /etc/ansible/group_vars

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

sudo nano /etc/ansible/group_vars/servers

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

/ etc / ansible / group_vars / servers

---
ansible_ssh_user:

YAMLファイルは「-」で始まるため、その部分を忘れないでください。

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

グループの関連付けに関係なく、すべてのサーバーの設定の詳細を指定する場合、それらの詳細を `+ / 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がすべてのホストに接続していることを確認するための基本的なテストです。

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

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

ansible -m ping servers

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

ansible -m ping host1

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

ansible -m ping host1:host2

`+ 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を使用してサーバーを操作するための優れた基盤を構成したので、次のステップは、Playbooksを使用して面倒な作業を行う方法を学習することです。 詳細については、https://www.digitalocean.com/community/tutorials/configuration-management-101-writing-ansible-playbooks [Configuration Management 101:Ansible Playbookの作成]およびhttps://www.digitalocean.com/をご覧ください。 community / tutorials / how-to-create-ansible-playbooks-to-automate-system-configuration-on-ubuntu [Ubuntuでシステム構成を自動化するAnsible Playbookの作成方法]