Debian 11にAnsibleのインストールと設定方法

はじめに

設定管理システムは、管理者や運用チームが大量のサーバーを制御するプロセスを効率化するために設計されています。これらのシステムでは、1つの中央の場所から自動化された方法で多くの異なるシステムを制御することができます。

Linuxシステム向けにはChefやPuppetなど、多くの人気のある設定管理ツールがありますが、これらは多くの人々が望むよりも複雑です。Ansibleは、ノードに特別なソフトウェアのインストールが必要ないアーキテクチャを提供し、自動化タスクを実行するためにSSHを使用し、プロビジョニングの詳細を定義するためにYAMLファイルを使用するため、これらのオプションと比べて優れた代替手段です。

このガイドでは、Debian 11 サーバーに Ansible をインストールする方法と、このソフトウェアの使用方法の基礎について説明します。Ansible を構成管理ツールとしての高レベルな概要については、『Ansible による構成管理入門』を参照してください。

前提条件

このチュートリアルを実施するためには、以下のものが必要です。

  • One Ansible Control Node: The Ansible control node is the machine we’ll use to connect to and control the Ansible hosts over SSH. Your Ansible control node can either be your local machine or a server dedicated to running Ansible, though this guide assumes your control node is a Debian 11 system. Make sure the control node has:A non-root user with sudo privileges. To set this up, you can follow Steps 2 and 3 of our Initial Server Setup Guide for Debian 11. However, please note that if you’re using a remote server as your Ansible Control node, you should follow every step of this guide. Doing so will configure a firewall on the server with ufw and enable external access to your non-root user profile, both of which will help keep the remote server secure.
    An SSH keypair associated with this user. To set this up, you can follow Step 1 of our guide on How to Set Up SSH Keys on Debian 11.
  • One or more Ansible Hosts: An Ansible host is any machine that your Ansible control node is configured to automate. This guide assumes your Ansible hosts are remote Debian 11 servers. Make sure each Ansible host has:The Ansible control node’s SSH public key added to the authorized_keys of a system user. This user can be either root or a regular user with sudo privileges. To set this up, you can follow Step 2 of How to Set Up SSH Keys on Debian 11.

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

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

以下のコマンドを制御ノードから実行して、公式プロジェクトのPPA(パーソナルパッケージアーカイブ)をシステムのソースリストに追加してください。

  1. sudo apt-add-repository ppa:ansible/ansible

 

「PPAの追加を受け入れるには、プロンプトに求められた時にENTERキーを押してください。」

次に、システムのパッケージインデックスを更新して、新しく追加されたPPAで利用可能なパッケージを認識させてください。

  1. sudo apt update

 

このアップデートの後、以下の手順でAnsibleソフトウェアをインストールすることができます。

  1. sudo apt install ansible

 

あなたのAnsibleのコントロールノードは、ホストを管理するために必要なすべてのソフトウェアを持っています。次に、コントロールノードのインベントリファイルにホストを追加して、コントロールできるようにします。

ステップ2—在庫ファイルのセットアップ

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

デフォルトのAnsibleインベントリのコンテンツを編集するには、Ansibleコントロールノードで好きなテキストエディタを使用して、/etc/ansible/hostsファイルを開いてください。

  1. sudo nano /etc/ansible/hosts

 

Note

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

Ansibleのインストールによって提供されるデフォルトのインベントリファイルには、インベントリのセットアップの参考にすることができるいくつかの例が含まれています。次の例では、[servers]という名前のグループが定義されており、それぞれのサーバーにカスタムエイリアス(server1、server2、server3)が割り当てられています。強調表示されたIPアドレスを、あなたのAnsibleホストのIPアドレスで置き換えてください。

/etc/ansible/hosts → /etc/ansible/ホストファイル
[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

すべてのホストに対して有効なホストパラメータであるansible_python_interpreterを設定するのが、all:varsのサブグループです。このパラメータは、最近のDebianバージョンには存在しない/usr/bin/python(Python 2.7)の代わりに、リモートサーバーが/usr/bin/python3 Python 3実行ファイルを使用することを保証します。

作業が終わったら、CTRL+Xを押してからYを押し、ENTERを押して変更を確認し、ファイルを保存して閉じてください。

いつでも在庫を確認したい時は、実行することができます:

  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経由でコマンドを実行できるかどうかを確認する時が来ました。

このガイドでは、通常、新しく作成されたサーバーでデフォルトで利用可能なのはDebianのrootアカウントだけです。もしAnsibleのホストに既に通常のsudoユーザーが作成されている場合は、そのアカウントを代わりに使用することをお勧めします。

-uオプションを使用することで、リモートシステムのユーザーを指定できます。指定しない場合、Ansibleは制御ノード上の現在のシステムユーザーとして接続を試みます。

ローカルマシンまたはAnsibleコントロールノードから実行してください。

  1. ansible all -m ping -u root

 

このコマンドはAnsibleの組み込みpingモジュールを使用して、デフォルトの在庫からすべてのノードにルートとして接続して接続テストを実行します。pingモジュールは以下のテストを行います。

  • if hosts are accessible;
  • if you have valid SSH credentials;
  • if hosts are able to run Ansible modules using Python.

以下のような出力を取得すべきです:
あなたはこのような出力を得るべきです。

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のコマンドやプレイブックを実行する準備ができていることを意味します。

Note

注意:サーバーから正常な応答が得られない場合は、Ansible Cheat Sheet ガイドを確認して、異なる接続オプションでAnsibleコマンドを実行する方法について詳細をご覧ください。

ステップ4—アドホックコマンドの実行(オプション)

あなたのAnsibleコントロールノードがホストと通信できることを確認した後、サーバー上でアドホックコマンドやプレイブックの実行を開始することができます。

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コマンドを実行する際には、個々のホストだけでなく、グループやサブグループにも対象を絞ることができます。例えば、サーバーグループ内のすべてのホストの稼働時間をチェックする方法は次のようになります。

  1. ansible servers -a uptime -u root

 

私たちは、ホストをコロンで区切ることで複数指定することができます。

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

 

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

結論

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

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

Ansibleの使用方法に関する詳細な情報は、当社のAnsibleチートシートガイドをご覧ください。

コメントを残す 0

Your email address will not be published. Required fields are marked *