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 やディストリビューションによって推奨されるモジュールが異なる(yumvsdnfなど)
- ベストプラクティス不明: 冪等性を保つための正しい記述方法がわからない
下図は、モジュール選択時によくある迷いのパターンを示しています。
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 article- Ansible SSH/WinRM 接続エラー完全攻略:認証・ポート・プロキシの落とし穴
 article article- Ansible CI/CD 運用:GitHub Actions で lint/test/デプロイを自動化
 article article- Ansible 役割設計:Roles/Collections でスケーラブルに分割する指針
 article article- Ansible モジュール 100 連発チートシート:file/user/service/git ほか
 article article- Ansible セットアップ完全版:macOS/Homebrew/pyenv で安全に導入
 article article- Ansible と Terraform/Puppet/Chef 比較:宣言/手続の違いと併用戦略
 article article- Homebrew「Permission denied / Operation not permitted」対策:権限・SIP・所有権を総点検
 article article- Bun のインストール完全ガイド:macOS/Linux/Windows(WSL)対応の最短手順
 article article- Apollo で“キャッシュが反映されない”を 5 分で直す:ID/ポリシー/write 系の落とし穴
 article article- Ansible SSH/WinRM 接続エラー完全攻略:認証・ポート・プロキシの落とし穴
 article article- 【2025 年 10 月 29 日発表】VS Code、Copilot が仕様作成を支援する「Plan モード」とは?
 article article- Zustand × useTransition 概説:並列レンダリング時代に安全な更新を設計する
 blog blog- iPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
 blog blog- Googleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
 blog blog- 【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
 blog blog- Googleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
 blog blog- Pixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
 blog blog- フロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
 review review- 今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
 review review- ついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
 review review- 愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
 review review- 週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
 review review- 新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
 review review- 科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来