HOME > 技術ドキュメント > Ansible 入門(Ubuntu 24.04 LTS)
Ansible 入門(Ubuntu 24.04 LTS)
Ansible は SSH 経由で複数のサーバーを自動設定するツールです。
エージェントレス(管理対象にソフトウェアをインストール不要)で、
YAML で書いた Playbook に手順を記述するだけで何十台ものサーバーに同一設定を適用できます。
本記事では Ansible のインストールから Playbook の基礎まで解説します。
1. インストール
# pip でインストール(最新版を使う場合) sudo apt install -y python3-pip pip3 install --user ansible # または apt でインストール(若干古い場合あり) sudo apt install -y ansible # バージョン確認 ansible --version
2. SSH 鍵認証の前提
Ansible は SSH 経由で管理対象サーバーに接続します。 パスワードなしで接続できるよう SSH 公開鍵認証 を設定してください。
# 管理対象サーバーへの SSH 接続テスト ssh ubuntu@192.168.1.10 # パスワードなしで接続できれば OK
3. インベントリファイル
インベントリファイルに管理対象サーバーのリストを定義します。
# 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
4. ad-hoc コマンド
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"
5. Playbook の基本構造
# 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
6. よく使うモジュール一覧
| モジュール | 説明 |
|---|---|
| apt | Ubuntu/Debian のパッケージ管理 |
| service / systemd | サービスの起動・停止・有効化 |
| copy | ファイルをコントローラーから管理対象にコピー |
| template | Jinja2 テンプレートを展開してコピー |
| file | ファイル・ディレクトリの作成・パーミッション設定 |
| user | ユーザーの作成・削除・グループ管理 |
| command | シェルを経由せずコマンドを実行 |
| shell | シェルを経由してコマンドを実行(パイプ・リダイレクト可) |
| lineinfile | ファイルの特定行を追加・変更 |
| git | Git リポジトリのチェックアウト |
7. 変数とテンプレート
# 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 で SSL証明書のデプロイを自動化する
Ansible の copy モジュールや template モジュールを使えば、
SSL証明書ファイルを複数サーバーへ一括デプロイできます。
証明書更新時の設定ファイル配布・Apache/Nginx の再起動まで Playbook で自動化することで、
証明書の失効リスクを大幅に減らせます。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、
2009年から16年以上、RapidSSL 3,960円/1年(税込)〜でSSL証明書を販売しています。審査サポート・インストール代行も対応しています。
SSL証明書の購入はこちら / SSL証明書とは? / インストール代行サービス
