Ansible

初級 | 8分 で読める | 2026.04.24

公式ドキュメント

このチートシートで確認できること

Ansible は、複数サーバーへ同じ設定を安全に反映するための構成管理ツールです。このページでは、初学者が最初に使うコマンド、Playbook の基本形、inventory、変数、ロール、Vault を確認できます。

まず覚える順番は、ansible all -m ping で接続確認し、ansible-playbook --check --diff で変更内容を確認し、問題なければ Playbook を実行する流れです。

基本コマンド

コマンド説明
ansible all -m pingすべてのホストに疎通確認
ansible web -m shell -a "uptime"web グループでコマンド実行
ansible-playbook site.ymlPlaybook 実行
ansible-playbook site.yml --checkドライラン(変更なし)
ansible-playbook site.yml --diff変更差分を表示
ansible-playbook site.yml --limit web特定ホストだけ実行
ansible-playbook site.yml -vvv詳細ログ出力

ポイント: --checkと--diffを組み合わせると、実際に変更する前に何が変わるかを確認できます。本番環境では必ず事前確認してから実行します

Playbook 基本構造

---
- name: Configure web servers
  hosts: web
  become: true
  vars:
    http_port: 80

  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present

    - name: Start nginx
      service:
        name: nginx
        state: started
        enabled: true
キー説明
hosts対象ホストまたはグループ
becomesudo で実行(yes/no)
vars変数定義
tasks実行するタスクのリスト
handlers変更時だけ実行されるタスク

実践メモ: nameは必須ではありませんが、実行時にログに表示されるため必ず付けておくと後から追跡しやすくなります

よく使うモジュール

モジュール説明
apt / yumパッケージ管理
copyファイルコピー
templateJinja2 テンプレートでファイル生成
serviceサービス起動・停止・有効化
fileファイル・ディレクトリ作成・削除
userユーザー管理
command / shellコマンド実行
gitGit リポジトリのクローン
- name: Copy nginx config
  copy:
    src: nginx.conf
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: '0644'
  notify: Restart nginx

handlers:
  - name: Restart nginx
    service:
      name: nginx
      state: restarted

ポイント: notifyでハンドラを呼び出すと、設定ファイルが変更されたときだけサービスを再起動します。無駄な再起動を防ぐことができます。

Inventory ファイル

INI 形式

[web]
web1.example.com
web2.example.com

[db]
db1.example.com

[production:children]
web
db

[production:vars]
ansible_user=deploy
ansible_port=22

YAML 形式

all:
  children:
    web:
      hosts:
        web1.example.com:
        web2.example.com:
    db:
      hosts:
        db1.example.com:
  vars:
    ansible_user: deploy

実践メモ: [group:vars]でグループ共通の変数を定義できます。環境ごとに異なる SSH ポートやユーザーを inventory で管理すると Playbook がシンプルになります。

変数の優先順位(高→低)

順位変数の場所
1コマンドライン -e "var=value"
2Playbook の vars セクション
3vars_files で読み込んだファイル
4ロールの vars/main.yml
5inventory の [group:vars]
6ロールの defaults/main.yml

注意: -eで渡した変数はすべてを上書きします。本番環境で誤った変数を渡すと想定外の動作になるため、慎重に使ってください。

条件分岐とループ

構文説明
when: ansible_os_family == "Debian"条件付き実行
loop: "{{ users }}"リストでループ
loop: "{{ range(1, 5) }}"範囲でループ
with_itemsループ(古い構文)
- name: Install packages
  apt:
    name: "{{ item }}"
    state: present
  loop:
    - nginx
    - git
    - vim

- name: Configure firewall on CentOS
  firewalld:
    service: http
    state: enabled
  when: ansible_os_family == "RedHat"

ポイント: whenで OS の種類を判定すると、Ubuntu と CentOS で異なるモジュールを使い分けられます。Playbook を複数 OS で共通化できます。

ロール構造

Ansible 2.x のロールディレクトリ標準構造(公式: https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_reuse_roles.html):

roles/
 webserver/
 tasks/
 main.yml # タスク本体
 handlers/
 main.yml # ハンドラ
 templates/
 nginx.conf.j2 # テンプレート
 files/
 index.html # 静的ファイル
 vars/
 main.yml # 変数
 defaults/
 main.yml # デフォルト変数
 meta/
 main.yml # 依存関係

Playbook からロールを呼び出す

- hosts: web
  roles:
    - webserver
    - firewall

実践メモ: ロールは再利用可能な設定のまとまりです。webserver や database など役割ごとにディレクトリを分けると保守性が上がります。

テンプレート(Jinja2)

# nginx.conf.j2
server {
 listen {{ http_port }};
 server_name {{ ansible_hostname }};

 {% for location in locations %}
 location {{ location.path }} {
 proxy_pass {{ location.backend }};
 }
 {% endfor %}
}
- name: Deploy nginx config
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
構文説明
{{ var }}変数展開
{% if ... %}条件分岐
{% for ... %}ループ
{{ var | default("value") }}デフォルト値

ポイント: templateモジュールは Jinja2 でファイルを動的生成します。ホストごとに異なる設定を自動で埋め込めます。

Vault(暗号化)

コマンド説明
ansible-vault create secrets.yml暗号化ファイル作成
ansible-vault edit secrets.yml暗号化ファイル編集
ansible-vault encrypt file.yml既存ファイルを暗号化
ansible-vault decrypt file.yml復号化
ansible-playbook --ask-vault-passPlaybook 実行時にパスワード入力
ansible-playbook --vault-password-fileパスワードファイル指定
# secrets.yml (暗号化)
db_password: "YOUR_DB_PASSWORD"
api_key: "YOUR_API_KEY"

注意: Vaultで暗号化してもパスワードファイルを Git にコミットすると意味がありません。パスワードは環境変数や CI/CD の Secrets で管理してください。

タグ

- name: Install packages
  apt:
    name: nginx
  tags:
    - install
    - packages

- name: Start nginx
  service:
    name: nginx
    state: started
  tags:
    - start
コマンド説明
ansible-playbook site.yml --tags installinstall タグだけ実行
ansible-playbook site.yml --skip-tags startstart タグをスキップ
ansible-playbook site.yml --list-tagsタグ一覧表示

実践メモ: tagsを使うと、インストールだけや設定だけを部分的に実行できます。大きな Playbook の一部だけ再実行したいときに便利です。

まとめ

Ansible では、まず ping--check--diff--limit を使えるようにすると安全に始められます。Playbook は YAML のインデントが意味を持つため、コピーした例でも必ず構造を確認してください。

本番環境では、対象ホスト、変数、Vault パスワード、実行タグを確認してから実行します。

参考リソース

関連記事

← 一覧に戻る
PR
PR
PR
PR