Ubuntu20.04にAnsibleをインストールして構成する方法
序章
構成管理システムは、管理者および運用チームのために、多数のサーバーを制御するプロセスを合理化するように設計されています。 これらを使用すると、1つの中央の場所から自動化された方法で多くの異なるシステムを制御できます。
Linuxシステムで利用できるChefやPuppetなど、多くの一般的な構成管理ツールがありますが、これらは多くの場合、多くの人が望んでいる、または必要としているよりも複雑です。 Ansible は、SSHを使用して自動化タスクを実行し、YAMLファイルを使用してプロビジョニングの詳細を定義する、ノードに特別なソフトウェアをインストールする必要のないアーキテクチャを提供するため、これらのオプションの優れた代替手段です。
このガイドでは、Ubuntu 20.04サーバーにAnsibleをインストールする方法について説明し、このソフトウェアの使用方法の基本について説明します。 構成管理ツールとしてのAnsibleの概要については、Ansibleを使用した構成管理の概要を参照してください。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
1つのAnsibleコントロールノード:Ansibleコントロールノードは、SSH経由でAnsibleホストに接続して制御するために使用するマシンです。 Ansibleコントロールノードは、ローカルマシンまたはAnsibleの実行専用のサーバーのいずれかですが、このガイドでは、コントロールノードがUbuntu20.04システムであると想定しています。 制御ノードに次のものがあることを確認してください。
- sudo権限を持つroot以外のユーザー。 これを設定するには、 Ubuntu20.04の初期サーバーセットアップガイドのステップ2および3に従うことができます。 ただし、Ansibleコントロールノードとしてリモートサーバーを使用している場合は、このガイドのすべての手順に従う必要があることに注意してください。 そうすることで、
ufw
を使用してサーバーにファイアウォールを構成し、root以外のユーザープロファイルへの外部アクセスを有効にします。どちらもリモートサーバーを安全に保つのに役立ちます。 - このユーザーに関連付けられているSSHキーペア。 これを設定するには、 Ubuntu20.04でSSHキーを設定する方法に関するガイドのステップ1に従うことができます。
- sudo権限を持つroot以外のユーザー。 これを設定するには、 Ubuntu20.04の初期サーバーセットアップガイドのステップ2および3に従うことができます。 ただし、Ansibleコントロールノードとしてリモートサーバーを使用している場合は、このガイドのすべての手順に従う必要があることに注意してください。 そうすることで、
-
1つ以上のAnsibleホスト:Ansibleホストは、Ansibleコントロールノードが自動化するように構成されている任意のマシンです。 このガイドでは、AnsibleホストがリモートUbuntu20.04サーバーであることを前提としています。 各Ansibleホストに次のものがあることを確認してください。
- システムユーザーの
authorized_keys
に追加されたAnsibleコントロールノードのSSH公開鍵。 このユーザーは、rootまたはsudo権限を持つ通常のユーザーのいずれかです。 これを設定するには、 Ubuntu20.04でSSHキーを設定する方法のステップ2に従うことができます。
- システムユーザーの
ステップ1—Ansibleをインストールする
サーバーインフラストラクチャを管理する手段としてAnsibleの使用を開始するには、Ansibleコントロールノードとして機能するマシンにAnsibleソフトウェアをインストールする必要があります。 そのためにデフォルトのUbuntuリポジトリを使用します。
まず、システムのパッケージインデックスを次のように更新します。
- sudo apt update
このアップデートに続いて、Ansibleソフトウェアを次のコマンドでインストールできます。
- sudo apt install ansible
インストールの確認を求められたら、Y
を押します。
これで、Ansibleコントロールノードに、ホストの管理に必要なすべてのソフトウェアが含まれるようになりました。 次に、Ansibleが管理対象ノードと通信できるようにインベントリファイルを設定する方法について説明します。
ステップ2—インベントリファイルの設定
インベントリファイルには、Ansibleで管理するホストに関する情報が含まれています。 インベントリファイルには1台から数百台のサーバーを含めることができ、ホストはグループとサブグループに編成できます。 インベントリファイルは、プレイブックやテンプレート内で使用するために、特定のホストまたはグループに対してのみ有効な変数を設定するためにもよく使用されます。 ansible_python_interpreter
変数のように、いくつかの変数は、プレイブックの実行方法にも影響を与える可能性があります。
デフォルトのAnsibleインベントリの内容を編集するには、Ansibleコントロールノードで、選択したテキストエディターを使用して/etc/ansible/hosts
ファイルを開きます。
- sudo nano /etc/ansible/hosts
注:Ansibleは通常etc/ansible/hosts
にデフォルトのインベントリファイルを作成しますが、ニーズに合った任意の場所にインベントリファイルを自由に作成できます。 この場合、Ansibleコマンドとプレイブックを実行するときに、-i
パラメーターを使用してカスタムインベントリファイルへのパスを指定する必要があります。 プロジェクトごとのインベントリファイルを使用することは、間違ったサーバーグループでプレイブックを実行するリスクを最小限に抑えるための良い方法です。
Ansibleインストールによって提供されるデフォルトのインベントリファイルには、インベントリを設定するための参照として使用できるいくつかの例が含まれています。 次の例では、[servers]
という名前のグループを定義し、それぞれがカスタムエイリアス server1 、 server2 、およびserver3で識別される3つの異なるサーバーを含みます。 ]。 強調表示されたIPをAnsibleホストのIPアドレスに置き換えてください。
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
all:vars
サブグループは、このインベントリに含まれるすべてのホストに有効なansible_python_interpreter
ホストパラメータを設定します。 このパラメーターは、リモートサーバーが/usr/bin/python
(Python 2.7)の代わりに/usr/bin/python3
Python3実行可能ファイルを使用することを確認します。これは最近のUbuntuバージョンにはありません。
終了したら、CTRL+X
、Y
、ENTER
の順に押してファイルを保存して閉じ、変更を確認します。
在庫を確認したいときはいつでも、以下を実行できます。
- ansible-inventory --list -y
これと同様の出力が表示されますが、インベントリファイルで定義されている独自のサーバーインフラストラクチャが含まれています。
Outputall:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
インベントリファイルを構成したので、Ansibleホストへの接続をテストするために必要なものがすべて揃っています。
ステップ3—接続のテスト
サーバーを含めるようにインベントリファイルを設定したら、Ansibleがこれらのサーバーに接続してSSH経由でコマンドを実行できるかどうかを確認します。
このガイドでは、Ubuntu root アカウントを使用します。これは、通常、新しく作成されたサーバーでデフォルトで使用できる唯一のアカウントであるためです。 Ansibleホストで既に通常のsudoユーザーが作成されている場合は、代わりにそのアカウントを使用することをお勧めします。
-u
引数を使用して、リモートシステムユーザーを指定できます。 提供されていない場合、Ansibleはコントロールノードで現在のシステムユーザーとして接続を試みます。
ローカルマシンまたはAnsibleコントロールノードから、次のコマンドを実行します。
- ansible all -m ping -u root
このコマンドは、Ansibleの組み込みの pingモジュールを使用して、 root として接続し、デフォルトのインベントリからすべてのノードで接続テストを実行します。 ping
モジュールは以下をテストします。
- ホストにアクセスできる場合。
- 有効なSSHクレデンシャルがある場合。
- ホストがPythonを使用してAnsibleモジュールを実行できるかどうか。
次のような出力が得られるはずです。
Outputserver1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
SSH経由でこれらのサーバーに接続するのが初めての場合は、Ansible経由で接続しているホストの信頼性を確認するように求められます。 プロンプトが表示されたら、yes
と入力し、ENTER
を押して確認します。
ホストから"pong"
の応答が返ってきたら、そのサーバーでAnsibleコマンドとプレイブックを実行する準備ができていることを意味します。
注:サーバーから正常な応答を返すことができない場合は、 Ansibleチートシートガイドで、さまざまな接続オプションを使用してAnsibleコマンドを実行する方法の詳細を確認してください。
ステップ4—アドホックコマンドの実行(オプション)
Ansibleコントロールノードがホストと通信できることを確認したら、サーバーでアドホックコマンドとプレイブックの実行を開始できます。
SSH経由でリモートサーバーで通常実行するコマンドは、インベントリファイルで指定されたサーバーでAnsibleを使用して実行できます。 例として、次の方法ですべてのサーバーのディスク使用量を確認できます。
- ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
...
強調表示されたコマンドdf -h
は、任意のコマンドに置き換えることができます。
接続をテストするためにping
モジュールで以前に行ったのと同様に、アドホックコマンドを介してAnsibleモジュールを実行することもできます。 たとえば、apt
モジュールを使用して、インベントリ内のすべてのサーバーに最新バージョンのvim
をインストールする方法は次のとおりです。
- ansible all -m apt -a "name=vim state=latest" -u root
Ansibleコマンドを実行するときに、個々のホストだけでなく、グループやサブグループもターゲットにすることができます。 たとえば、これは、servers
グループ内のすべてのホストのuptime
をチェックする方法です。
- ansible servers -a "uptime" -u root
複数のホストをコロンで区切ることで指定できます。
- ansible server1:server2 -m ping -u root
プレイブックを実行してサーバーのセットアップを自動化する方法など、Ansibleの使用方法の詳細については、Ansibleリファレンスガイドを確認してください。
結論
このガイドでは、Ansibleをインストールし、Ansibleコントロールノードからアドホックコマンドを実行するためのインベントリファイルを設定しました。
中央のAnsibleコントローラーマシンからインフラストラクチャに接続して制御できることを確認したら、それらのホストで任意のコマンドまたはプレイブックを実行できます。
Ansibleの使用方法の詳細については、Ansibleチートシートガイドをご覧ください。