Ubuntu 上の Ansible のインストール

AnsibleBeginner
オンラインで実践に進む

はじめに

この実験では、Ubuntu システムに Ansible をインストールして設定する方法を学びます。Ansible は、構成管理、アプリケーションのデプロイ、タスクの自動化を簡素化する強力なオープンソースの自動化ツールです。この実験が終了すると、Ansible がインストールされて設定され、効率的にリモート システムを管理できるようになります。

システム パッケージを更新する

新しいソフトウェアをインストールする前に、システムが最新の更新を持っていることを確認することが重要です。これにより、潜在的な競合を防ぎ、最新のセキュリティ パッチがあることを保証します。

まず、パッケージ リストを更新します。

sudo apt update
Terminal updating package lists

このコマンドは Ubuntu のソフトウェア リポジトリに接続し、利用可能な最新のパッケージに関する情報をダウンロードします。このような出力が表示される場合があります。

Hit:1 http://mirrors.cloud.aliyuncs.com/ubuntu jammy InRelease
Hit:2 http://mirrors.cloud.aliyuncs.com/ubuntu jammy-updates InRelease
Hit:3 http://mirrors.cloud.aliyuncs.com/ubuntu jammy-backports InRelease
Hit:4 http://mirrors.cloud.aliyuncs.com/ubuntu jammy-security InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

「Hit」または「Get」の行が表示された場合でも心配しないでください。これは正常なことで、どのリポジトリ情報が更新されているかを示しています。

Ansible をインストールする

システムが最新状態になったので、Ansible のインストールを進めることができます。Ubuntu のデフォルト リポジトリには Ansible が含まれており、インストール プロセスが簡単になります。

次のコマンドを使用して Ansible をインストールします。

sudo apt install ansible -y

このコマンドを分解してみましょう。

  • sudo:これはソフトウェアのインストールに必要な管理者特権でコマンドを実行します。
  • apt install:これはパッケージ マネージャに新しいパッケージをインストールするように指示します。
  • ansible:インストールしたいパッケージの名前です。
  • -y:このフラグはインストール中のプロンプトに対して自動的に「はい」と回答します。

インストールの進捗状況が表示されます。

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...
Processing triggers for man-db (2.10.2-1)...

大量のテキストに驚かないでください。これは Ansible と一緒にインストールされるすべての依存関係を表示しているだけです。

インストールが完了した後は、Ansible が正しくインストールされたことを確認するのが良い習慣です。バージョンを確認することで行うことができます。

ansible --version

このコマンドでは、インストールされた Ansible のバージョンに関する情報が表示されるはずです。

ansible 2.10.8
  config file = None
  configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0]

このような出力が表示された場合、おめでとうございます!Ansible がシステムに正常にインストールされました。

Ansible 用の SSH を設定する

Ansible は、管理対象ノードとの通信に SSH を使用します。このプロセスを効率化し、セキュリティを強化するために、SSH キーベース認証を設定します。これにより、Ansible は毎回パスワードを入力しなくても他のマシンに接続できます。

まず、SSH キーペアを生成します。

ssh-keygen -t rsa -b 4096 -C "labex@example.com"

このコマンドについて説明します。

  • ssh-keygen: これはキーペアを生成するプログラムです。
  • -t rsa: これは RSA タイプのキーを使用することを指定します。
  • -b 4096: これはキーサイズを 4096 ビットに設定します。これは非常に安全です。
  • -C "labex@example.com": これはキーにコメントを追加します。通常はメールアドレスです。

このコマンドを実行すると、プロンプトが表示されます。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):

Enter キーを押して、デフォルトの場所を受け入れます。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

この実験(Lab)では、Enter キーを 2 回押して、パスフレーズを空のままにすることができます。本番環境では、強力なパスフレーズを使用する必要があります。

キーの作成を確認する出力が表示されます。

Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCDEFG labex@example.com
The key's randomart image is:
+---[RSA 4096]----+
|    .            |
|   . .           |
|    o            |
|   . o           |
|    + = S        |
|   + * +         |
|  . = o .        |
| . + =           |
|  +.+.           |
+----[SHA256]-----+

次に、このキーをローカルマシンにコピーする必要があります。実際のシナリオでは、これをリモートホストにコピーしますが、この実験(Lab)では、ローカルマシンを使用します。

ssh-copy-id labex@localhost

yes と入力して続行します。

labex ユーザーのパスワードのプロンプト

labex ユーザーのパスワードを求められます。

この実験(Lab)環境では、VNC ターミナルを開いて次を実行すると、パスワードを見つけることができます。

現在のターミナルセッションを閉じずに、新しい Xfce ターミナルを開いて、次のコマンドを実行します。

echo $PASSWORD

注:このコマンドは VNC ターミナルで実行する必要があります。パスワードは VNC ターミナルでのみ利用可能であり、SSH または Web ターミナルからはアクセスできません。

SSH キーコピーのプロンプト

ssh-copy-id によってプロンプトが表示されたら、パスワードを入力します。次のような出力が表示されるはずです。

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
labex@localhost's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'labex@localhost'"
and check to make sure that only the key(s) you wanted were added.

SSH キーの設定が成功したことを確認するには、ローカルマシンに SSH で接続してみます。

ssh labex@localhost

キーが正しく設定されている場合は、パスワードを求められずにログインできるはずです。新しいコマンドプロンプトが表示されます。exit と入力して、元のセッションに戻ります。

Ansible インベントリを作成して設定する

Ansible インベントリは、プレイブック内のコマンド、モジュール、タスクが実行されるホストとホストのグループを定義するファイルです。Ansible のアドレス帳のようなもので、接続できるマシンを教えてくれます。

まず、Ansible の設定ディレクトリを作成します。

sudo mkdir -p /etc/ansible

このコマンドは、/etc/ansible ディレクトリが存在しない場合に作成します。-p フラグは、ディレクトリが既に存在していてもエラーを投げないようにします。

次に、インベントリ ファイルを作成して編集します。

sudo nano /etc/ansible/hosts

これは nano テキスト エディタを開きます。nano に慣れていない場合は心配しないでください。シンプルで使いやすいエディタです。

このファイルに、次の内容を追加します。

[local]
localhost ansible_connection=local

[webservers]
web1 ansible_host=localhost ansible_connection=ssh ansible_user=labex

これが何を意味するか解説しましょう。

  • [local][webservers] はグループ名です。これを使ってホストを整理できます。
  • localhost ansible_connection=local は、Ansible に SSH を使わずに直接ローカル マシンに接続するように指示します。
  • web1 ansible_host=localhost ansible_connection=ssh ansible_user=labex は、web1 と呼ばれるホストを設定します。この実験では、localhost にも接続しますが、SSH を使って labex ユーザーとしてログインします。

nano でファイルを保存するには、Ctrl+X を押してから Y を押し、最後に Enter を押します。

インベントリ ファイルの内容を確認するには、cat コマンドを使います。

cat /etc/ansible/hosts

先ほど追加した内容が表示されるはずです。

Ansible の接続性をテストする

Ansible をインストールして設定したので、すべてが正常に動作していることを確認するために接続性をテストしましょう。

まず、インベントリ内のすべてのホストに ping を実行します。

ansible all -m ping

このコマンドを分解しましょう。

  • ansible:これは Ansible を実行する基本コマンドです。
  • all:これは Ansible にインベントリ内のすべてのホストで実行するように指示します。
  • -m ping:これは使用する Ansible モジュールを指定します。ping モジュールはホストが応答しているかどうかを確認します。

次のような出力が表示されるはずです。

localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
web1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

両方のホストで "SUCCESS" が表示された場合、Ansible がこれらのホストに正常に接続して通信できることを意味します。

次に、すべてのホストで簡単なコマンドを実行してみましょう。

ansible all -a "uptime"

このコマンドは、Ansible のコマンド モジュール(-m でモジュールを指定しない場合のデフォルト)を使用して、すべてのホストで uptime コマンドを実行します。uptime コマンドは、システムが稼働している時間を表示します。

次のような出力が表示されるはずです。

localhost | CHANGED | rc=0 >>
 14:30:15 up 1 day,  3:24,  1 user,  load average: 0.00, 0.00, 0.00

web1 | CHANGED | rc=0 >>
 14:30:15 up 1 day,  3:24,  1 user,  load average: 0.00, 0.00, 0.00

この出力は、Ansible が両方のホストで uptime コマンドを正常に実行したことを示しています。"CHANGED" ステータスは、コマンドが正常に実行され、出力が生成されたことを示しています。

ヒント:"Distribution ubuntu 22.04 on host localhost should use /usr/bin/python3" という廃止警告が表示される場合があります。これは、Ubuntu の新しいバージョンではデフォルトの Python インタプリタが変更されたためです。

この警告を抑制するには、/etc/ansible/hosts ファイルに次の行を追加できます。

[all:vars]
ansible_python_interpreter=/usr/bin/python3

この行は、Ansible にすべてのホストで明示的に Python 3 を使用するように指示します。この行を追加した後、ansible all -m ping コマンドを再度実行して、警告が表示されなくなったことを確認できます。

まとめ

おめでとうございます!この実験では、Ubuntu システムに Ansible を正常にインストールして設定することができました。以下のことを学びました。

  1. システム パッケージを更新して、Ansible の安定した環境を確保する。
  2. パッケージ マネージャを使用して Ansible をインストールする。
  3. セキュアでパスワードレスな接続のために SSH キーベースの認証を設定する。
  4. 管理対象のホストを定義するために Ansible インベントリ ファイルを作成して設定する。
  5. Ansible の接続性をテストし、管理対象のホストで基本的なコマンドを実行する。

これらの基本的な手順は、単純なコマンド実行から複雑な構成管理やアプリケーション デプロイメントまで、さまざまな IT タスクを自動化するための Ansible の使用にとって、堅牢な出発点を提供します。

この実験では、デモ目的で localhost を使用しましたが、実際のシナリオでは通常、複数のリモート ホストを管理します。ここで学んだ原則とコマンドは、インフラストラクチャ全体のリモート サーバーの管理に簡単に適用できます。

Ansible の学習を続けるにつれて、システム管理や DevOps の実践における操作の合理化と生産性の向上におけるその力を発見するでしょう。次に、Ansible プレイブックを検討してみてください。これにより、より複雑なタスクとワークフローを自動化できます。