Ubuntu22.04にAnsibleをインストールして構成する方法

提供:Dev Guides
移動先:案内検索

序章

構成管理システムは、管理者および運用チームのために、多数のサーバーを制御するプロセスを合理化するように設計されています。 これらを使用すると、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ホストに次のものがあることを確認してください。
    • システムユーザーのauthorized_keysに追加されたAnsibleコントロールノードのSSH公開鍵。 このユーザーは、rootまたはsudo権限を持つ通常のユーザーのいずれかです。 これを設定するには、 Ubuntu22.04でSSHキーを設定する方法のステップ2に従うことができます。

ステップ1—Ansibleをインストールする

サーバーインフラストラクチャを管理する手段としてAnsibleの使用を開始するには、Ansibleコントロールノードとして機能するマシンにAnsibleソフトウェアをインストールする必要があります。 そのためにデフォルトのUbuntuリポジトリを使用します。

まず、システムのパッケージインデックスを次のように更新します。

sudo apt update

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

sudo apt install ansible

インストールの確認を求められたら、Yを押します。 サービスを再起動するように求められた場合は、ENTERを押してデフォルトを受け入れ、続行します。

これで、Ansibleコントロールノードに、ホストの管理に必要なすべてのソフトウェアが含まれるようになりました。 次に、Ansibleが管理対象ノードと通信できるようにインベントリファイルを設定する方法について説明します。

ステップ2—インベントリファイルの設定

インベントリファイルには、Ansibleで管理するホストに関する情報が含まれています。 インベントリファイルには1台から数百台のサーバーを含めることができ、ホストはグループとサブグループに編成できます。 インベントリファイルは、プレイブックやテンプレート内で使用するために、特定のホストまたはグループに対してのみ有効な変数を設定するためにもよく使用されます。 ansible_python_interpreter変数のように、いくつかの変数は、プレイブックの実行方法にも影響を与える可能性があります。

デフォルトのAnsibleインベントリの内容を編集するには、最初にmkdirコマンドを使用して/etc/ansibleディレクトリを作成します。 次に、選択したテキストエディターを使用して、Ansibleコントロールノードで/etc/ansible/hostsファイルを開きます。

sudo mkdir /etc/ansible
sudo nano /etc/ansible/hosts

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


Ansibleインストールによって提供されるデフォルトのインベントリファイルには、インベントリを設定するための参照として使用できるいくつかの例が含まれています。 次の例では、[servers]という名前のグループを定義し、それぞれがカスタムエイリアス server1server2 、およびserver3で識別される3つの異なるサーバーを含みます。 ]。 強調表示された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

all:varsサブグループは、このインベントリに含まれるすべてのホストに有効なansible_python_interpreterホストパラメーターを設定します。 このパラメーターは、リモートサーバーが/usr/bin/python(Python 2.7)の代わりに/usr/bin/python3Python3実行可能ファイルを使用することを確認します。これは最近のUbuntuバージョンにはありません。

終了したら、CTRL+XYENTERの順に押してファイルを保存して閉じ、変更を確認します。

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

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チートシートガイドをご覧ください。