blog

Ansible 自動化ツールのインストール、設定、クイックスタートガイド

Ansibleは、SSH経由でクライアントノード上でタスクを実行する、オープンソースで使いやすく強力なIT自動化ツールです。...

Oct 13, 2025 · 10 min. read
シェア

市場には多くの自動化ツールがあります。例えば、Puppet、Chef、CFEngine、Foreman、Katello、Saltstock、Space Walkなどです。

自動化ツールで何ができるのでしょうか?

自動化ツールは、人手を介さずにルーチンタスクを自動化することで、Linux管理者の作業を容易にします。これらのツールにより、ユーザーは構成管理、アプリケーションのデプロイ、リソースのプロビジョニングを実行できます。

なぜAnsibleが好きなのですか?

Ansibleはエージェントレスの自動化ツールで、SSHを使ってすべてのタスクを実行しますが、他のツールではクライアント・ノードにエージェントをインストールする必要があります。

Ansibleとは何ですか?

Ansibleは、SSH経由でクライアントノード上でタスクを実行する、オープンソースで使いやすく強力なIT自動化ツールです。

Pythonは、現在世界で最も人気があり、強力なプログラミング言語の1つです。Pythonは、すべてのモジュールを実行するために両端に必要です。

システムの設定、ソフトウェアのデプロイ、継続的なデプロイやゼロダウンタイムのローリングアップデートなどの高度な IT タスクのスケジューリングを行います。単純なものから複雑なものまで、Ansible を使用すると、あらゆる種類の自動化タスクを簡単に実行できます。

より良いタスクを作成するために、Ansibleの用語を理解する必要があります。

Ansibleはどのように機能するのですか?

Ansibleは、ansibleモジュールと呼ばれるアプレットをクライアント・ノードにプッシュすることで動作します。このモジュールはクライアント・ノードに一時的に格納され、JSONプロトコルを介してAnsibleサーバーと通信します。

AnsibleはこれらのモジュールをSSH経由で実行し、完了したら削除します。

モジュールとは、例えばPythonやPerlで書かれたスクリプトのようなものです。

  • Ansibleを使用して制御ノード上でタスクを実行するホスト。複数の制御ノードを持つことはできますが、Windowsシステムホストを制御ノードとして使用することはできません。
  • 制御ノードが設定したホストのリスト。
  • : /etc/ansible/hosts ファイルで設定されたノードが管理するホストのリストを制御します。IPアドレスやホスト名などの各ノードに関する情報が含まれており、必要に応じてこれらのノードをグループ化することができます。
  • 各モジュールは特定のタスクを実行するために使用され、現在3,387のモジュールがあります。
  • 一度に1つのタスクを実行でき、 /usr/bin/ansible バイナリを使用します。
  • それぞれタスクのリストを持っています。タスクは制御されたノード内で1つずつ順次実行されます。
  • ピアツーピアでは1つのタスクしか実行できませんが、スクリプトを使えば複数のタスクを同時に実行できます。スクリプトはYAMLで書かれており、読みやすいです。将来的には、複雑なタスクを実行するために使用できるスクリプトについての記事が書かれる予定です。

テスト環境

この環境には、1台の制御ノードと3台の被制御ノードが含まれ、すべてのノードはオペレーティング・システムとともに仮想環境で動作します:

Ansible Control Node server.2g.lab Manjaro 18
Managed Node1 node1.2g.lab CentOS7
Managed Node2 node2.2g.lab CentOS8
Managed Node3 node3.2g.lab Ubuntu 18.04
User: daygeek

前提条件

  • Ansible 制御ノードと被制御ノード間のパスワードレス認証を有効にします。
  • 制御ノードはPython 2またはPython 3でなければなりません。
  • 制御ノードはPython 2またはPython 3でなければなりません。
  • リモート・ノードでSELinuxが有効になっている場合、Ansibleでレプリケーション、ファイル、テンプレートに関連する機能を使用するには、リモート・ノードに libselinux-pythonインストールする必要もあります。

制御ノードにAnsibleをインストールする方法

Fedora/RHEL 8/CentOS 8システムの場合は、 DNF コマンド 使用してAnsibleをインストールします。

注: RHEL/CentOS システムでは、Ansible パッケージがディストリビューションの公式リポジトリで利用できないため、 EPEL リポジトリ有効にする必要があります。

  1. $ sudo dnf install ansible

Debian/Ubuntuシステムでは、 APT-GET コマンド または APT コマンド 使用してAnsibleをインストールします。

UbuntuにAnsibleの最新安定版をインストールするために、以下のPPAを設定します。

  1. $ sudo apt update
  2. $ sudo apt install software-properties-common
  3. $ sudo apt-add-repository --yes --update ppa:ansible/ansible
  4. $ sudo apt install ansible

Debianシステムの場合、以下のソースのリストを設定します:

  1. $ echo "deb http://../// trusty main" | sudo tee -a /etc/apt/sources.list.d/ansible.list
  2. $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FD7BB9C763
  3. $ sudo apt update
  4. $ sudo apt install ansible

Arch Linux システムでは、 Pacman コマンドを使って Ansible をインストールしてください:

  1. $ sudo pacman -S ansible

RHEL/CentOS システムの場合は、 YUM コマンド 使用して Ansible をインストールします:

  1. $ sudo yum install ansible

openSUSEシステムでは、 Zypper コマンド 使用してAnsibleをインストールします:

  1. $ sudo zypper install ansible

あるいは、 Python PIP パッケージ管理ツールを使って インストールすることもできます:

  1. $ curl https://../-.py -o get-pip.py
  2. $ sudo python get-pip.py
  3. $ sudo pip install ansible

コントロールノードにインストールされているAnsibleのバージョンを確認します:

  1. $ ansible --version
  2. ansible 2.9.2
  3. config file = /etc/ansible/ansible.cfg
  4. configured module search path = ['/home/daygeek/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  5. ansible python module location = /usr/lib/python3.8/site-packages/ansible
  6. executable location = /usr/bin/ansible
  7. python version = 3.8.1 (default, Jan 8 :20) [GCC 9.2.0]

制御ノードにPythonをインストールする方法を教えてください。

コントロールされているノードに python をインストールするには、以下のコマンドを使用します:

  1. $ sudo yum install -y python
  2. $ sudo dnf install -y python
  3. $ sudo zypper install -y python
  4. $ sudo pacman -S python
  5. $ sudo apt install -y python

LinuxでSSHキー認証を設定する方法

以下のコマンドを使用して ssh キーを作成し、リモートコンピュータにコピーします。

  1. $ ssh-keygen
  2. $ ssh-copy-id daygeek@node1.2g.lab
  3. $ ssh-copy-id daygeek@node2.2g.lab
  4. $ ssh-copy-id daygeek@node3.2g.lab

Ansibleホスト・マニフェストの作成方法

  1. $ sudo vi /etc/ansible/hosts
  2. node1.2g.lab
  3. node2.2g.lab
  4. node3.2g.lab

以下のコマンドですべてのホストを見つけられるか試してみましょう。

  1. $ ansible all --list-hosts
  2. hosts (3):
  3. node1.2g.lab
  4. node2.2g.lab
  5. node3.2g.lab

単一のグループに対して以下のコマンドを実行します:

  1. $ ansible web --list-hosts
  2. hosts (2):
  3. node1.2g.lab
  4. node2.2g.lab

ピアツーピアコマンドを使用したタスクの実行方法

ホストリストの確認チェックが終わったら、旅に出ましょう。お見事です!

文法:

  1. ansible [pattern] -m [module] -a "[module options]"
  2. Details:
  3. ========
  4. ansible: A command
  5. pattern: Enter the entire inventory or a specific group
  6. -m [module]: Run the given module name
  7. -a [module options]: Specify the module arguments

Ping モジュールを使用して、ホストリスト内のすべてのノードに対して ping 操作を実行します:

  1. $ ansible all -m ping
  2. node3.2g.lab | SUCCESS => {
  3. "ansible_facts": {
  4. "discovered_interpreter_python": "/usr/bin/python"
  5. "changed": false,
  6. "ping": "pong"
  7. node1.2g.lab | SUCCESS => {
  8. "ansible_facts": {
  9. "discovered_interpreter_python": "/usr/bin/python"
  10. "changed": false,
  11. "ping": "pong"
  12. node2.2g.lab | SUCCESS => {
  13. "ansible_facts": {
  14. "discovered_interpreter_python": "/usr/libexec/platform-python"
  15. "changed": false,
  16. "ping": "pong"

どのシステムも成功を返しましたが、何も変わらず、成功のポンだけが出ました。

以下のコマンドで利用可能なモジュールのリストを取得できます。

  1. $ ansible-doc -l

現在、3,387の組み込みモジュールがあり、Ansibleのバージョンが上がるにつれて増えていきます:

  1. $ ansible-doc -l | wc -l

コマンドモジュールを使用して、ホストリストにあるすべてのノードでコマンドを実行します:

  1. $ ansible all -m command -a "uptime"
  2. node3.2g.lab | CHANGED | rc=0 >>
  3. up 1:21, 3 users, load average: 0., 0.01
  4. node1.2g.lab | CHANGED | rc=0 >>
  5. up 1:21, 4 users, load average: 0., 0.05
  6. node2.2g.lab | CHANGED | rc=0 >>
  7. up 1:25, 3 users, load average: 0., 0.00

指定されたグループのコマンドモジュールを実行します。

アプリグループホストのメモリ使用量を確認してください:

  1. $ ansible app -m command -a "free -m"
  2. node3.2g.lab | CHANGED | rc=0 >>
  3. total used free shared buff/cache available
  4. Mem: 6

ウェブ・グループに対して hostnamectl コマンドを実行するには、以下の書式を使用します:

  1. $ ansible web -m command -a "hostnamectl"
  2. node1.2g.lab | CHANGED | rc=0 >>
  3. Static hostname: CentOS7.2daygeek.com
  4. Icon name: computer-vm
  5. Chassis: vm
  6. Machine ID: af248f5be1d514c
  7. Boot ID: dcdef
  8. Virtualization: kvm
  9. Operating System: CentOS Linux 7 (Core)
  10. CPE OS Name: cpe:/o:centos:centos:7
  11. Kernel: Linux 3.7.el7.x86_64
  12. Architecture: x86-64
  13. node2.2g.lab | CHANGED | rc=0 >>
  14. Static hostname: node2.2g.lab
  15. Icon name: computer-vm
  16. Chassis: vm
  17. Machine ID: ebcbfcab
  18. Boot ID: dde546da95ace03420fe12cb
  19. Virtualization: oracle
  20. Operating System: CentOS Linux 8 (Core)
  21. CPE OS Name: cpe:/o:centos:centos:8
  22. Kernel: Linux 4..el8.x86_64
  23. Architecture: x86-64

経由:

Read next