Ubuntu 20.04にAnsibleをインストールおよび構成する方法

挨拶部分

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

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

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

以下の文を日本語で自然に言い換えてください。選択肢は1つだけで構いません。
「/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 ホストパラメータを設定します。このパラメータは、リモートサーバーが最新のUbuntuバージョンには存在しないPython 2.7である /usr/bin/python の代わりに /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モジュールを使用して接続テストを実行します。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コマンドを異なる接続オプションで実行する方法については、当社のAnsibleチートシートガイドを参照してください。

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

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

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コマンドを実行する際には、グループやサブグループだけでなく、個々のホストを対象にすることもできます。たとえば、serversグループ内のすべてのホストの稼働時間を確認するには、次のようにします。

  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 *