序章

構成管理システムは、管理者および運用チームのために、多数のサーバーを制御するプロセスを合理化するように設計されています。 これらを使用すると、1つの中央の場所から自動化された方法で多くの異なるシステムを制御できます。

Linuxシステムで利用できるChefPuppetなど、多くの一般的な構成管理ツールがありますが、これらは多くの場合、多くの人が望んでいる、または必要としているよりも複雑です。 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に従うことができます。
  • 1つ以上のAnsibleホスト:Ansibleホストは、Ansibleコントロールノードが自動化するように構成されている任意のマシンです。 このガイドでは、AnsibleホストがリモートUbuntu22.04サーバーであることを前提としています。 各Ansibleホストに次のものがあることを確認してください。

    • AnsibleコントロールノードのSSH公開鍵がに追加されました authorized_keys システムユーザーの。 このユーザーは、rootまたはsudo権限を持つ通常のユーザーのいずれかです。 これを設定するには、 Ubuntu22.04でSSHキーを設定する方法のステップ2に従うことができます。

ステップ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:

  1. 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:

  1. sudo apt update

このアップデートに続いて、Ansibleソフトウェアを次のコマンドでインストールできます。

  1. 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コントロールノードで、選択したテキストエディタを使用してファイルを作成します。

  1. sudo nano /etc/ansible/hosts

:Ansibleは通常、デフォルトのインベントリファイルを次の場所に作成しますが etc/ansible/hosts、ニーズに合った場所にインベントリファイルを自由に作成できます。 この場合、カスタムインベントリファイルへのパスを -i Ansibleコマンドとプレイブックを実行するときのパラメーター。 プロジェクトごとのインベントリファイルを使用することは、間違ったサーバーグループでプレイブックを実行するリスクを最小限に抑えるための良い方法です。

Ansibleインストールによって提供されるデフォルトのインベントリファイルには、インベントリを設定するための参照として使用できるいくつかの例が含まれています。 次の例では、 [servers] 3つの異なるサーバーがあり、それぞれがカスタムエイリアス server1 server2 、およびserver3で識別されます。 強調表示されたIPをAnsibleホストのIPアドレスに置き換えてください。

/ etc / ansible / hosts
[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 それから YENTER 変更を確認します。

在庫を確認したいときはいつでも、以下を実行できます。

  1. ansible-inventory --list -y

これと同様の出力が表示されますが、インベントリファイルで定義されている独自のサーバーインフラストラクチャが含まれています。

Output
all: 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コントロールノードから、次のコマンドを実行します。

  1. ansible all -m ping -u root

このコマンドは、Ansibleの組み込みの pingモジュールを使用して、 root として接続し、デフォルトのインベントリからすべてのノードで接続テストを実行します。 The ping モジュールはテストします:

  • ホストにアクセスできる場合。
  • 有効なSSHクレデンシャルがある場合。
  • ホストがPythonを使用してAnsibleモジュールを実行できるかどうか。

次のような出力が得られるはずです。

Output
server1 | 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を使用して実行できます。 例として、次の方法ですべてのサーバーのディスク使用量を確認できます。

  1. 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 インベントリ内のすべてのサーバー:

  1. ansible all -m apt -a "name=vim state=latest" -u root

Ansibleコマンドを実行するときに、個々のホストだけでなく、グループやサブグループもターゲットにすることができます。 たとえば、これはあなたがチェックする方法です uptime のすべてのホストの servers グループ:

  1. ansible servers -a "uptime" -u root

複数のホストをコロンで区切ることで指定できます。

  1. ansible server1:server2 -m ping -u root

プレイブックを実行してサーバーのセットアップを自動化する方法など、Ansibleの使用方法の詳細については、Ansibleリファレンスガイドを確認してください。

結論

このガイドでは、Ansibleをインストールし、Ansibleコントロールノードからアドホックコマンドを実行するためのインベントリファイルを設定しました。

中央のAnsibleコントローラーマシンからインフラストラクチャに接続して制御できることを確認したら、それらのホストで任意のコマンドまたはプレイブックを実行できます。

Ansibleの使用方法の詳細については、Ansibleチートシートガイドをご覧ください。