株式会社エスロジカル
株式会社エスロジカル
SSL証明書(DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

HOME > 技術ドキュメント > Ansible 入門(Ubuntu 24.04 LTS)

Ansible 入門(Ubuntu 24.04 LTS)


Ansible は SSH 経由で複数のサーバーを自動設定するツールです。 エージェントレス(管理対象にソフトウェアをインストール不要)で、 YAML で書いた Playbook に手順を記述するだけで何十台ものサーバーに同一設定を適用できます。
本記事では Ansible のインストールから Playbook の基礎まで解説します。


# pip でインストール(最新版を使う場合)
sudo apt install -y python3-pip
pip3 install --user ansible

# または apt でインストール(若干古い場合あり)
sudo apt install -y ansible

# バージョン確認
ansible --version

Ansible は SSH 経由で管理対象サーバーに接続します。 パスワードなしで接続できるよう SSH 公開鍵認証 を設定してください。

# 管理対象サーバーへの SSH 接続テスト
ssh ubuntu@192.168.1.10
# パスワードなしで接続できれば OK

インベントリファイルに管理対象サーバーのリストを定義します。

# hosts.ini
[webservers]
web1 ansible_host=192.168.1.10 ansible_user=ubuntu
web2 ansible_host=192.168.1.11 ansible_user=ubuntu

[dbservers]
db1 ansible_host=192.168.1.20 ansible_user=ubuntu

[all:vars]
ansible_ssh_private_key_file=~/.ssh/id_ed25519
# 接続確認(ping モジュール)
ansible -i hosts.ini all -m ping

# 特定グループのみ
ansible -i hosts.ini webservers -m ping

Playbook を書かずに1つのモジュールを実行する方法です。確認・緊急作業に便利です。

# パッケージのアップデート(sudo が必要なので -b オプション)
ansible -i hosts.ini webservers -b -m apt -a "update_cache=yes upgrade=yes"

# サービスの再起動
ansible -i hosts.ini webservers -b -m service -a "name=nginx state=restarted"

# ファイルのコピー
ansible -i hosts.ini webservers -m copy -a "src=./nginx.conf dest=/etc/nginx/nginx.conf" -b

# コマンド実行
ansible -i hosts.ini all -m command -a "uptime"

# setup-webserver.yml
---
- name: Web サーバーのセットアップ
  hosts: webservers
  become: true

  vars:
    nginx_port: 80
    app_user: www-data

  tasks:
    - name: apt キャッシュを更新
      apt:
        update_cache: yes
        cache_valid_time: 3600

    - name: Nginx をインストール
      apt:
        name: nginx
        state: present

    - name: Nginx を起動・自動起動設定
      service:
        name: nginx
        state: started
        enabled: yes

    - name: ファイアウォールで HTTP を許可
      ufw:
        rule: allow
        port: "{{ nginx_port }}"
        proto: tcp
# Playbook を実行
ansible-playbook -i hosts.ini setup-webserver.yml

# ドライラン(実際には変更しない)
ansible-playbook -i hosts.ini setup-webserver.yml --check

# 差分表示
ansible-playbook -i hosts.ini setup-webserver.yml --check --diff

モジュール 説明
apt Ubuntu/Debian のパッケージ管理
service / systemd サービスの起動・停止・有効化
copy ファイルをコントローラーから管理対象にコピー
template Jinja2 テンプレートを展開してコピー
file ファイル・ディレクトリの作成・パーミッション設定
user ユーザーの作成・削除・グループ管理
command シェルを経由せずコマンドを実行
shell シェルを経由してコマンドを実行(パイプ・リダイレクト可)
lineinfile ファイルの特定行を追加・変更
git Git リポジトリのチェックアウト

# host_vars/web1.yml(web1 固有の変数)
nginx_port: 8080

# group_vars/webservers.yml(webservers グループの共通変数)
nginx_port: 80
# templates/nginx.conf.j2(Jinja2 テンプレート)
server {
    listen {{ nginx_port }};
    server_name {{ ansible_hostname }};
    root /var/www/html;
}
# Playbook でテンプレートを使用
- name: Nginx 設定ファイルを配置
  template:
    src: templates/nginx.conf.j2
    dest: /etc/nginx/conf.d/default.conf
    owner: root
    group: root
    mode: '0644'
  notify: nginx を再起動

handlers:
  - name: nginx を再起動
    service:
      name: nginx
      state: reloaded

SSH 公開鍵認証・セキュリティ設定(Ubuntu 24.04) — Ansible 接続の前提となる SSH 設定
systemd サービス・タイマー設定入門(Ubuntu 24.04 LTS) — サービス管理
Certbot(Let's Encrypt)自動更新設定(Ubuntu 24.04 LTS) — 証明書の自動更新


Ansible の copy モジュールや template モジュールを使えば、 SSL証明書ファイルを複数サーバーへ一括デプロイできます。 証明書更新時の設定ファイル配布・Apache/Nginx の再起動まで Playbook で自動化することで、 証明書の失効リスクを大幅に減らせます。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、 2009年から16年以上、RapidSSL 3,960円/1年(税込)〜でSSL証明書を販売しています。審査サポート・インストール代行も対応しています。

SSL証明書の購入はこちら / SSL証明書とは? / インストール代行サービス


← 技術ドキュメント一覧へ戻る