Ubuntu 22.04にAnsibleをインストールして設定する方法

はじめに

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

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

このガイドでは、Ubuntu 22.04 サーバーに 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 an Ubuntu 22.04 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 Ubuntu 22.04. 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 Ubuntu 22.04.
  • 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 Ubuntu 22.04 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 Ubuntu 22.04.

ステップ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]という名前のグループが定義されており、それぞれがカスタムエイリアスで識別される3つの異なるサーバー(server1、server2、server3)が含まれています。AnsibleホストのIPアドレスには、ハイライトされたIPを自分のAnsibleホストのIPアドレスに置き換えてください。

/etc/ansible/hostsを日本語に自然に言い換えると、以下のようになります:

– アンシブル/ホスト/エトセトラ (Ansible/Hosts/etc.)

[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 ホストパラメータを設定します。このパラメータは、最近のUbuntuバージョンには存在しない /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経由でコマンドを実行できるかどうかを確認する時がきました。

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

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

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

  1. ansible all -m ping -u root

 

このコマンドは、Ansibleの組み込みのpingモジュールを使用して、デフォルトのインベントリからすべてのノードにrootとして接続して接続テストを実行します。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キーを押して確認してください。

ホストからの「ポン」という返信を受け取ると、そのサーバー上でAnsibleコマンドとプレイブックを実行する準備が整いました。

Note

注意:サーバーから正常な応答を受け取れない場合は、Ansibleコマンドを異なる接続オプションで実行する方法については、当社のAnsibleチートシートガイドを参照してください。

ステップ4 – アドホックコマンドの実行(任意)

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

インベントリファイルで指定されたサーバー上で通常リモートサーバーで実行するコマンドは、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」と強調されたコマンドは、好きなコマンドで置き換えることができます。

インベントリ内のすべてのサーバーに最新バージョンのvimをインストールするために、 aptモジュールを使用する方法の例を次に示します。これは、接続のテストにpingモジュールを使用する前と同様に、ad-hocコマンドを使用してAnsibleモジュールを実行することもできます。

  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 *