Ubuntu22.04にAnsibleをインストールして構成する方法
序章
構成管理システムは、管理者および運用チームのために、多数のサーバーを制御するプロセスを合理化するように設計されています。 これらを使用すると、1つの中央の場所から自動化された方法で多くの異なるシステムを制御できます。
Linuxシステムで利用できるChefやPuppetなど、多くの一般的な構成管理ツールがありますが、これらは多くの場合、多くの人が望んでいる、または必要としているよりも複雑です。 Ansible は、SSHを使用して自動化タスクを実行し、YAMLファイルを使用してプロビジョニングの詳細を定義する、ノードに特別なソフトウェアをインストールする必要のないアーキテクチャを提供するため、これらのオプションの優れた代替手段です。
このガイドでは、Ubuntu 22.04サーバーにAnsibleをインストールする方法について説明し、このソフトウェアの使用方法の基本について説明します。 構成管理ツールとしてのAnsibleの概要については、Ansibleを使用した構成管理の概要を参照してください。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
1つのAnsibleコントロールノード:Ansibleコントロールノードは、SSH経由でAnsibleホストに接続して制御するために使用するマシンです。 Ansibleコントロールノードは、ローカルマシンまたはAnsibleの実行専用のサーバーのいずれかですが、このガイドでは、コントロールノードがUbuntu22.04システムであると想定しています。 制御ノードに次のものがあることを確認してください。
- sudo権限を持つroot以外のユーザー。 これを設定するには、 Ubuntu22.04の初期サーバーセットアップガイドのステップ2および3に従うことができます。 ただし、Ansibleコントロールノードとしてリモートサーバーを使用している場合は、このガイドのすべての手順に従う必要があることに注意してください。 そうすることで、サーバー上にファイアウォールを構成します。
ufw
root以外のユーザープロファイルへの外部アクセスを有効にします。どちらもリモートサーバーを安全に保つのに役立ちます。 - このユーザーに関連付けられているSSHキーペア。 これを設定するには、 Ubuntu22.04でSSHキーを設定する方法に関するガイドのステップ1に従うことができます。
- sudo権限を持つroot以外のユーザー。 これを設定するには、 Ubuntu22.04の初期サーバーセットアップガイドのステップ2および3に従うことができます。 ただし、Ansibleコントロールノードとしてリモートサーバーを使用している場合は、このガイドのすべての手順に従う必要があることに注意してください。 そうすることで、サーバー上にファイアウォールを構成します。
-
1つ以上のAnsibleホスト:Ansibleホストは、Ansibleコントロールノードが自動化するように構成されている任意のマシンです。 このガイドでは、AnsibleホストがリモートUbuntu22.04サーバーであることを前提としています。 各Ansibleホストに次のものがあることを確認してください。
- AnsibleコントロールノードのSSH公開鍵がに追加されました
authorized_keys
システムユーザーの。 このユーザーは、rootまたはsudo権限を持つ通常のユーザーのいずれかです。 これを設定するには、 Ubuntu22.04でSSHキーを設定する方法のステップ2に従うことができます。
- AnsibleコントロールノードのSSH公開鍵がに追加されました
ステップ1—Ansibleをインストールする
To begin using Ansible as a means of managing your server infrastructure, you need to install the Ansible software on the machine that will serve as the Ansible control node.
From your control node, run the following command to include the official project’s PPA (personal package archive) in your system’s list of sources:
- sudo apt-add-repository ppa:ansible/ansible
プレス ENTER
when prompted to accept the PPA addition.
Next, refresh your system’s package index so that it is aware of the packages available in the newly included PPA:
- sudo apt update
このアップデートに続いて、Ansibleソフトウェアを次のコマンドでインストールできます。
- sudo apt install ansible
これで、Ansibleコントロールノードに、ホストの管理に必要なすべてのソフトウェアが含まれるようになりました。 Next, we will go over how to add your hosts to the control node’s inventory file so that it can control them.
ステップ2—インベントリファイルの設定
インベントリファイルには、Ansibleで管理するホストに関する情報が含まれています。 インベントリファイルには1台から数百台のサーバーを含めることができ、ホストはグループとサブグループに編成できます。 インベントリファイルは、プレイブックやテンプレート内で使用するために、特定のホストまたはグループに対してのみ有効な変数を設定するためにもよく使用されます。 一部の変数は、プレイブックの実行方法にも影響を与える可能性があります。 ansible_python_interpreter
すぐに表示される変数。
To edit the contents of your default Ansible inventory, open the /etc/ansible/hosts
Ansibleコントロールノードで、選択したテキストエディタを使用してファイルを作成します。
- sudo nano /etc/ansible/hosts
注:Ansibleは通常、デフォルトのインベントリファイルを次の場所に作成しますが etc/ansible/hosts
、ニーズに合った場所にインベントリファイルを自由に作成できます。 この場合、カスタムインベントリファイルへのパスを -i
Ansibleコマンドとプレイブックを実行するときのパラメーター。 プロジェクトごとのインベントリファイルを使用することは、間違ったサーバーグループでプレイブックを実行するリスクを最小限に抑えるための良い方法です。
Ansibleインストールによって提供されるデフォルトのインベントリファイルには、インベントリを設定するための参照として使用できるいくつかの例が含まれています。 次の例では、 [servers]
3つの異なるサーバーがあり、それぞれがカスタムエイリアス server1 、 server2 、およびserver3で識別されます。 強調表示された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
The all:vars
サブグループは ansible_python_interpreter
このインベントリに含まれるすべてのホストに有効なホストパラメータ。 このパラメータは、リモートサーバーが /usr/bin/python3
代わりにPython3実行可能ファイル /usr/bin/python
(Python 2.7)、これは最近の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 として接続し、デフォルトのインベントリからすべてのノードで接続テストを実行します。 The 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
任意のコマンドに置き換えることができます。
以前に行ったのと同様に、アドホックコマンドを介してAnsibleモジュールを実行することもできます。 ping
接続をテストするためのモジュール。 たとえば、次のように使用できます apt
最新バージョンをインストールするモジュール vim
インベントリ内のすべてのサーバー:
- ansible all -m apt -a "name=vim state=latest" -u root
Ansibleコマンドを実行するときに、個々のホストだけでなく、グループやサブグループもターゲットにすることができます。 たとえば、これはあなたがチェックする方法です uptime
のすべてのホストの servers
グループ:
- ansible servers -a "uptime" -u root
複数のホストをコロンで区切ることで指定できます。
- ansible server1:server2 -m ping -u root
プレイブックを実行してサーバーのセットアップを自動化する方法など、Ansibleの使用方法の詳細については、Ansibleリファレンスガイドを確認してください。
結論
このガイドでは、Ansibleをインストールし、Ansibleコントロールノードからアドホックコマンドを実行するためのインベントリファイルを設定しました。
中央のAnsibleコントローラーマシンからインフラストラクチャに接続して制御できることを確認したら、それらのホストで任意のコマンドまたはプレイブックを実行できます。
Ansibleの使用方法の詳細については、Ansibleチートシートガイドをご覧ください。