Ansible モジュール 100 連発チートシート:file/user/service/git ほか

Ansible でインフラ自動化を進める上で、モジュールの使い方を素早く参照できるチートシートがあると便利ですよね。今回は、実務でよく使われる Ansible モジュールを 100 個厳選し、用途別に分類して一覧にまとめました。ファイル操作、ユーザー管理、サービス制御、Git 連携など、実践的なモジュールを網羅しています。
この記事では、各モジュールの基本的な使い方と実用例を紹介しますので、日々の運用やプレイブック作成の参考にしてください。
早見表:Ansible モジュール 100 選
以下の表は、本記事で紹介する 100 個のモジュールを用途別に分類した早見表です。必要なモジュールをすぐに見つけられるよう、カテゴリ別に整理しました。
# | カテゴリ | モジュール名 | 主な用途 |
---|---|---|---|
1 | ファイル操作 | file | ファイル・ディレクトリの作成・削除・権限設定 |
2 | ファイル操作 | copy | ファイルのコピー |
3 | ファイル操作 | template | Jinja2 テンプレートからファイル生成 |
4 | ファイル操作 | lineinfile | ファイル内の特定行を編集 |
5 | ファイル操作 | blockinfile | ファイル内にブロック単位でテキスト挿入 |
6 | ファイル操作 | replace | 正規表現でファイル内容を置換 |
7 | ファイル操作 | fetch | リモートからローカルへファイル取得 |
8 | ファイル操作 | synchronize | rsync を使った同期 |
9 | ファイル操作 | stat | ファイル情報の取得 |
10 | ファイル操作 | find | ファイル検索 |
11 | ユーザー・グループ | user | ユーザーアカウント管理 |
12 | ユーザー・グループ | group | グループ管理 |
13 | ユーザー・グループ | authorized_key | SSH 公開鍵の管理 |
14 | ユーザー・グループ | getent | システム情報の取得 |
15 | ユーザー・グループ | known_hosts | SSH known_hosts の管理 |
16 | パッケージ管理 | apt | Debian/Ubuntu パッケージ管理 |
17 | パッケージ管理 | yum | RHEL/CentOS パッケージ管理 |
18 | パッケージ管理 | dnf | Fedora/RHEL 8+ パッケージ管理 |
19 | パッケージ管理 | package | OS 非依存パッケージ管理 |
20 | パッケージ管理 | pip | Python パッケージ管理 |
21 | パッケージ管理 | npm | Node.js パッケージ管理 |
22 | パッケージ管理 | gem | Ruby パッケージ管理 |
23 | パッケージ管理 | apt_repository | APT リポジトリ管理 |
24 | パッケージ管理 | yum_repository | YUM リポジトリ管理 |
25 | パッケージ管理 | apt_key | APT リポジトリキー管理 |
26 | サービス管理 | service | サービスの起動・停止・再起動 |
27 | サービス管理 | systemd | systemd サービス管理 |
28 | サービス管理 | cron | cron ジョブ管理 |
29 | サービス管理 | at | at ジョブ管理 |
30 | サービス管理 | supervisorctl | Supervisor プロセス管理 |
31 | バージョン管理 | git | Git リポジトリ操作 |
32 | バージョン管理 | subversion | SVN リポジトリ操作 |
33 | バージョン管理 | hg | Mercurial リポジトリ操作 |
34 | コマンド実行 | command | コマンド実行(シェル機能なし) |
35 | コマンド実行 | shell | シェルコマンド実行 |
36 | コマンド実行 | raw | SSH 経由で生コマンド実行 |
37 | コマンド実行 | script | ローカルスクリプトをリモート実行 |
38 | コマンド実行 | expect | 対話型コマンドの自動化 |
39 | ネットワーク | uri | HTTP/HTTPS リクエスト |
40 | ネットワーク | get_url | URL からファイルダウンロード |
41 | ネットワーク | slurp | リモートファイルを Base64 で取得 |
42 | ネットワーク | wait_for | ポート待機・ファイル待機 |
43 | ネットワーク | ping | 疎通確認 |
44 | ネットワーク | nmcli | NetworkManager 管理 |
45 | ネットワーク | iptables | ファイアウォールルール管理 |
46 | ネットワーク | ufw | Ubuntu ファイアウォール管理 |
47 | ネットワーク | firewalld | firewalld 管理 |
48 | ネットワーク | hostname | ホスト名設定 |
49 | Docker | docker_container | Docker コンテナ管理 |
50 | Docker | docker_image | Docker イメージ管理 |
51 | Docker | docker_network | Docker ネットワーク管理 |
52 | Docker | docker_volume | Docker ボリューム管理 |
53 | Docker | docker_compose | Docker Compose 管理 |
54 | Docker | docker_login | Docker レジストリログイン |
55 | クラウド(AWS) | ec2 | EC2 インスタンス管理 |
56 | クラウド(AWS) | ec2_instance | EC2 インスタンス管理(新版) |
57 | クラウド(AWS) | s3_bucket | S3 バケット管理 |
58 | クラウド(AWS) | rds | RDS インスタンス管理 |
59 | クラウド(AWS) | route53 | Route53 DNS 管理 |
60 | クラウド(AWS) | cloudformation | CloudFormation スタック管理 |
61 | データベース | mysql_db | MySQL データベース管理 |
62 | データベース | mysql_user | MySQL ユーザー管理 |
63 | データベース | postgresql_db | PostgreSQL データベース管理 |
64 | データベース | postgresql_user | PostgreSQL ユーザー管理 |
65 | データベース | mongodb_user | MongoDB ユーザー管理 |
66 | データベース | redis | Redis 管理 |
67 | アーカイブ | archive | アーカイブ作成 |
68 | アーカイブ | unarchive | アーカイブ展開 |
69 | アーカイブ | tar | tar アーカイブ操作 |
70 | アーカイブ | zip | zip アーカイブ操作 |
71 | システム情報 | setup | ファクト収集 |
72 | システム情報 | debug | デバッグ出力 |
73 | システム情報 | assert | アサーション |
74 | システム情報 | set_fact | 変数設定 |
75 | システム情報 | pause | 一時停止 |
76 | システム情報 | fail | 強制失敗 |
77 | システム情報 | meta | メタタスク実行 |
78 | マウント・ディスク | mount | ファイルシステムマウント |
79 | マウント・ディスク | filesystem | ファイルシステム作成 |
80 | マウント・ディスク | parted | パーティション管理 |
81 | マウント・ディスク | lvg | LVM ボリュームグループ管理 |
82 | マウント・ディスク | lvol | LVM 論理ボリューム管理 |
83 | 設定ファイル | ini_file | INI ファイル編集 |
84 | 設定ファイル | xml | XML ファイル編集 |
85 | 設定ファイル | json_query | JSON クエリ |
86 | 設定ファイル | yaml | YAML ファイル操作 |
87 | 通知 | メール送信 | |
88 | 通知 | slack | Slack 通知 |
89 | 通知 | jabber | Jabber 通知 |
90 | セキュリティ | selinux | SELinux 設定 |
91 | セキュリティ | seboolean | SELinux ブール値設定 |
92 | セキュリティ | seport | SELinux ポート設定 |
93 | セキュリティ | acl | ACL 管理 |
94 | 証明書・暗号化 | openssl_certificate | SSL 証明書管理 |
95 | 証明書・暗号化 | openssl_privatekey | 秘密鍵生成 |
96 | 証明書・暗号化 | openssl_csr | CSR 生成 |
97 | 証明書・暗号化 | htpasswd | htpasswd ファイル管理 |
98 | 時刻・タイムゾーン | timezone | タイムゾーン設定 |
99 | 時刻・タイムゾーン | service_facts | サービス情報取得 |
100 | その他 | reboot | システム再起動 |
背景
Ansible は、インフラ構成管理ツールとして広く利用されていますが、その豊富なモジュール群を使いこなすには、それぞれの機能や使い方を把握する必要があります。公式ドキュメントは詳細ですが、実務で頻繁に使うモジュールを素早く参照したい場面も多いですよね。
特に以下のような場面で、モジュールのクイックリファレンスが役立ちます。
- プレイブック作成時に適切なモジュールを選びたい
- 既存のプレイブックを修正する際に構文を確認したい
- チーム内でモジュールの使い方を統一したい
下図は、Ansible の基本的な動作フローを示したものです。プレイブックに記述されたタスクがモジュールを呼び出し、管理対象ノードに適用されます。
mermaidflowchart LR
operator["運用者"] -->|playbook作成| playbook["Playbook<br/>(YAML)"]
playbook -->|タスク実行| ansible["Ansible Engine"]
ansible -->|モジュール呼び出し| modules["モジュール群<br/>(file/user/service等)"]
modules -->|SSH経由で適用| nodes["管理対象ノード"]
nodes -->|実行結果| ansible
ansible -->|結果表示| operator
このフローにおいて、モジュールは Ansible の中核機能を担っています。適切なモジュールを選択することで、冪等性を保ちながら効率的なインフラ管理が実現できるのです。
課題
Ansible のモジュールは 3000 個以上存在し、すべてを把握するのは現実的ではありません。また、似たような機能を持つモジュールが複数あるため、どれを使うべきか迷うこともあります。
実務でよく直面する課題をまとめました。
- モジュール選択の迷い: ファイル編集に
lineinfile
、replace
、blockinfile
のどれを使うべきか - 構文の忘却: よく使うモジュールでも、パラメータ名や構文を忘れがち
- バージョン差異: OS やディストリビューションによって推奨されるモジュールが異なる(
yum
vsdnf
など) - ベストプラクティス不明: 冪等性を保つための正しい記述方法がわからない
下図は、モジュール選択時によくある迷いのパターンを示しています。
mermaidflowchart TD
task["タスク:<br/>設定ファイルを編集したい"] --> question{"編集方法は?"}
question -->|1行だけ変更| lineinfile["lineinfile<br/>モジュール"]
question -->|複数行のブロック追加| blockinfile["blockinfile<br/>モジュール"]
question -->|正規表現で置換| replace_mod["replace<br/>モジュール"]
question -->|ファイル全体を置換| template_mod["template<br/>モジュール"]
lineinfile --> result["適切な<br/>モジュール選択"]
blockinfile --> result
replace_mod --> result
template_mod --> result
このように、目的に応じて最適なモジュールを選ぶ判断力が求められます。
解決策
本記事では、実務でよく使われる Ansible モジュール 100 個を厳選し、用途別に分類して紹介します。各モジュールについて、以下の情報を提供します。
- 基本的な使い方: 最小限の構文例
- よく使うパラメータ: 実務で頻出するオプション
- 実用例: 実際のプレイブックで使える具体例
モジュールは以下のカテゴリに分類しています。
- ファイル操作
- ユーザー・グループ管理
- パッケージ管理
- サービス管理
- バージョン管理(Git など)
- コマンド実行
- ネットワーク
- Docker
- クラウド(AWS)
- データベース
- アーカイブ
- システム情報
- マウント・ディスク
- 設定ファイル
- 通知
- セキュリティ
- 証明書・暗号化
- 時刻・タイムゾーン
- その他
各カテゴリ内で、基本的なものから応用的なものへと順に説明していきます。
下図は、モジュールをカテゴリ別に整理した構造を示しています。
mermaidflowchart TB
modules["Ansible モジュール"] --> file_ops["ファイル操作<br/>(10モジュール)"]
modules --> user_mgmt["ユーザー・グループ<br/>(5モジュール)"]
modules --> pkg_mgmt["パッケージ管理<br/>(10モジュール)"]
modules --> svc_mgmt["サービス管理<br/>(5モジュール)"]
modules --> vcs["バージョン管理<br/>(3モジュール)"]
modules --> cmd_exec["コマンド実行<br/>(5モジュール)"]
modules --> network["ネットワーク<br/>(10モジュール)"]
modules --> docker["Docker<br/>(6モジュール)"]
modules --> cloud["クラウド<br/>(6モジュール)"]
modules --> db["データベース<br/>(6モジュール)"]
modules --> others["その他<br/>(34モジュール)"]
この分類により、目的のモジュールを素早く見つけられるようになります。
具体例
それでは、カテゴリ別に具体的なモジュールとその使用例を見ていきましょう。
ファイル操作
ファイルやディレクトリの操作は、インフラ構築の基本です。このカテゴリでは、ファイルの作成・削除・編集・コピーなど、さまざまな操作を行うモジュールを紹介します。
1. file - ファイル・ディレクトリの作成と権限設定
file
モジュールは、ファイルやディレクトリの作成、削除、権限変更、シンボリックリンク作成など、基本的なファイル操作を行います。
yaml- name: ディレクトリを作成
file:
path: /var/www/html
state: directory
owner: www-data
group: www-data
mode: '0755'
主要なパラメータは以下の通りです。
path
: 対象のパス(必須)state
:directory
(ディレクトリ)、file
(ファイル)、link
(シンボリックリンク)、absent
(削除)owner
,group
: 所有者とグループmode
: パーミッション
ファイル削除の例です。
yaml- name: ファイルを削除
file:
path: /tmp/old_file.txt
state: absent
シンボリックリンク作成の例です。
yaml- name: シンボリックリンクを作成
file:
src: /usr/local/bin/python3.9
dest: /usr/local/bin/python
state: link
2. copy - ファイルのコピー
copy
モジュールは、コントローラーノードからリモートホストへファイルをコピーします。単純なファイル配布に便利ですね。
yaml- name: 設定ファイルをコピー
copy:
src: /path/to/local/nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
backup: yes
backup: yes
を指定すると、既存ファイルをバックアップしてから上書きします。
内容を直接指定してファイルを作成することもできます。
yaml- name: 内容を直接指定してファイル作成
copy:
content: |
# Custom configuration
ServerName example.com
dest: /etc/apache2/conf.d/custom.conf
mode: '0644'
3. template - Jinja2 テンプレートからファイル生成
template
モジュールは、Jinja2 テンプレートを使って動的にファイルを生成します。変数を埋め込んだ設定ファイルを配布する際に活躍します。
yaml- name: テンプレートから設定ファイルを生成
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
validate: 'nginx -t -c %s'
validate
パラメータで、配置前に設定ファイルの構文チェックができます。%s
には生成されたファイルパスが入ります。
テンプレートファイルの例(nginx.conf.j2
)です。
jinja2server {
listen {{ nginx_port }};
server_name {{ server_name }};
root {{ document_root }};
index index.html;
}
4. lineinfile - ファイル内の特定行を編集
lineinfile
モジュールは、ファイル内の特定の行を検索して追加・変更・削除します。1 行単位の設定変更に便利です。
yaml- name: sshd_config で PasswordAuthentication を無効化
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PasswordAuthentication'
line: 'PasswordAuthentication no'
state: present
backup: yes
regexp
で既存行を検索し、line
で指定した内容に置き換えます。該当行がなければ追加されます。
行を削除する例です。
yaml- name: 特定の行を削除
lineinfile:
path: /etc/hosts
regexp: '^192\.168\.1\.100'
state: absent
5. blockinfile - ブロック単位でテキスト挿入
blockinfile
モジュールは、複数行のテキストブロックをファイルに挿入・更新・削除します。設定ファイルにセクションを追加する際に便利です。
yaml- name: /etc/hosts にカスタムエントリを追加
blockinfile:
path: /etc/hosts
block: |
# Custom hosts
192.168.1.10 web01.local
192.168.1.11 web02.local
marker: '# {mark} ANSIBLE MANAGED BLOCK'
insertafter: EOF
marker
パラメータで、ブロックの開始・終了を示すコメントを指定します(デフォルトは # BEGIN/END
)。
6. replace - 正規表現でファイル内容を置換
replace
モジュールは、正規表現を使ってファイル内のパターンを置換します。lineinfile
よりも柔軟な置換が可能です。
yaml- name: 設定ファイル内の IP アドレスを置換
replace:
path: /etc/myapp/config.ini
regexp: 'server=\d+\.\d+\.\d+\.\d+'
replace: 'server=192.168.10.50'
backup: yes
複数箇所の置換が一度に実行されます。
7. fetch - リモートからローカルへファイル取得
fetch
モジュールは、リモートホストからコントローラーノードへファイルを取得します。ログ収集やバックアップに便利ですね。
yaml- name: リモートのログファイルを取得
fetch:
src: /var/log/nginx/access.log
dest: /tmp/logs/{{ inventory_hostname }}/
flat: yes
flat: yes
を指定すると、ディレクトリ構造を保持せずフラットに保存します。
8. synchronize - rsync を使った同期
synchronize
モジュールは、rsync を使ってファイルやディレクトリを同期します。大量ファイルの転送に効率的です。
yaml- name: ローカルからリモートへディレクトリを同期
synchronize:
src: /var/www/html/
dest: /var/www/html/
delete: yes
rsync_opts:
- '--exclude=*.log'
- '--exclude=cache/'
delete: yes
で、転送元にないファイルを転送先から削除します。
9. stat - ファイル情報の取得
stat
モジュールは、ファイルやディレクトリの情報を取得します。条件分岐で使うことが多いモジュールです。
yaml- name: ファイルの存在確認
stat:
path: /etc/myapp/config.yaml
register: config_file
- name: ファイルが存在しない場合は作成
copy:
content: 'default: config'
dest: /etc/myapp/config.yaml
when: not config_file.stat.exists
取得した情報は register
で変数に保存し、後続タスクで利用します。
10. find - ファイル検索
find
モジュールは、指定した条件でファイルを検索します。ログのクリーンアップなどに便利です。
yaml- name: 30 日以上前のログファイルを検索
find:
paths: /var/log/myapp
patterns: '*.log'
age: 30d
age_stamp: mtime
register: old_logs
- name: 検索したファイルを削除
file:
path: '{{ item.path }}'
state: absent
loop: '{{ old_logs.files }}'
検索結果を register
で保存し、loop
で処理します。
ユーザー・グループ管理
サーバー運用では、ユーザーアカウントや SSH キーの管理が重要です。このカテゴリでは、ユーザー・グループ関連のモジュールを紹介します。
11. user - ユーザーアカウント管理
user
モジュールは、ユーザーアカウントの作成・変更・削除を行います。
yaml- name: デプロイ用ユーザーを作成
user:
name: deploy
shell: /bin/bash
groups: sudo,www-data
append: yes
create_home: yes
state: present
append: yes
で、既存のグループを保持したまま追加グループを指定できます。
パスワード設定の例です。パスワードはハッシュ化して指定します。
yaml- name: ユーザーにパスワードを設定
user:
name: deploy
password: "{{ 'secretpassword' | password_hash('sha512') }}"
update_password: on_create
update_password: on_create
で、初回作成時のみパスワードを設定します。
12. group - グループ管理
group
モジュールは、グループの作成・削除を行います。
yaml- name: アプリケーション用グループを作成
group:
name: appgroup
gid: 5000
state: present
gid
で、グループ ID を明示的に指定できます。
13. authorized_key - SSH 公開鍵の管理
authorized_key
モジュールは、ユーザーの ~/.ssh/authorized_keys
に公開鍵を追加・削除します。
yaml- name: デプロイユーザーに SSH 公開鍵を追加
authorized_key:
user: deploy
state: present
key: "{{ lookup('file', '/path/to/id_rsa.pub') }}"
lookup
関数で、ローカルの公開鍵ファイルを読み込みます。
複数の鍵を管理する例です。
yaml- name: 複数の SSH 鍵を追加
authorized_key:
user: deploy
state: present
key: '{{ item }}'
loop:
- 'ssh-rsa AAAAB3... user1@host'
- 'ssh-rsa AAAAB3... user2@host'
14. getent - システム情報の取得
getent
モジュールは、ユーザーやグループの情報を取得します。
yaml- name: ユーザー情報を取得
getent:
database: passwd
key: deploy
register: user_info
- name: UID を表示
debug:
msg: 'UID is {{ user_info.ansible_facts.getent_passwd.deploy[1] }}'
取得した情報は ansible_facts
に格納されます。
15. known_hosts - SSH known_hosts の管理
known_hosts
モジュールは、SSH の known_hosts
ファイルを管理します。
yaml- name: GitHub のホストキーを追加
known_hosts:
name: github.com
key: "{{ lookup('pipe', 'ssh-keyscan -t rsa github.com') }}"
state: present
ssh-keyscan
でホストキーを取得し、追加します。
パッケージ管理
アプリケーションのインストールや更新には、パッケージマネージャーを使います。このカテゴリでは、OS やプログラミング言語ごとのパッケージ管理モジュールを紹介します。
16. apt - Debian/Ubuntu パッケージ管理
apt
モジュールは、Debian 系 OS のパッケージを管理します。
yaml- name: Nginx をインストール
apt:
name: nginx
state: present
update_cache: yes
update_cache: yes
で、apt update
を実行してからインストールします。
複数パッケージのインストール例です。
yaml- name: 複数パッケージをインストール
apt:
name:
- git
- curl
- vim
state: present
17. yum - RHEL/CentOS パッケージ管理
yum
モジュールは、RHEL 系 OS のパッケージを管理します。
yaml- name: Apache をインストール
yum:
name: httpd
state: present
特定バージョンを指定する例です。
yaml- name: 特定バージョンの Python をインストール
yum:
name: python-3.8.10
state: present
18. dnf - Fedora/RHEL 8+ パッケージ管理
dnf
モジュールは、yum
の後継として RHEL 8 以降で推奨されるパッケージマネージャーです。
yaml- name: PostgreSQL をインストール
dnf:
name: postgresql-server
state: latest
state: latest
で、最新バージョンにアップデートします。
19. package - OS 非依存パッケージ管理
package
モジュールは、OS を自動判別してパッケージをインストールします。複数 OS 対応のプレイブックに便利です。
yaml- name: vim をインストール(OS 自動判別)
package:
name: vim
state: present
OS ごとに適切なパッケージマネージャー(apt
、yum
、dnf
など)が自動選択されます。
20. pip - Python パッケージ管理
pip
モジュールは、Python パッケージをインストールします。
yaml- name: Flask をインストール
pip:
name: flask
version: 2.0.1
state: present
requirements.txt からインストールする例です。
yaml- name: requirements.txt からパッケージをインストール
pip:
requirements: /path/to/requirements.txt
virtualenv: /opt/myapp/venv
virtualenv
で、仮想環境を指定できます。
21. npm - Node.js パッケージ管理
npm
モジュールは、Node.js パッケージをインストールします。
yaml- name: Express をグローバルインストール
npm:
name: express
global: yes
state: present
package.json
からインストールする例です。
yaml- name: package.json に基づいてインストール
npm:
path: /var/www/myapp
state: present
22. gem - Ruby パッケージ管理
gem
モジュールは、Ruby の gem をインストールします。
yaml- name: Rails をインストール
gem:
name: rails
version: 6.1.0
state: present
特定の Ruby バージョンを指定する例です。
yaml- name: 特定バージョンの Ruby で gem をインストール
gem:
name: bundler
executable: /usr/local/bin/ruby2.7
state: present
23. apt_repository - APT リポジトリ管理
apt_repository
モジュールは、APT のリポジトリを追加・削除します。
yaml- name: Docker の公式リポジトリを追加
apt_repository:
repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable
state: present
filename: docker
PPA を追加する例です。
yaml- name: Nginx の PPA を追加
apt_repository:
repo: ppa:nginx/stable
state: present
24. yum_repository - YUM リポジトリ管理
yum_repository
モジュールは、YUM のリポジトリを管理します。
yaml- name: EPEL リポジトリを追加
yum_repository:
name: epel
description: EPEL Repository
baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
gpgcheck: yes
gpgkey: https://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8
state: present
25. apt_key - APT リポジトリキー管理
apt_key
モジュールは、APT リポジトリの GPG キーを管理します。
yaml- name: Docker の GPG キーを追加
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
キーサーバーから取得する例です。
yaml- name: キーサーバーから GPG キーを追加
apt_key:
keyserver: keyserver.ubuntu.com
id: 0EBFCD88
state: present
サービス管理
インストールしたアプリケーションを起動・停止したり、自動起動を設定したりするモジュール群です。
26. service - サービスの起動・停止・再起動
service
モジュールは、サービスの状態を管理します。OS を自動判別するため、汎用性が高いです。
yaml- name: Nginx を起動して自動起動を有効化
service:
name: nginx
state: started
enabled: yes
state
には started
(起動)、stopped
(停止)、restarted
(再起動)、reloaded
(リロード)を指定できます。
設定変更後にサービスを再起動する例です。
yaml- name: 設定ファイルを更新
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
notify
と handlers
を使うと、設定変更時のみ再起動できます。
27. systemd - systemd サービス管理
systemd
モジュールは、systemd 専用の機能を使ってサービスを管理します。
yaml- name: systemd デーモンをリロード
systemd:
daemon_reload: yes
- name: カスタムサービスを起動
systemd:
name: myapp
state: started
enabled: yes
ユニットファイルを配置した後、daemon_reload
でシステムに認識させます。
28. cron - cron ジョブ管理
cron
モジュールは、cron ジョブを追加・削除します。
yaml- name: 毎日午前 2 時にバックアップスクリプトを実行
cron:
name: 'Daily backup'
minute: '0'
hour: '2'
job: '/usr/local/bin/backup.sh'
user: root
state: present
name
で一意の名前を指定すると、同じ名前のジョブを更新・削除できます。
特殊な時刻指定の例です。
yaml- name: 再起動時にスクリプトを実行
cron:
name: 'Run on reboot'
special_time: reboot
job: '/usr/local/bin/startup.sh'
special_time
には reboot
、hourly
、daily
、weekly
、monthly
が使えます。
29. at - at ジョブ管理
at
モジュールは、一度だけ実行するジョブをスケジュールします。
yaml- name: 10 分後にスクリプトを実行
at:
command: '/usr/local/bin/cleanup.sh'
count: 10
units: minutes
state: present
units
には minutes
、hours
、days
、weeks
が使えます。
30. supervisorctl - Supervisor プロセス管理
supervisorctl
モジュールは、Supervisor で管理されているプロセスを制御します。
yaml- name: アプリケーションプロセスを再起動
supervisorctl:
name: myapp
state: restarted
supervisorctl_path: /usr/local/bin/supervisorctl
複数プロセスを一度に操作する例です。
yaml- name: すべてのプロセスを再起動
supervisorctl:
name: all
state: restarted
バージョン管理
ソースコードの取得や更新に使うモジュールです。CI/CD パイプラインでよく使われます。
31. git - Git リポジトリ操作
git
モジュールは、Git リポジトリをクローンしたり更新したりします。
yaml- name: リポジトリをクローン
git:
repo: https://github.com/example/myapp.git
dest: /var/www/myapp
version: main
update: yes
version
でブランチ、タグ、コミットハッシュを指定できます。
SSH キーを使った認証の例です。
yaml- name: SSH キーを使ってクローン
git:
repo: git@github.com:example/myapp.git
dest: /var/www/myapp
key_file: /home/deploy/.ssh/id_rsa
accept_hostkey: yes
accept_hostkey: yes
で、初回接続時のホストキー確認を自動承認します。
32. subversion - SVN リポジトリ操作
subversion
モジュールは、SVN リポジトリをチェックアウトします。
yaml- name: SVN リポジトリをチェックアウト
subversion:
repo: https://svn.example.com/project/trunk
dest: /var/www/project
username: svnuser
password: svnpass
33. hg - Mercurial リポジトリ操作
hg
モジュールは、Mercurial リポジトリを操作します。
yaml- name: Mercurial リポジトリをクローン
hg:
repo: https://hg.example.com/project
dest: /var/www/project
revision: default
コマンド実行
シェルコマンドを直接実行するモジュールです。専用モジュールがない操作を行う際に使います。
34. command - コマンド実行(シェル機能なし)
command
モジュールは、シェルを介さずにコマンドを実行します。セキュリティ上、shell
より推奨されます。
yaml- name: アプリケーションのバージョンを確認
command: /usr/local/bin/myapp --version
register: app_version
changed_when: false
changed_when: false
で、読み取り専用コマンドを「変更なし」として扱います。
条件付き実行の例です。
yaml- name: ファイルが存在する場合のみ実行
command: /usr/local/bin/process_file.sh /path/to/file
args:
creates: /path/to/output
creates
で、指定ファイルが存在しない場合のみ実行します。
35. shell - シェルコマンド実行
shell
モジュールは、シェルを介してコマンドを実行します。パイプやリダイレクトが使えます。
yaml- name: ログファイルから特定の行を抽出
shell: grep "ERROR" /var/log/myapp.log | wc -l
register: error_count
環境変数を設定する例です。
yaml- name: 環境変数を設定してコマンド実行
shell: echo $MY_VAR
environment:
MY_VAR: 'Hello Ansible'
36. raw - SSH 経由で生コマンド実行
raw
モジュールは、Python がインストールされていないホストでもコマンドを実行できます。初期セットアップに便利です。
yaml- name: Python をインストール
raw: apt-get update && apt-get install -y python3
37. script - ローカルスクリプトをリモート実行
script
モジュールは、コントローラー上のスクリプトをリモートホストで実行します。
yaml- name: ローカルのスクリプトをリモートで実行
script: /path/to/local/script.sh
args:
creates: /path/to/flag_file
引数を渡す例です。
yaml- name: スクリプトに引数を渡して実行
script: /path/to/script.sh arg1 arg2
38. expect - 対話型コマンドの自動化
expect
モジュールは、対話型のコマンドを自動化します。パスワード入力などに使います。
yaml- name: パスワードプロンプトに応答
expect:
command: passwd myuser
responses:
'New password:': '{{ new_password }}'
'Retype new password:': '{{ new_password }}'
ネットワーク
ネットワーク設定や HTTP リクエストなど、ネットワーク関連の操作を行うモジュールです。
39. uri - HTTP/HTTPS リクエスト
uri
モジュールは、HTTP リクエストを送信して API を呼び出したり、Web サイトの稼働確認をしたりします。
yaml- name: API にリクエストを送信
uri:
url: https://api.example.com/v1/status
method: GET
return_content: yes
register: api_response
- name: レスポンスを表示
debug:
msg: '{{ api_response.json }}'
POST リクエストの例です。
yaml- name: JSON データを POST
uri:
url: https://api.example.com/v1/create
method: POST
body_format: json
body:
name: 'New Item'
value: 123
status_code: 201
status_code
で、期待するステータスコードを指定できます。
40. get_url - URL からファイルダウンロード
get_url
モジュールは、URL からファイルをダウンロードします。
yaml- name: 最新の Docker Compose をダウンロード
get_url:
url: https://github.com/docker/compose/releases/latest/download/docker-compose-Linux-x86_64
dest: /usr/local/bin/docker-compose
mode: '0755'
チェックサムを検証する例です。
yaml- name: ファイルをダウンロードしてチェックサム検証
get_url:
url: https://example.com/file.tar.gz
dest: /tmp/file.tar.gz
checksum: sha256:abc123...
41. slurp - リモートファイルを Base64 で取得
slurp
モジュールは、リモートファイルの内容を Base64 エンコードして取得します。
yaml- name: リモートファイルを取得
slurp:
src: /etc/myapp/config.yaml
register: config_content
- name: 内容をデコードして表示
debug:
msg: '{{ config_content.content | b64decode }}'
42. wait_for - ポート待機・ファイル待機
wait_for
モジュールは、ポートが開くまで待機したり、ファイルが作成されるまで待機したりします。
yaml- name: PostgreSQL が起動するまで待機
wait_for:
port: 5432
delay: 5
timeout: 300
delay
で待機開始までの秒数、timeout
で最大待機時間を指定します。
ファイルの出現を待つ例です。
yaml- name: ファイルが作成されるまで待機
wait_for:
path: /var/run/myapp.pid
state: present
timeout: 60
43. ping - 疎通確認
ping
モジュールは、Ansible の疎通確認を行います。ICMP ping ではなく、Python モジュールの動作確認です。
yaml- name: 疎通確認
ping:
単純ですが、プレイブック実行前の接続テストに便利です。
44. nmcli - NetworkManager 管理
nmcli
モジュールは、NetworkManager を使ってネットワーク接続を管理します。
yaml- name: 静的 IP アドレスを設定
nmcli:
conn_name: eth0
ifname: eth0
type: ethernet
ip4: 192.168.1.100/24
gw4: 192.168.1.1
dns4: 8.8.8.8
state: present
45. iptables - ファイアウォールルール管理
iptables
モジュールは、iptables のルールを追加・削除します。
yaml- name: HTTP ポートを開放
iptables:
chain: INPUT
protocol: tcp
destination_port: 80
jump: ACCEPT
state: present
特定 IP からのアクセスを許可する例です。
yaml- name: 特定 IP から SSH を許可
iptables:
chain: INPUT
protocol: tcp
source: 192.168.1.0/24
destination_port: 22
jump: ACCEPT
46. ufw - Ubuntu ファイアウォール管理
ufw
モジュールは、Ubuntu の UFW を管理します。
yaml- name: UFW を有効化
ufw:
state: enabled
policy: deny
- name: SSH を許可
ufw:
rule: allow
port: 22
proto: tcp
アプリケーションプロファイルを使う例です。
yaml- name: Nginx を許可
ufw:
rule: allow
name: 'Nginx Full'
47. firewalld - firewalld 管理
firewalld
モジュールは、RHEL 系の firewalld を管理します。
yaml- name: HTTP サービスを許可
firewalld:
service: http
permanent: yes
state: enabled
immediate: yes
permanent: yes
で恒久的なルールに、immediate: yes
で即座に適用します。
48. hostname - ホスト名設定
hostname
モジュールは、ホスト名を設定します。
yaml- name: ホスト名を設定
hostname:
name: web01.example.com
Docker
Docker コンテナやイメージを管理するモジュールです。コンテナ化されたアプリケーションのデプロイに使います。
49. docker_container - Docker コンテナ管理
docker_container
モジュールは、Docker コンテナを作成・起動・停止します。
yaml- name: Nginx コンテナを起動
docker_container:
name: nginx
image: nginx:latest
state: started
ports:
- '80:80'
volumes:
- /var/www/html:/usr/share/nginx/html:ro
環境変数を設定する例です。
yaml- name: アプリケーションコンテナを起動
docker_container:
name: myapp
image: myapp:v1.0
state: started
env:
DATABASE_URL: 'postgresql://db:5432/mydb'
SECRET_KEY: '{{ secret_key }}'
50. docker_image - Docker イメージ管理
docker_image
モジュールは、Docker イメージをビルド・取得・削除します。
yaml- name: イメージをプル
docker_image:
name: postgres:13
source: pull
Dockerfile からビルドする例です。
yaml- name: Dockerfile からイメージをビルド
docker_image:
name: myapp:v1.0
source: build
build:
path: /path/to/app
dockerfile: Dockerfile
51. docker_network - Docker ネットワーク管理
docker_network
モジュールは、Docker ネットワークを作成・削除します。
yaml- name: カスタムネットワークを作成
docker_network:
name: app_network
driver: bridge
state: present
52. docker_volume - Docker ボリューム管理
docker_volume
モジュールは、Docker ボリュームを管理します。
yaml- name: データボリュームを作成
docker_volume:
name: postgres_data
state: present
53. docker_compose - Docker Compose 管理
docker_compose
モジュールは、Docker Compose で複数コンテナを管理します。
yaml- name: Docker Compose でサービスを起動
docker_compose:
project_src: /path/to/docker-compose-dir
state: present
特定のサービスだけ再起動する例です。
yaml- name: 特定サービスを再起動
docker_compose:
project_src: /path/to/docker-compose-dir
services:
- web
restarted: yes
54. docker_login - Docker レジストリログイン
docker_login
モジュールは、Docker レジストリにログインします。
yaml- name: Docker Hub にログイン
docker_login:
username: myuser
password: '{{ docker_password }}'
プライベートレジストリにログインする例です。
yaml- name: プライベートレジストリにログイン
docker_login:
registry_url: registry.example.com
username: myuser
password: '{{ registry_password }}'
クラウド(AWS)
AWS のリソースを管理するモジュールです。クラウドインフラの自動化に使います。
55. ec2 - EC2 インスタンス管理
ec2
モジュールは、EC2 インスタンスを作成・起動・停止します(旧バージョン)。
yaml- name: EC2 インスタンスを起動
ec2:
key_name: mykey
instance_type: t2.micro
image: ami-0c55b159cbfafe1f0
wait: yes
group: webserver
count: 1
region: us-east-1
vpc_subnet_id: subnet-12345678
assign_public_ip: yes
56. ec2_instance - EC2 インスタンス管理(新版)
ec2_instance
モジュールは、ec2
の後継モジュールです。より柔軟な設定が可能です。
yaml- name: EC2 インスタンスを起動
ec2_instance:
name: web-server-01
key_name: mykey
instance_type: t3.micro
image_id: ami-0c55b159cbfafe1f0
region: us-east-1
vpc_subnet_id: subnet-12345678
security_groups:
- sg-12345678
state: running
tags:
Environment: production
Role: webserver
57. s3_bucket - S3 バケット管理
s3_bucket
モジュールは、S3 バケットを作成・削除します。
yaml- name: S3 バケットを作成
s3_bucket:
name: my-app-bucket
region: ap-northeast-1
state: present
versioning: yes
バケットポリシーを設定する例です。
yaml- name: バケットポリシーを設定
s3_bucket:
name: my-app-bucket
policy: "{{ lookup('file', 'bucket-policy.json') }}"
state: present
58. rds - RDS インスタンス管理
rds
モジュールは、RDS データベースインスタンスを管理します。
yaml- name: RDS インスタンスを作成
rds:
command: create
instance_name: mydb
db_engine: postgres
size: 20
instance_type: db.t3.micro
username: dbadmin
password: '{{ db_password }}'
region: us-east-1
59. route53 - Route53 DNS 管理
route53
モジュールは、Route53 の DNS レコードを管理します。
yaml- name: A レコードを追加
route53:
state: present
zone: example.com
record: www.example.com
type: A
ttl: 300
value: 192.0.2.1
CNAME レコードの例です。
yaml- name: CNAME レコードを追加
route53:
state: present
zone: example.com
record: blog.example.com
type: CNAME
value: www.example.com
ttl: 300
60. cloudformation - CloudFormation スタック管理
cloudformation
モジュールは、CloudFormation スタックを作成・更新・削除します。
yaml- name: CloudFormation スタックを作成
cloudformation:
stack_name: my-app-stack
state: present
region: us-east-1
template: files/cloudformation-template.yaml
template_parameters:
InstanceType: t3.micro
KeyName: mykey
データベース
データベースやユーザーを管理するモジュールです。アプリケーション用のデータベース環境を構築します。
61. mysql_db - MySQL データベース管理
mysql_db
モジュールは、MySQL データベースを作成・削除します。
yaml- name: MySQL データベースを作成
mysql_db:
name: myapp_db
state: present
encoding: utf8mb4
collation: utf8mb4_general_ci
login_user: root
login_password: '{{ mysql_root_password }}'
データベースをバックアップする例です。
yaml- name: データベースをダンプ
mysql_db:
name: myapp_db
state: dump
target: /backup/myapp_db.sql
login_user: root
login_password: '{{ mysql_root_password }}'
62. mysql_user - MySQL ユーザー管理
mysql_user
モジュールは、MySQL ユーザーを作成・削除します。
yaml- name: アプリケーション用ユーザーを作成
mysql_user:
name: appuser
password: '{{ app_db_password }}'
priv: 'myapp_db.*:ALL'
host: 'localhost'
state: present
login_user: root
login_password: '{{ mysql_root_password }}'
priv
で権限を指定します。データベース.テーブル:権限
の形式です。
63. postgresql_db - PostgreSQL データベース管理
postgresql_db
モジュールは、PostgreSQL データベースを管理します。
yaml- name: PostgreSQL データベースを作成
postgresql_db:
name: myapp_db
encoding: UTF8
lc_collate: en_US.UTF-8
lc_ctype: en_US.UTF-8
template: template0
state: present
login_user: postgres
login_password: '{{ postgres_password }}'
64. postgresql_user - PostgreSQL ユーザー管理
postgresql_user
モジュールは、PostgreSQL ユーザーを管理します。
yaml- name: PostgreSQL ユーザーを作成
postgresql_user:
name: appuser
password: '{{ app_db_password }}'
db: myapp_db
priv: ALL
state: present
login_user: postgres
login_password: '{{ postgres_password }}'
65. mongodb_user - MongoDB ユーザー管理
mongodb_user
モジュールは、MongoDB ユーザーを管理します。
yaml- name: MongoDB ユーザーを作成
mongodb_user:
database: myapp_db
name: appuser
password: '{{ mongodb_password }}'
roles: readWrite
state: present
66. redis - Redis 管理
redis
モジュールは、Redis サーバーの設定を管理します。
yaml- name: Redis に設定を投入
redis:
command: config
name: maxmemory
value: 256mb
アーカイブ
ファイルやディレクトリを圧縮・展開するモジュールです。バックアップやデプロイに便利です。
67. archive - アーカイブ作成
archive
モジュールは、ファイルやディレクトリをアーカイブします。
yaml- name: ディレクトリを tar.gz で圧縮
archive:
path: /var/www/html
dest: /backup/html.tar.gz
format: gz
複数のパスをまとめてアーカイブする例です。
yaml- name: 複数ディレクトリをアーカイブ
archive:
path:
- /var/www/html
- /etc/nginx
dest: /backup/web-backup.tar.gz
format: gz
68. unarchive - アーカイブ展開
unarchive
モジュールは、アーカイブを展開します。
yaml- name: tar.gz を展開
unarchive:
src: /tmp/myapp.tar.gz
dest: /var/www/
remote_src: yes
remote_src: yes
で、リモートホスト上のファイルを展開します。デフォルトは no
(ローカルファイル)です。
ローカルのアーカイブをリモートで展開する例です。
yaml- name: ローカルのアーカイブをリモートで展開
unarchive:
src: /path/to/local/archive.tar.gz
dest: /var/www/
69. tar - tar アーカイブ操作
tar
モジュールは、tar 形式専用のアーカイブ操作を行います(archive
より低レベル)。
yaml- name: tar で圧縮
community.general.archive:
path: /var/log/myapp
dest: /backup/logs.tar
format: tar
70. zip - zip アーカイブ操作
zip
は archive
モジュールで format: zip
を指定することで利用できます。
yaml- name: zip で圧縮
archive:
path: /var/www/html
dest: /backup/html.zip
format: zip
システム情報
システム情報の取得やデバッグに使うモジュールです。プレイブック作成時のトラブルシューティングにも役立ちます。
71. setup - ファクト収集
setup
モジュールは、リモートホストのシステム情報(ファクト)を収集します。通常は自動実行されますが、明示的に呼び出すこともできます。
yaml- name: ファクトを収集
setup:
filter: ansible_distribution*
filter
で、特定のファクトだけ収集できます。
収集したファクトを使う例です。
yaml- name: OS 情報を表示
debug:
msg: 'OS は {{ ansible_distribution }} {{ ansible_distribution_version }} です'
72. debug - デバッグ出力
debug
モジュールは、変数の内容やメッセージを出力します。
yaml- name: 変数の内容を表示
debug:
var: ansible_hostname
- name: メッセージを表示
debug:
msg: '現在のユーザーは {{ ansible_user_id }} です'
条件付きで出力する例です。
yaml- name: エラー時のみメッセージ表示
debug:
msg: 'タスクが失敗しました'
when: task_result is failed
73. assert - アサーション
assert
モジュールは、条件が満たされているか検証します。条件が false の場合、プレイブックを停止します。
yaml- name: メモリが十分あるか確認
assert:
that:
- ansible_memtotal_mb >= 2048
fail_msg: 'メモリが不足しています(必要: 2GB 以上)'
success_msg: 'メモリチェック OK'
複数条件を検証する例です。
yaml- name: 前提条件を検証
assert:
that:
- ansible_distribution == "Ubuntu"
- ansible_distribution_version is version('20.04', '>=')
fail_msg: 'このプレイブックは Ubuntu 20.04 以降が必要です'
74. set_fact - 変数設定
set_fact
モジュールは、プレイブック実行中に動的に変数を設定します。
yaml- name: カスタムファクトを設定
set_fact:
app_version: '1.2.3'
deployment_time: '{{ ansible_date_time.iso8601 }}'
- name: 設定した変数を使用
debug:
msg: 'アプリバージョン {{ app_version }} を {{ deployment_time }} にデプロイ'
計算結果を変数に保存する例です。
yaml- name: ディスク使用率を計算
set_fact:
disk_usage_percent: '{{ (ansible_mounts[0].size_total - ansible_mounts[0].size_available) / ansible_mounts[0].size_total * 100 | round(2) }}'
75. pause - 一時停止
pause
モジュールは、プレイブックの実行を一時停止します。
yaml- name: 5 秒間待機
pause:
seconds: 5
ユーザーの確認を待つ例です。
yaml- name: 続行確認
pause:
prompt: '本番環境にデプロイします。続行しますか? (yes/no)'
register: user_input
- name: ユーザーが yes と入力した場合のみ続行
fail:
msg: 'デプロイを中止しました'
when: user_input.user_input != "yes"
76. fail - 強制失敗
fail
モジュールは、意図的にタスクを失敗させます。条件チェックと組み合わせて使います。
yaml- name: 必須変数が未定義の場合は失敗
fail:
msg: '変数 db_password が定義されていません'
when: db_password is not defined
77. meta - メタタスク実行
meta
モジュールは、特殊な制御タスクを実行します。
yaml- name: ファクトを再収集
meta: clear_facts
- name: 最新情報を取得
setup:
ハンドラーを即座に実行する例です。
yaml- name: 設定ファイルを更新
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx
- name: ハンドラーを即座に実行
meta: flush_handlers
マウント・ディスク
ファイルシステムやパーティションを管理するモジュールです。ストレージ構成に使います。
78. mount - ファイルシステムマウント
mount
モジュールは、ファイルシステムをマウントし、/etc/fstab
に登録します。
yaml- name: ディスクをマウント
mount:
path: /mnt/data
src: /dev/sdb1
fstype: ext4
state: mounted
state
には mounted
(マウント)、unmounted
(アンマウント)、present
(fstab 登録のみ)、absent
(削除)を指定できます。
NFS マウントの例です。
yaml- name: NFS をマウント
mount:
path: /mnt/nfs
src: nfs-server.example.com:/export/data
fstype: nfs
opts: defaults
state: mounted
79. filesystem - ファイルシステム作成
filesystem
モジュールは、パーティションにファイルシステムを作成します。
yaml- name: ext4 ファイルシステムを作成
filesystem:
fstype: ext4
dev: /dev/sdb1
80. parted - パーティション管理
parted
モジュールは、ディスクのパーティションを作成・削除します。
yaml- name: パーティションを作成
parted:
device: /dev/sdb
number: 1
state: present
part_start: 0%
part_end: 100%
81. lvg - LVM ボリュームグループ管理
lvg
モジュールは、LVM のボリュームグループを管理します。
yaml- name: ボリュームグループを作成
lvg:
vg: vg_data
pvs: /dev/sdb1,/dev/sdc1
state: present
82. lvol - LVM 論理ボリューム管理
lvol
モジュールは、LVM の論理ボリュームを管理します。
yaml- name: 論理ボリュームを作成
lvol:
vg: vg_data
lv: lv_data
size: 10G
state: present
サイズを拡張する例です。
yaml- name: 論理ボリュームを拡張
lvol:
vg: vg_data
lv: lv_data
size: +5G
設定ファイル
設定ファイルの編集に特化したモジュールです。形式に応じたモジュールを使うと、構文を壊さず編集できます。
83. ini_file - INI ファイル編集
ini_file
モジュールは、INI 形式の設定ファイルを編集します。
yaml- name: php.ini を編集
ini_file:
path: /etc/php/7.4/php.ini
section: PHP
option: memory_limit
value: 256M
backup: yes
複数の設定を変更する例です。
yaml- name: 複数の設定を変更
ini_file:
path: /etc/myapp/config.ini
section: database
option: '{{ item.key }}'
value: '{{ item.value }}'
loop:
- { key: 'host', value: 'localhost' }
- { key: 'port', value: '5432' }
- { key: 'name', value: 'mydb' }
84. xml - XML ファイル編集
xml
モジュールは、XML ファイルを XPath で編集します。
yaml- name: XML 要素の値を変更
xml:
path: /etc/tomcat/server.xml
xpath: /Server/Service/Connector[@port='8080']
attribute: port
value: '8090'
要素を追加する例です。
yaml- name: XML 要素を追加
xml:
path: /etc/config.xml
xpath: /root
add_children:
- element:
name: newElement
value: newValue
85. json_query - JSON クエリ
json_query
はフィルターとして使い、JSON データを JMESPath で検索します。
yaml- name: JSON ファイルを読み込み
slurp:
src: /etc/myapp/config.json
register: config_file
- name: 特定の値を抽出
set_fact:
db_host: "{{ (config_file.content | b64decode | from_json) | json_query('database.host') }}"
- name: 抽出した値を表示
debug:
msg: 'DB ホスト: {{ db_host }}'
86. yaml - YAML ファイル操作
YAML ファイルの操作には community.general.yaml
コレクションのモジュールを使います。
yaml- name: YAML ファイルの値を変更
community.general.yaml:
path: /etc/myapp/config.yaml
key: database.host
value: localhost
通知
タスク完了時にメールや Slack などで通知を送るモジュールです。
87. mail - メール送信
mail
モジュールは、メールを送信します。
yaml- name: デプロイ完了をメール通知
mail:
host: smtp.example.com
port: 587
username: ansible@example.com
password: '{{ smtp_password }}'
to: admin@example.com
subject: 'デプロイ完了'
body: '{{ inventory_hostname }} へのデプロイが完了しました'
添付ファイル付きメールの例です。
yaml- name: ログファイルを添付してメール送信
mail:
host: smtp.example.com
to: admin@example.com
subject: 'ログレポート'
body: 'ログを添付します'
attach: /var/log/myapp/error.log
88. slack - Slack 通知
slack
モジュールは、Slack にメッセージを送信します。
yaml- name: Slack に通知
slack:
token: '{{ slack_token }}'
channel: '#deployments'
msg: '{{ inventory_hostname }} へのデプロイが完了しました'
username: Ansible Bot
icon_emoji: ':rocket:'
89. jabber - Jabber 通知
jabber
モジュールは、XMPP/Jabber でメッセージを送信します。
yaml- name: Jabber で通知
jabber:
user: ansible@jabber.example.com
password: '{{ jabber_password }}'
to: admin@jabber.example.com
msg: 'デプロイが完了しました'
セキュリティ
SELinux や ACL など、セキュリティ設定を管理するモジュールです。
90. selinux - SELinux 設定
selinux
モジュールは、SELinux のモードを設定します。
yaml- name: SELinux を enforcing モードに設定
selinux:
policy: targeted
state: enforcing
state
には enforcing
、permissive
、disabled
を指定できます。
91. seboolean - SELinux ブール値設定
seboolean
モジュールは、SELinux のブール値を設定します。
yaml- name: httpd のネットワーク接続を許可
seboolean:
name: httpd_can_network_connect
state: yes
persistent: yes
persistent: yes
で、再起動後も設定を保持します。
92. seport - SELinux ポート設定
seport
モジュールは、SELinux のポート設定を管理します。
yaml- name: カスタムポートを httpd に許可
seport:
ports: 8080
proto: tcp
setype: http_port_t
state: present
93. acl - ACL 管理
acl
モジュールは、ファイルの ACL(アクセス制御リスト)を設定します。
yaml- name: 特定ユーザーに読み取り権限を付与
acl:
path: /var/www/html
entity: deployuser
etype: user
permissions: r
state: present
デフォルト ACL を設定する例です。
yaml- name: ディレクトリにデフォルト ACL を設定
acl:
path: /var/www/html
entity: www-data
etype: user
permissions: rwx
default: yes
state: present
証明書・暗号化
SSL 証明書や秘密鍵を管理するモジュールです。
94. openssl_certificate - SSL 証明書管理
openssl_certificate
モジュールは、SSL 証明書を生成・管理します。
yaml- name: 自己署名証明書を生成
openssl_certificate:
path: /etc/ssl/certs/mycert.crt
privatekey_path: /etc/ssl/private/mykey.key
provider: selfsigned
selfsigned_not_after: '+365d'
95. openssl_privatekey - 秘密鍵生成
openssl_privatekey
モジュールは、秘密鍵を生成します。
yaml- name: RSA 秘密鍵を生成
openssl_privatekey:
path: /etc/ssl/private/mykey.key
size: 4096
mode: '0600'
96. openssl_csr - CSR 生成
openssl_csr
モジュールは、証明書署名要求(CSR)を生成します。
yaml- name: CSR を生成
openssl_csr:
path: /etc/ssl/csr/mycert.csr
privatekey_path: /etc/ssl/private/mykey.key
common_name: www.example.com
organization_name: Example Inc
country_name: JP
97. htpasswd - htpasswd ファイル管理
htpasswd
モジュールは、Basic 認証用の htpasswd ファイルを管理します。
yaml- name: ユーザーを htpasswd に追加
htpasswd:
path: /etc/nginx/.htpasswd
name: admin
password: '{{ admin_password }}'
owner: root
group: www-data
mode: '0640'
時刻・タイムゾーン
システムの時刻設定やタイムゾーンを管理するモジュールです。
98. timezone - タイムゾーン設定
timezone
モジュールは、システムのタイムゾーンを設定します。
yaml- name: タイムゾーンを JST に設定
timezone:
name: Asia/Tokyo
99. service_facts - サービス情報取得
service_facts
モジュールは、システム上のサービス情報を収集します。
yaml- name: サービス情報を収集
service_facts:
- name: nginx が起動しているか確認
debug:
msg: 'Nginx は起動しています'
when: ansible_facts.services['nginx.service'].state == 'running'
その他
100. reboot - システム再起動
reboot
モジュールは、システムを再起動し、再起動完了を待機します。
yaml- name: システムを再起動
reboot:
reboot_timeout: 600
msg: 'Ansible による再起動'
再起動前に条件を確認する例です。
yaml- name: カーネル更新後に再起動
reboot:
reboot_timeout: 600
when: kernel_updated is changed
下図は、プレイブック実行時の reboot
モジュールの動作を示しています。
mermaidsequenceDiagram
participant ansible as Ansible
participant host as リモートホスト
ansible->>host: 再起動コマンド送信
host->>host: シャットダウン開始
ansible->>ansible: 待機(接続断)
host->>host: 再起動中...
host->>host: 起動完了
ansible->>host: SSH 接続試行
host->>ansible: 接続成功
ansible->>ansible: 次のタスクへ
reboot
モジュールは、再起動完了まで自動的に待機するため、後続タスクを安全に実行できます。
まとめ
本記事では、Ansible の実用的なモジュール 100 個を用途別に紹介しました。ファイル操作、ユーザー管理、パッケージインストール、サービス制御、Docker、AWS、データベースなど、幅広いカテゴリをカバーしています。
モジュールを適切に選択することで、以下のメリットが得られます。
- 冪等性の確保: 何度実行しても同じ結果になる安全な自動化
- コードの可読性: 専用モジュールを使うことで意図が明確に
- 保守性の向上: 標準モジュールを使うことでチーム内での理解が容易に
実務では、まず基本的なモジュール(file
、copy
、template
、user
、service
、apt
/yum
、git
など)を押さえ、必要に応じて専門的なモジュールを学んでいくのが効率的です。
このチートシートを手元に置いて、日々のインフラ自動化にお役立てください。
関連リンク
- article
Ansible モジュール 100 連発チートシート:file/user/service/git ほか
- article
Ansible セットアップ完全版:macOS/Homebrew/pyenv で安全に導入
- article
Ansible と Terraform/Puppet/Chef 比較:宣言/手続の違いと併用戦略
- article
Ansible トラブルシュート:UNREACHABLE!/FAILED! を 3 分で切り分ける
- article
Ansible 入門 2025年:5 分で分かる自動化の全体像と始め方
- article
CentOS8サーバーの初期設定とユーザー追加をAnsible使って自動化する設定
- article
Cursor プロンプト定番 30:仕様化・分割統治・根拠提示・差分出力の句型集
- article
Cline プロンプト設計チートシート:役割・制約・出力フォーマットの定石
- article
Claude4.5 vs GPT-5 比較:日本語精度・コーディング・コストを実測評価
- article
Ansible モジュール 100 連発チートシート:file/user/service/git ほか
- article
Storybook Args/ArgTypes 速見表:Controls/Docs/Autodocs を一気に整える
- article
SolidJS フック相当 API 速見表:createSignal/createMemo/createEffect… 一覧
- blog
iPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
- blog
Googleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
- blog
【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
- blog
Googleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
- blog
Pixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
- blog
フロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
- review
今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
- review
ついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
- review
愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
- review
週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
- review
新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
- review
科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来