T-CREATOR

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

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

Ansible でインフラ自動化を進める上で、モジュールの使い方を素早く参照できるチートシートがあると便利ですよね。今回は、実務でよく使われる Ansible モジュールを 100 個厳選し、用途別に分類して一覧にまとめました。ファイル操作、ユーザー管理、サービス制御、Git 連携など、実践的なモジュールを網羅しています。

この記事では、各モジュールの基本的な使い方と実用例を紹介しますので、日々の運用やプレイブック作成の参考にしてください。

早見表:Ansible モジュール 100 選

以下の表は、本記事で紹介する 100 個のモジュールを用途別に分類した早見表です。必要なモジュールをすぐに見つけられるよう、カテゴリ別に整理しました。

#カテゴリモジュール名主な用途
1ファイル操作fileファイル・ディレクトリの作成・削除・権限設定
2ファイル操作copyファイルのコピー
3ファイル操作templateJinja2 テンプレートからファイル生成
4ファイル操作lineinfileファイル内の特定行を編集
5ファイル操作blockinfileファイル内にブロック単位でテキスト挿入
6ファイル操作replace正規表現でファイル内容を置換
7ファイル操作fetchリモートからローカルへファイル取得
8ファイル操作synchronizersync を使った同期
9ファイル操作statファイル情報の取得
10ファイル操作findファイル検索
11ユーザー・グループuserユーザーアカウント管理
12ユーザー・グループgroupグループ管理
13ユーザー・グループauthorized_keySSH 公開鍵の管理
14ユーザー・グループgetentシステム情報の取得
15ユーザー・グループknown_hostsSSH known_hosts の管理
16パッケージ管理aptDebian/Ubuntu パッケージ管理
17パッケージ管理yumRHEL/CentOS パッケージ管理
18パッケージ管理dnfFedora/RHEL 8+ パッケージ管理
19パッケージ管理packageOS 非依存パッケージ管理
20パッケージ管理pipPython パッケージ管理
21パッケージ管理npmNode.js パッケージ管理
22パッケージ管理gemRuby パッケージ管理
23パッケージ管理apt_repositoryAPT リポジトリ管理
24パッケージ管理yum_repositoryYUM リポジトリ管理
25パッケージ管理apt_keyAPT リポジトリキー管理
26サービス管理serviceサービスの起動・停止・再起動
27サービス管理systemdsystemd サービス管理
28サービス管理croncron ジョブ管理
29サービス管理atat ジョブ管理
30サービス管理supervisorctlSupervisor プロセス管理
31バージョン管理gitGit リポジトリ操作
32バージョン管理subversionSVN リポジトリ操作
33バージョン管理hgMercurial リポジトリ操作
34コマンド実行commandコマンド実行(シェル機能なし)
35コマンド実行shellシェルコマンド実行
36コマンド実行rawSSH 経由で生コマンド実行
37コマンド実行scriptローカルスクリプトをリモート実行
38コマンド実行expect対話型コマンドの自動化
39ネットワークuriHTTP/HTTPS リクエスト
40ネットワークget_urlURL からファイルダウンロード
41ネットワークslurpリモートファイルを Base64 で取得
42ネットワークwait_forポート待機・ファイル待機
43ネットワークping疎通確認
44ネットワークnmcliNetworkManager 管理
45ネットワークiptablesファイアウォールルール管理
46ネットワークufwUbuntu ファイアウォール管理
47ネットワークfirewalldfirewalld 管理
48ネットワークhostnameホスト名設定
49Dockerdocker_containerDocker コンテナ管理
50Dockerdocker_imageDocker イメージ管理
51Dockerdocker_networkDocker ネットワーク管理
52Dockerdocker_volumeDocker ボリューム管理
53Dockerdocker_composeDocker Compose 管理
54Dockerdocker_loginDocker レジストリログイン
55クラウド(AWS)ec2EC2 インスタンス管理
56クラウド(AWS)ec2_instanceEC2 インスタンス管理(新版)
57クラウド(AWS)s3_bucketS3 バケット管理
58クラウド(AWS)rdsRDS インスタンス管理
59クラウド(AWS)route53Route53 DNS 管理
60クラウド(AWS)cloudformationCloudFormation スタック管理
61データベースmysql_dbMySQL データベース管理
62データベースmysql_userMySQL ユーザー管理
63データベースpostgresql_dbPostgreSQL データベース管理
64データベースpostgresql_userPostgreSQL ユーザー管理
65データベースmongodb_userMongoDB ユーザー管理
66データベースredisRedis 管理
67アーカイブarchiveアーカイブ作成
68アーカイブunarchiveアーカイブ展開
69アーカイブtartar アーカイブ操作
70アーカイブzipzip アーカイブ操作
71システム情報setupファクト収集
72システム情報debugデバッグ出力
73システム情報assertアサーション
74システム情報set_fact変数設定
75システム情報pause一時停止
76システム情報fail強制失敗
77システム情報metaメタタスク実行
78マウント・ディスクmountファイルシステムマウント
79マウント・ディスクfilesystemファイルシステム作成
80マウント・ディスクpartedパーティション管理
81マウント・ディスクlvgLVM ボリュームグループ管理
82マウント・ディスクlvolLVM 論理ボリューム管理
83設定ファイルini_fileINI ファイル編集
84設定ファイルxmlXML ファイル編集
85設定ファイルjson_queryJSON クエリ
86設定ファイルyamlYAML ファイル操作
87通知mailメール送信
88通知slackSlack 通知
89通知jabberJabber 通知
90セキュリティselinuxSELinux 設定
91セキュリティsebooleanSELinux ブール値設定
92セキュリティseportSELinux ポート設定
93セキュリティaclACL 管理
94証明書・暗号化openssl_certificateSSL 証明書管理
95証明書・暗号化openssl_privatekey秘密鍵生成
96証明書・暗号化openssl_csrCSR 生成
97証明書・暗号化htpasswdhtpasswd ファイル管理
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 個以上存在し、すべてを把握するのは現実的ではありません。また、似たような機能を持つモジュールが複数あるため、どれを使うべきか迷うこともあります。

実務でよく直面する課題をまとめました。

  • モジュール選択の迷い: ファイル編集に lineinfilereplaceblockinfile のどれを使うべきか
  • 構文の忘却: よく使うモジュールでも、パラメータ名や構文を忘れがち
  • バージョン差異: OS やディストリビューションによって推奨されるモジュールが異なる(yum vs dnf など)
  • ベストプラクティス不明: 冪等性を保つための正しい記述方法がわからない

下図は、モジュール選択時によくある迷いのパターンを示しています。

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 個を厳選し、用途別に分類して紹介します。各モジュールについて、以下の情報を提供します。

  • 基本的な使い方: 最小限の構文例
  • よく使うパラメータ: 実務で頻出するオプション
  • 実用例: 実際のプレイブックで使える具体例

モジュールは以下のカテゴリに分類しています。

  1. ファイル操作
  2. ユーザー・グループ管理
  3. パッケージ管理
  4. サービス管理
  5. バージョン管理(Git など)
  6. コマンド実行
  7. ネットワーク
  8. Docker
  9. クラウド(AWS)
  10. データベース
  11. アーカイブ
  12. システム情報
  13. マウント・ディスク
  14. 設定ファイル
  15. 通知
  16. セキュリティ
  17. 証明書・暗号化
  18. 時刻・タイムゾーン
  19. その他

各カテゴリ内で、基本的なものから応用的なものへと順に説明していきます。

下図は、モジュールをカテゴリ別に整理した構造を示しています。

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 ごとに適切なパッケージマネージャー(aptyumdnf など)が自動選択されます。

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

notifyhandlers を使うと、設定変更時のみ再起動できます。

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 には reboothourlydailyweeklymonthly が使えます。

29. at - at ジョブ管理

at モジュールは、一度だけ実行するジョブをスケジュールします。

yaml- name: 10 分後にスクリプトを実行
  at:
    command: '/usr/local/bin/cleanup.sh'
    count: 10
    units: minutes
    state: present

units には minuteshoursdaysweeks が使えます。

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 アーカイブ操作

ziparchive モジュールで 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 には enforcingpermissivedisabled を指定できます。

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、データベースなど、幅広いカテゴリをカバーしています。

モジュールを適切に選択することで、以下のメリットが得られます。

  • 冪等性の確保: 何度実行しても同じ結果になる安全な自動化
  • コードの可読性: 専用モジュールを使うことで意図が明確に
  • 保守性の向上: 標準モジュールを使うことでチーム内での理解が容易に

実務では、まず基本的なモジュール(filecopytemplateuserserviceapt/yumgit など)を押さえ、必要に応じて専門的なモジュールを学んでいくのが効率的です。

このチートシートを手元に置いて、日々のインフラ自動化にお役立てください。

関連リンク