インストールとインベントリ

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

はじめに

この実験では、強力なオープンソース自動化ツール Ansible の基本を学びます。

100 台のサーバーを管理する必要があるとします。各サーバーにログインしてソフトウェアをインストールしたり設定を変更したりするのは、手間がかかるうえ、ミスも起こりやすい作業です。Ansible を使うと、対象サーバーにエージェントをインストールしなくても、1 台の control node から managed node と呼ばれるサーバーをまとめて管理できます。

このエージェントレス設計は、Ansible が運用チームに広く使われるようになった大きな理由の 1 つです。各ホストで追加のソフトウェアを保守する負担を減らし、管理者がすでに信頼しているツール、特に SSH を基盤として利用できます。

Ansible は次のように動作します。

  1. SSH(リモートログインに使用するツール)でサーバーに 接続 する。
  2. シンプルなテキストファイル(YAML で記述)から指示を 読み取る。
  3. 作業を実行する小さなプログラム(モジュール)をサーバーに 送信する。

このエージェントレスモデルも、Ansible が広く使われる理由の 1 つです。Linux 管理者がすでに知っている SSH やテキストベースの設定などのツールを活用できます。

この実験では、自分が管理側と管理対象側の両方を担当します。環境に Ansible をインストールし、localhost(localhost)自身を管理できるように設定します。安全に基本を学ぶのに適した方法です。

この実験では、次の方法を学びます。

  • パッケージマネージャーを使って Ansible をインストールする。
  • パスワードなしで Ansible がログインできるように SSH キー を設定する。
  • 管理対象のコンピューターを一覧にする Inventory ファイルを作成する。
  • ping モジュールを使って接続をテストする。

Ansible をインストールする

最初に、マシンへ Ansible をインストールします。ここでは Ubuntu を使用しているため、Linux のコマンドラインツール向け「アプリストア」のような apt パッケージマネージャーを使います。

まず、セットアップスクリプトですでに更新を実行していますが、パッケージリストが最新であることを確認するのがよい習慣です。

sudo apt update

次に、次のコマンドを実行して Ansible をインストールします。

sudo apt install ansible -y

コマンドの意味:

  • sudo:管理者(root)権限でコマンドを実行します。
  • apt install:パッケージマネージャーにプログラムのインストールを指示します。
  • ansible:インストールするパッケージ名です。
  • -y:確認プロンプト(「続行しますか?」など)に自動的に「yes」と回答します。

インストールが完了したら、バージョンを確認して検証します。

ansible --version

ansible [core 2.x.x] で始まる出力が表示されます。これで Ansible がインストールされ、使用できる状態だと確認できます。

SSH キーを生成する

Ansible は、サーバーとの通信に SSH(Secure Shell)を使用します。SSH は Linux サーバーへリモートアクセスする標準的な方法です。

このため、インベントリも重要です。Ansible には、存在するマシン、そのグループ分け、接続方法を明確に示す一覧が必要です。インベントリは、自動化システムのアドレス帳に相当します。

SSH は通常、パスワードを要求します。しかし、Ansible のような自動化ツールでサーバーに接続するたびにパスワードを入力することはできません。そこで SSH キー を使用します。

SSH キーは、錠前と鍵の組み合わせに似ています。

  • Public Key(錠前):アクセスしたいサーバーに配置します。
  • Private Key(鍵):control computer に安全に保管します。

Ansible が接続すると、サーバーは「鍵」が自分の「錠前」と一致するか確認します。一致すれば、パスワードなしでログインできます。

次のコマンドを実行してキーペアを生成します。

ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa

コマンドの意味:

  • ssh-keygen:キーを生成するツールです。
  • -t rsa:RSA タイプのキーを作成します(標準的な形式です)。
  • -b 2048:キーの長さを 2048 ビットにします(十分な安全性があります)。
  • -N "":空のパスフレーズ を設定します。これは重要です。「このキーを使うときにパスワードを尋ねない」という意味で、Ansible を完全に自動実行できるようにします。
  • -f ~/.ssh/id_rsa:キーを標準の場所に保存します。

ファイルが作成されたことを確認します。

ls -l ~/.ssh/

id_rsa(秘密の Private Key)と id_rsa.pub(Public Key)が表示されます。

キーを承認する

キーを作成したら、管理対象サーバーに Public Key を配置します。この実験では、現在使用している同じマシンである localhost を管理します。

このステップでは、認証と自動化ロジックが分かれていることを確認します。Ansible が自動化を実行するには、まず対話操作なしで確実に認証できる方法が必要です。

id_rsa.pub の内容を、.ssh フォルダー内の authorized_keys というファイルに追加します。

通常は ssh-copy-id のようなコマンドを使います。しかし、このコマンドは通常、本人確認のために最初にパスワードを要求します。この実験環境ではパスワードを使用しないため、キーを手動でコピーします。

次のコマンドを実行して、Public Key を承認済みキーの一覧に追加します。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

コマンドの意味:

  • cat ...:Public Key を読み取ります。
  • >>:出力を対象ファイルの末尾に 追加 します(ファイルを上書きしません)。
  • .../authorized_keys:SSH がログインを許可されたユーザーを確認するファイルです。

次に、SSH がこのファイルを信頼できるよう、適切な権限を設定します。

chmod 600 ~/.ssh/authorized_keys

接続をテストします。自分自身のマシンに SSH で接続してください。

ssh localhost "echo Hello from SSH"

「Are you sure you want to continue connecting?」と尋ねられた場合は、yes と入力して Enter キーを押します。

パスワードを求められずに、すぐに「Hello from SSH」と表示されます。これで、Ansible もパスワードなしで接続できることが確認できます。

Inventory ファイルを作成する

Ansible には、管理対象サーバーの一覧が必要です。この一覧を Inventory と呼びます。

Inventory はシンプルなテキストファイルにできます。プロジェクトディレクトリを作成し、hosts.ini という名前のインベントリファイルを作成します。

hosts.ini という空のファイルを作成します。

touch hosts.ini

この時点では、Ansible はどのサーバーも認識していません。次のステップでサーバーを追加します。

Inventory にホストを追加する

ここでは、hosts.ini ファイルを編集してサーバーを追加します。Ansible の Inventory では、次のような INI 形式 をよく使用します。

[group_name]
server_address

サーバーを [webservers] や [databases] のようなグループにまとめると、その種類のサーバーすべてに一度にコマンドを実行できます。

ここでは、localhost を [webservers] というグループに追加します。次のコマンドを実行して、ファイルに書き込みます。

echo -e "[webservers]\nlocalhost" > hosts.ini

コマンドの意味:

  • echo -e:特殊文字(改行を表す \n など)を解釈してテキストを表示します。
  • "[webservers]\nlocalhost":書き込むテキストです。1 行目に [webservers]、2 行目に localhost を配置します。
  • > hosts.ini:この内容でファイルを 上書き します。

ファイルの内容を確認できます。

cat hosts.ini

次のように表示されます。

[webservers]
localhost

接続をテストする

いよいよ確認です。Inventory に登録したすべてのサーバーへ Ansible で接続し、稼働しているか確認します。

ここでは、単発タスクを実行する ansible コマンドと ping モジュールを使用します。

次のコマンドを実行します。

ansible all -m ping -i hosts.ini

コマンドの意味:

  • all:Inventory 内の すべての ホストに一致します。
  • -m ping:ping という名前の module を Ansible に使用させます。
    • 注:これはネットワークの ping コマンドとは異なります。Ansible の ping は実際にサーバーへログインし、Python が利用可能か確認したうえで「pong」を返します。環境が正しく設定されていることを確認できます。
  • -i hosts.ini:作成した Inventory ファイルを使用するよう Ansible に指示します(システムのデフォルト設定ではありません)。

次のような緑色の「SUCCESS」メッセージが表示されます。

localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

"ping": "pong" と表示されたら成功です。Ansible でサーバーを管理できるよう、正常に設定できました。

まとめ

この実験では、Ansible 自動化の基礎を構築しました。次の内容を学びました。

  1. インストール:システムで Ansible を使用できるようにする。
  2. SSH キーの設定:Ansible がパスワードなしで安全にログインできる「キー」を作成する。
  3. Inventory:管理対象サーバーの一覧(hosts.ini)を作成する。
  4. 接続確認:ping モジュールを使って、すべてが正常に動作していることを確認する。

インストール、アクセス、インベントリ、テストというこれらの手順は、1 台のサーバーを管理する場合でも 1,000 台を管理する場合でも、Ansible プロジェクトで最初に行う基本的な作業です。