
Ansibleのモジュールについて徹底解説 | 現場でよく用いられるモジュールと実践的な活用例を紹介
Red Hatが開発したオープンソースのIT自動化ツール「Ansible(アンシブル)」は、インフラ構築、構成管理、アプリケーションのデプロイ、オーケストレーションなど、様々なITプロセスを自動化するために使用されます。
Ansibleのモジュールは、サーバー構成やアプリケーションデプロイの自動化を実現するための基本要素です。モジュールを活用することで、パッケージ管理、ファイル操作、設定変更などを効率的に行えます。
本記事では、Ansibleのモジュールの基本から、よく使われるモジュールの具体的な使い方、実践的な活用例まで詳しく解説します。AnsibleのPlaybookをより効果的に記述し、自動化をスムーズに進めるために、各モジュールの役割と使い方を理解しましょう。
Ansibleのモジュールとは?

Ansibleのモジュールとは、特定のタスクを実行するためのスクリプトのようなものです。サーバー設定、パッケージ管理、ユーザー管理、ファイル操作など、さまざまな用途に対応するモジュールが用意されています。AnsibleのPlaybookでは、各タスクにモジュールを指定し、パラメータを設定することで、目的の処理を実行します。
利用可能なモジュールの一覧は、レッドハット社 Ansibl公式のドキュメント内「Module Docs」を参照してください。
基本構文
以下のように、モジュール名とオプションを指定してタスクを定義します。
– name: モジュールの基本構文 module_name: option1: value1 option2: value2 |
例:copyモジュール
– name: ファイルをコピーする copy: src: /local/path/file.txt dest: /remote/path/file.txt |
この例では、copyモジュールを使用してローカルのfile.txtをリモートサーバーにコピーしています。モジュールを活用することで、簡潔かつ再現性の高い構成管理が可能になります。
主要コンポーネントとモジュールの関係

Ansibleでは、モジュールが「タスク」の実行エンジンとして機能し、各タスクを処理する役割を持ちます。Playbook内で定義されたタスクは、モジュールによって実行され、リモートホストの状態を変更または維持することが可能です。
ここでは、Red HatのAnsibleモジュールの仕組みを参考に、以下の主要コンポーネントについて解説します。
タスク
タスクは、Ansible Playbook内で実行される個々の操作のことを指します。
各タスクはモジュールを使用して、パッケージのインストールや設定変更などを実行します。
play(プレイ)
Playとは、特定のホストに対して実行される一連のタスクの集合です。Playごとに対象ホストを定義し、適用する設定や処理を指定します。
例えば、Webサーバーのセットアップを1つのPlayとして記述し、別のPlayでデータベースの設定を行うといった分割が可能です。これにより、異なる環境への適用や管理が容易になります。
Ansible Playbook
Playbookは、複数のPlayやタスクをまとめたYAML形式のファイルで、サーバー構成の自動化やデプロイに利用されます。Playbookを使用すると、一貫性のある設定を適用でき、複雑な作業を簡素化できます。
また、再利用性が高いため、異なる環境(開発・本番)で同じ設定を適用する際にも有効です。
Ansible Role
Roleは、Playbookの構成を整理し、再利用可能な形で管理する仕組みです。変数、タスク、テンプレート、ハンドラーなどを分けて管理することで、可読性が向上し、保守がしやすくなります。
例えば、Webサーバーの設定をRole化すると、異なるプロジェクトでも簡単に再利用でき、管理の効率化が図れます。
コレクション
コレクションは、モジュール、プラグイン、ロールをまとめたパッケージで、特定の用途やベンダー向けの拡張機能を提供します。
例えば、AWSやDocker向けの専用コレクションが用意されており、特定のクラウド環境やサービスを管理するためのモジュールやプラグインを一括で導入できるようになっています。
プラグイン
プラグインは、Ansibleの機能を拡張するためのコンポーネントで、コネクション管理やログ処理、通知の送信などを制御します。
例えば、SSH接続を最適化するコネクションプラグインや、Slackに通知を送るアクションプラグインなどがあります。これにより、より柔軟な自動化環境を構築できます。
パッケージ管理モジュールの使い方
Ansibleでは、サーバのパッケージ管理を自動化するために、OSに応じたパッケージ管理モジュールを使用します。
RHEL系ではyum、Debian系ではaptモジュールを活用し、ソフトウェアのインストールや更新を簡単に実行できます。
yum モジュール(RHEL系)
yumモジュールは、RHEL(Red Hat Enterprise Linux)系のディストリビューション(CentOS、AlmaLinux、Rocky Linuxなど)でパッケージのインストール、更新、削除を行うために使用されます。
基本的な使い方
以下の例では、httpd(Apache)をインストールします。
– name: Install Apache using yum yum: name: httpd state: present |
state: presentは、指定したパッケージがインストールされていない場合にインストールを実行するオプションです。
複数パッケージのインストール
複数のパッケージを一括で管理することも可能です。
– name: Install multiple packages yum: name: – httpd – vim – git state: present |
パッケージの更新と削除
– name: Update all packages yum: name: ‘*’ state: latest – name: Remove a package yum: name: httpd state: absent |
state: latestは、パッケージを最新バージョンに更新し、state: absentは削除を意味します。
apt モジュール(Debian/Ubuntu系)
aptモジュールは、Debian系(Ubuntu、Debian、Linux Mintなど)でパッケージの管理を行うために使用されます。yumと同様に、パッケージのインストール、更新、削除を自動化できます。
基本的な使い方
以下の例では、nginxをインストールします。
– name: Install Nginx using apt apt: name: nginx state: present update_cache: yes |
update_cache: yesを指定すると、事前にapt updateを実行してパッケージリストを更新します。
複数パッケージのインストール
– name: Install multiple packages apt: name: – nginx – curl – unzip state: present |
パッケージの更新と削除
– name: Upgrade all packages apt: upgrade: yes – name: Remove a package apt: name: nginx state: absent |
upgrade: yesを指定すると、apt upgradeを実行してシステム内の全パッケージを更新できます。
ファイル操作モジュールの使い方
Ansibleでは、リモートサーバー上のファイル管理を自動化するために、copyやtemplateなどのファイル操作モジュールを使用します。
これらを活用すると、設定ファイルの配置やテンプレートの適用を効率的に行えます。
copy モジュール(ファイル/ディレクトリのコピー)
copyモジュールは、ローカルマシンからリモートサーバーへファイルやディレクトリを転送する際に使用します。設定ファイルやスクリプトのデプロイに便利です。
基本的な使い方
以下の例では、index.htmlをリモートサーバーの/var/www/html/にコピーします。
– name: Copy index.html to remote server copy: src: files/index.html # ローカルのファイル dest: /var/www/html/index.html # リモートの保存先 owner: Ops-Today-data group: Ops-Today–data mode: ‘0644’ |
ownerやmodeを指定すると、所有者やパーミッションの設定も可能です。
ディレクトリのコピー
– name: Copy entire directory copy: src: files/config/ # ローカルのディレクトリ dest: /etc/myapp/ # リモートの保存先 owner: root group: root mode: ‘0755’ |
srcにディレクトリを指定すると、中のファイルごと転送されます。
コンテンツの直接指定
ファイルの内容をPlaybook内で指定することも可能です。
– name: Create a configuration file copy: content: “server_name example.com;\nlisten 80;” dest: /etc/nginx/conf.d/example.conf mode: ‘0644’ |
以上のように、copyモジュールを使うことで、簡単にファイルの転送や作成が可能です。
template モジュール(Jinja2テンプレートを利用)
templateモジュールは、Jinja2テンプレートを使用して、動的な内容を持つファイルを生成するために使用します。環境ごとに異なる設定ファイルを適用する際に役立ちます。
基本的な使い方
nginx.conf.j2というテンプレートファイルを作成します。
server { listen 80; server_name {{ domain }}; root {{ document_root }}; } |
このテンプレートを基に、リモートサーバー用の設定ファイルを生成するPlaybookを作成します。
– name: Deploy Nginx configuration from template template: src: templates/nginx.conf.j2 # ローカルのテンプレートファイル dest: /etc/nginx/nginx.conf # リモートの保存先 owner: root group: root mode: ‘0644’ vars: domain: example.com document_root: /var/www/html |
変数domainやdocument_rootを指定することで、環境に応じた設定ファイルを動的に生成できます。
環境ごとに異なる設定を適用
group_varsやhost_varsを活用すると、環境ごとに異なる設定を適用可能です。
– name: Generate environment-specific config template: src: templates/app.conf.j2 dest: /etc/myapp/config.conf vars_files: – vars/{{ ansible_env }}.yml # 環境ごとに異なる変数ファイルを適用 |
このようにtemplateモジュールを活用すると、環境ごとのカスタマイズを柔軟に行えます。
設定ファイル編集モジュールの使い方
Ansibleには、設定ファイルを自動編集するためのモジュールが用意されています。
lineinfileモジュールは特定の1行を編集し、blockinfileモジュールは複数行を一括で追加・変更できます。
lineinfile モジュール(設定ファイルの1行を編集)
lineinfileモジュールは、設定ファイルの特定の1行を編集するために使用します。既存の行を変更したり、存在しない場合は追加することが可能です。
例えば、/etc/ssh/sshd_config内でPermitRootLoginの設定を変更する場合、以下のPlaybookを使用します。
使用例:SSH設定の変更
– name: Enable root login via SSH hosts: all tasks: – name: Modify PermitRootLogin setting ansible.builtin.lineinfile: path: /etc/ssh/sshd_config regexp: ‘^PermitRootLogin’ line: ‘PermitRootLogin yes’ backup: yes # 変更前にバックアップを作成 |
このタスクでは、PermitRootLoginの設定をyesに変更し、該当行がない場合は追加されます。
regexpを使用することで、既存のエントリを確実に変更できます。
blockinfile モジュール(複数行の編集)
blockinfileモジュールは、設定ファイル内に複数行のブロックを追加・変更する際に使用します。
例えば、/etc/motd(ログイン時のメッセージファイル)にカスタムメッセージを追加する場合、以下のPlaybookを記述します。
使用例:ログインメッセージの追加
– name: Add custom login message hosts: all tasks: – name: Insert message block into /etc/motd ansible.builtin.blockinfile: path: /etc/motd block: | ####################################### # Welcome to our server! # # Unauthorized access is prohibited # ####################################### marker: “# {mark} ANSIBLE MANAGED BLOCK” |
このタスクでは、指定したメッセージブロックを/etc/motdに挿入します。
markerを指定すると、Ansibleが管理するブロックであることが明示され、手動編集による影響を抑えられます。
モジュールの活用例
Ansibleのモジュールを活用することで、サーバー構築やセキュリティ設定の自動化が可能になります。ここでは、代表的なユースケースとして「Webサーバーの構築」と「SSHのセキュリティ強化」を実践例とともに紹介します。
モジュールを用いたWebサーバーの構築
Webサーバーを手動でセットアップするには、パッケージのインストール、設定ファイルの調整、サービスの起動など、複数の手順が必要です。
Ansibleを活用すれば、これらの作業を自動化し、一貫した環境を迅速に構築できます。
Apacheをインストールし、サービスを起動するPlaybook
– name: Set up Apache web server hosts: web_servers become: yes tasks: – name: Install Apache ansible.builtin.yum: name: httpd state: present – name: Start and enable Apache service ansible.builtin.service: name: httpd state: started enabled: yes – name: Deploy index.html ansible.builtin.copy: content: “<h1>Welcome to Ansible-managed Web Server</h1>” dest: /var/www/html/index.html |
- yumモジュールを使用してApacheをインストール
- serviceモジュールでApacheを起動し、サーバー再起動後も自動的に起動するよう設定
- copyモジュールを用いて、シンプルなindex.htmlファイルを配置
SSHのセキュリティ強化
SSHのセキュリティ設定を適切に管理することで、サーバーへの不正アクセスを防ぐことができます。Ansibleのlineinfileモジュールを活用すれば、SSH設定を一括変更し、より安全な構成を実現できます。
SSHのポート変更とRootログイン無効化
以下のPlaybookでは、SSHのポートを2222に変更し、rootユーザーのログインを禁止する設定を適用します。
– name: Secure SSH configuration hosts: all become: yes tasks: – name: Change SSH port ansible.builtin.lineinfile: path: /etc/ssh/sshd_config regexp: ‘^#?Port ‘ line: ‘Port 2222’ backup: yes – name: Disable root login ansible.builtin.lineinfile: path: /etc/ssh/sshd_config regexp: ‘^#?PermitRootLogin ‘ line: ‘PermitRootLogin no’ backup: yes – name: Restart SSH service ansible.builtin.service: name: sshd state: restarted |
- lineinfileモジュールを使い、SSHのポートをデフォルトの22から2222へ変更
- PermitRootLogin noを設定し、rootユーザーの直接ログインを無効化
- backup: yesを指定することで、変更前のファイルをバックアップ
- 設定変更後、serviceモジュールでSSHサービスを再起動
まとめ
Ansibleのモジュールを活用することで、サーバー構成の自動化や運用の効率化を実現できます。
本記事では、パッケージ管理(yum、apt)、ファイル操作(copy、template)、設定変更(lineinfile、blockinfile)などの主要モジュールについて解説しました。
Webサーバーの構築やSSHのセキュリティ強化で行ったように、適切なモジュールを活用すれば、手作業のミスを削減し、一貫性のある環境構築が可能になります。Ansibleのモジュールを理解し、インフラ管理を効率化することで、運用の自動化をさらに進めていきましょう。