ロッキー・リナックス9にAnsibleをインストールして設定する方法
はじめに
構成管理システムは、管理者や運用チームにとって大量のサーバーを制御するために設計されています。これらのシステムは、1つの中央の場所から多くの異なるシステムを自動化された方法で制御することができます。Linuxシステム向けには、ChefやPuppetなどの人気のある構成管理システムが多数存在しますが、これらは多くの人々が望むよりも複雑な場合があります。Ansibleは、これらのオプションに比べて、はるかに簡単に始めることができる素晴らしい選択肢です。
Ansibleは、Ansibleコンポーネントがインストールおよび設定されたコンピューターからクライアントマシンを設定することによって動作します。これは、リモートマシンから情報を取得したり、コマンドを発行したり、ファイルをコピーしたりするために通常のSSHチャネルを利用します。そのため、Ansibleシステムはクライアントコンピューターに追加のソフトウェアのインストールを必要としません。これは、Ansibleがサーバーの管理を容易にする方法の一つです。SSHポートが公開されているサーバーであれば、そのサーバーはその生命サイクルのどの段階にあってもAnsibleの設定の範囲に組み込むことができます。
Ansibleはモジュール化されたアプローチを取り、特定のシナリオに対応するためにメインシステムの機能を使用することができるようにしています。モジュールは任意の言語で書くことができ、標準のJSON形式で通信します。設定ファイルは、その表現力や一般的なマークアップ言語に似ているため、主にYAMLデータシリアライゼーション形式で書かれます。Ansibleは、コマンドラインツールまたはPlaybooksと呼ばれる設定スクリプトを介してクライアントと対話することができます。
このガイドでは、Rocky Linux 9 サーバーに Ansible をインストールし、ソフトウェアの基本的な使い方を学ぶことができます。
前提条件
このチュートリアルを行うためには、次のことが必要です:
- One Ansible Control Node: The Ansible control node is the machine you’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 Rocky Linux 9 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 with Rocky Linux 9 guide. However, please note that if you’re using a remote server as your Ansible Control node, you should follow every step of this guide.
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 Rocky Linux 9. - 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 Rocky Linux 9 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 Rocky Linux 9.
すべて設定が完了したら、最初のステップを始める準備が整います。
ステップ1- Ansibleのインストール
さまざまなサーバーを管理する手段としてAnsibleを探求するには、まず少なくとも1台のマシンにAnsibleソフトウェアをインストールする必要があります。
Rocky Linux 9を使用するためにAnsibleを入手するには、まずdnfを使用してRocky Linux 9のEPELリポジトリがインストールされていることを確認してください。
- sudo dnf install epel-release
リポジトリがインストールされたら、Ansibleをインストールしてください。
- sudo dnf install ansible
今、Ansibleを介してサーバーを管理するために必要なすべてのソフトウェアを入手しました。
Step 2 — Ansibleホストの設定
Ansibleはhostsファイルを通じて、それが把握しているすべてのサーバーの状態を追跡します。他のマシンと通信する前に、最初にこのファイルを設定する必要があります。
以下のように、ルート特権でファイルを開いてください。Rocky Linux 9のデフォルトテキストエディタはviですので、その点に留意してください。
- sudo vi /etc/ansible/hosts
このファイルには、多くのコメントアウトされた例の設定があることに気付くでしょう。これらの例をファイルに残しておくと、将来的により複雑なシナリオを実装する際に、Ansibleの設定を学ぶのに役立ちます。
ホストファイルは非常に柔軟で、いくつかの異なる方法で設定することができます。使用する構文は以下のように構造化されています。
[group_name]
alias ansible_ssh_host=your_server_ip
「group_name」という組織的なタグは、それにリストされたどのサーバーにも1つの言葉で参照することができるようにするためのものです。そのサーバーを指すための別名は「alias」と呼ばれます。
例えば、Ansibleで制御したい3つのサーバーがあると想像してください。AnsibleはクライアントコンピュータとSSH経由で通信するため、管理したい各サーバーはAnsibleサーバーからアクセス可能になります。前提条件の「1つまたは複数のAnsibleホスト」のオプションに従った場合、ホストは以下のコマンドを実行してSSHキーを設定し、アクセスすることができるようになります。
- ssh root@your_server_ip
パスワードの入力は求められません。Ansibleは確かにパスワードベースのSSH認証を処理する能力を持っていますが、SSHキーを使用することで処理がより簡素化されます。
すでにファイルを開いている状態で、以下のサーバーのIPアドレスを例として使用します:203.0.113.111、203.0.113.112、203.0.113.113。自分自身のIPアドレスに置き換えるようにしてください。次に、host1、host2、host3として個別に各サーバーを参照できるようにするか、serversとしてグループとして参照できるように設定します。これを設定するために、以下のブロックをホストファイルに追加する必要があります。テキストを挿入するためにiを押し、完了したらESCを押してください。
[servers]
host1 ansible_ssh_host=203.0.113.111
host2 ansible_ssh_host=203.0.113.112
host3 ansible_ssh_host=203.0.113.113
ブロックの追加が完了したら、ファイルを保存して終了してください。この操作は、:wq と入力して ENTER を押すことで行えます。
ホストは複数のグループに所属することができ、グループは全てのメンバーのパラメータを設定することができます。次のコマンドを実行することで、試すことができます。
- ansible -m ping host1
host1 | UNREACHABLE! => { “changed”: false, “msg”: “Failed to connect to the host via ssh: sammy@203.0.113.111: Permission denied (publickey).”, “unreachable”: true }
デフォルトでは、Ansibleは現在のユーザ名を使用してリモートホストに接続しようとします。このエラーは、リモートシステムにユーザが存在しない場合には接続が失敗することを示しています。
したがって、具体的にはAnsibleに対して、 sammyユーザーを使用してserversグループのサーバーに接続するよう指示しましょう。最初に、Ansibleの構成構造内にgroup_varsというディレクトリを作成してください。
- sudo mkdir /etc/ansible/group_vars
このフォルダ内で、設定したい各グループのYAML形式のファイルを作成することができます。以前は、viテキストエディタを使用してファイルを編集しました。または、nanoを使用してファイルを編集することもできますが、以下のコマンドを使ってそれをインストールする必要があります。
- sudo dnf -y install nano
もしnanoを使うことを好む場合は、インストール後に/etc/ansible/group_vars/serversファイルを開いて設定を編集します。
- sudo nano /etc/ansible/group_vars/servers
以下のコードをファイルに追加してください。YAMLファイルは—で始まるため、その部分を忘れないでください。
/etc/ansible/group_vars/servers を日本語で言い換えると、以下のようになります:
– サーバーの /etc/ansible/group_vars にあるファイル
– /etc/ansible/group_vars ディレクトリ内の servers ファイル
– /etc/ansible/group_vars フォルダー内の servers ファイル
---
ansible_ssh_user: sammy
作業が終わったら、ファイルを保存して終了してください。nanoでは、CTRL + Xを押してからYを押し、ENTERを押すことで行うことができます。
現在のユーザーにかかわらず、Ansibleは常にserversグループのためにsammyユーザーを使用します。
すべてのサーバーのグループ関連に関係なく、サーバーごとの設定の詳細を指定したい場合は、/etc/ansible/group_vars/allに詳細を含んだファイルを配置することができます。個々のホストは、/etc/ansible/host_varsディレクトリの下にファイルを作成することで設定することができます。
ステップ3 — 基本的なAnsibleコマンドの使用
ホストの設定が完了し、ホストに正常に接続するための十分な設定詳細を持っているので、いくつかのコマンドを試すことができます。
最初に設定した全てのサーバーに対してpingを送信してください。コマンドの-m pingは、pingモジュールを使用するようにAnsibleに指示するものです。これらはリモートホストで実行できる一般的なコマンドです。pingモジュールは、Linuxの通常のpingユーティリティと同様の多くの方法で動作しますが、代わりにAnsibleの接続性を確認します。
- ansible -m ping all
Ansibleは以下のような出力を返します。
host3 | SUCCESS => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python3” }, “changed”: false, “ping”: “pong” } host1 | SUCCESS => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python3” }, “changed”: false, “ping”: “pong” } host2 | SUCCESS => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python3” }, “changed”: false, “ping”: “pong” }
この出力は、Ansibleがすべてのホストに接続できていることを確認するための基本的なテストです。
「all」コマンド以外にも、異なるセットのサーバーを対象とするための他のコマンドがあります。また、グループを指定することもできます。
- ansible -m ping servers
個別のホストも指定することができます。
- ansible -m ping host1
さらに、ホストをコロンで区切って複数指定することもできます。
- ansible -m ping host1:host2
シェルモジュールを使用すると、リモートホストにターミナルコマンドを送信して結果を取得することができます。例えば、ホスト1のマシンのメモリ使用状況を調べるためには、以下のコマンドを使用することができます。
- ansible -m shell -a ‘free -m’ host1
スクリプトに引数を渡すために、-aスイッチを使用することに気づくかもしれません。以下は出力の例です。
host1 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 7951 234 6768 0 948 7461 Swap: 0 0 0
現在、さまざまなホスト間で基本的なAnsibleコマンドを何度か実行することに成功しました。
結論
貴方のAnsibleサーバーは、制御したいサーバーとの通信設定が完了しました。ansibleコマンドを使用して基本的なタスクをリモートで実行することで、Ansibleが各ホストと通信できるかを確認できます。
あなたはAnsibleを使ってサーバーとの作業のための素晴らしい基盤を構築しましたので、次のステップはPlaybooksを使って大量の作業を自動化する方法を学ぶことです。Configuration Management 101: Writing Ansible Playbooksというガイドで詳しく学ぶことができます。