はじめに
サーバーを手動でセットアップ・管理するのは、特に複数のサーバーがある環境や、繰り返しの構成作業がある場合、面倒でミスが起きやすいプロセスです。強力なオープンソースの IT 自動化ツールである Ansible を使えば、サーバーのプロビジョニング、構成、管理を簡単に自動化でき、このプロセスを効率化できます。本ガイド 「24. Ansible を使った Ubuntu Server セットアップの自動化:実践ガイド」 では、Ansible を使って Ubuntu Server のセットアップと設定を自動化する基本を解説します。最後まで読めば、一般的なサーバー作業をシンプルにし、効率を高め、インフラ全体の一貫性を確保するために、Ansible Playbook を作成・実行する方法を学ぶことができます。
過去の記事:
01. Ubuntu Server 入門 – SysOSX: AI & Cloud
02. 初めての Ubuntu Server のセットアップ方法:初心者ガイド – SysOSX: AI & Cloud
03. Ubuntu Server のための Linux コマンドラインを極める – SysOSX: AI & Cloud
04. Ubuntu Server のユーザーと権限の管理:包括的ガイド – SysOSX: AI & Cloud
05. Ubuntu Server のネットワークの基礎:包括的ガイド – SysOSX: AI & Cloud
06. Ubuntu Server へのソフトウェアのインストールと管理:完全ガイド – SysOSX: AI & Cloud
07.Ubuntu Server のパッチ適用と更新:包括的ガイド – SysOSX: AI & Cloud
08. Ubuntu Server のセキュリティ強化:堅牢化と保護のための実践的な手順 – SysOSX: AI & Cloud
10. Ubuntu Server のシステム監視ツール:包括的ガイド – SysOSX: AI & Cloud
11. Ubuntu サーバーの集中ログ管理:必読ガイド – SysOSX: AI & Cloud
12. Ubuntu Server の監査とコンプライアンス:ベストプラクティス – SysOSX: AI & Cloud
13. ホスティングと Web アプリケーションのための Ubuntu Server のセットアップ:究極ガイド – SysOSX: AI & Cloud
14. 1 台の Ubuntu Server で複数の Web サイトをホストする:役立つヒント – SysOSX: AI & Cloud
15. Ubuntu Server のストレージとディスクの管理:シンプルガイド – SysOSX: AI & Cloud
16. Ubuntu Server でのファイル共有サービスのセットアップ:完全ガイド – SysOSX: AI & Cloud
17. Ubuntu でのセキュアなデータベースサーバーのセットアップ:MySQL vs. MariaDB – SysOSX: AI & Cloud
18. Ubuntu Server での LVM の設定と使用方法:包括的ガイド – SysOSX: AI & Cloud
19. KVM による仮想化入門:Ubuntu Server 向け初心者ガイド – SysOSX: AI & Cloud
20. Ubuntu Server への Docker のインストール方法:コンテナ化のステップバイステップガイド – SysOSX: AI & Cloud
21. LXD を始める:コンテナを簡単にインストール + チートシート – SysOSX: AI & Cloud
22. Ubuntu Server での Podman 入門:完全ガイド – SysOSX: AI & Cloud
23. クラウドへの Ubuntu Server のデプロイ:ステップバイステップガイド – SysOSX: AI & Cloud
目次
サーバー自動化に Ansible を使う理由
Ansible は、そのシンプルさとパワーの高さから、サーバー自動化に広く使われています。最良の選択肢である理由は次のとおりです。
- エージェントレス:Ansible では、ターゲットサーバーにエージェントソフトウェアをインストールする必要はありません。通信には SSH を使用します。
- 宣言型構文:Ansible Playbook では、人間が読みやすい構文である YAML を使用しており、望ましい状態を簡単に定義できます。
- 再利用可能な構成:Playbook を一度作成すれば、複数のサーバーで再利用できます。
- 冪等性:Ansible は、必要な場合にのみタスクを実行するので、冗長な操作を回避できます。
- 拡張性:Ansible は、パッケージのインストール、ファイル管理、サービスの構成などのタスクを処理するための幅広いモジュールをサポートしています。
前提条件
Ansible を使った Ubuntu Server セットアップの自動化を始める前に、次のものを用意してください。
- コントロールノード:Ansible がインストールされているマシン(ローカルシステムまたは専用サーバー)。
- ターゲットサーバー:設定したい Ubuntu サーバー(オンプレミスまたはクラウド)。
- SSH アクセス:コントロールノードとターゲットサーバー間で、パスワードなしの SSH アクセスが設定されていることを確認します。
ステップ 1:Ansible をインストールする
1.1 コントロールノードに Ansible をインストールする
コントロールノード(Ubuntu を実行しているローカルマシンなど)に Ansible をインストールします。
sudo apt update
sudo apt install ansible -y
1.2 インストールを確認する
Ansible が正しくインストールされたことを確認するため、インストール済みのバージョンを確認します。
ansible --version
出力例:
ansible 2.10.8
config file = None
configured module search path = ['/home/uadmin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.10.12 (main, Feb 4 2025, 14:57:36) [GCC 11.4.0]
ステップ 2:SSH アクセスをセットアップする
Ansible は SSH 経由でターゲットサーバーと通信します。コントロールノードからターゲットサーバーへのパスワードなし SSH アクセスを設定する必要があります。
2.1 SSH キーペアを生成する
SSH キーペアをまだ持っていない場合は、生成します。
ssh-keygen -t rsa -b 2048
2.2 SSH キーをターゲットサーバーにコピーする
次のコマンドを使って、公開鍵をターゲットサーバーにコピーします。
ssh-copy-id ubuntu@<target-server-ip>
SSH アクセスをテストし、パスワードなしで動作することを確認します。
ssh ubuntu@<target-server-ip>
ステップ 3:インベントリを定義する
Ansible は、管理対象のサーバーを定義するために インベントリファイル を使用します。
3.1 インベントリファイルを作成する
作業ディレクトリにファイルを作成します。ファイル名: inventory です。
nano inventory
ターゲットサーバーの IP アドレスまたはホスト名を追加します。例:
[ubuntu_servers]
192.168.50.42
192.168.50.145
ファイルを保存して終了します(Ctrl+O、次に Ctrl+X)。
3.2 接続をテストする
モジュールを使用して、ターゲットサーバーへの接続をテストします。モジュール: ping です。
ansible -i inventory ubuntu_servers -m ping
出力例:
192.168.50.145 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
192.168.50.42 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
ステップ 4:初めての Ansible Playbook を作成する
Ansible Playbook は、自動化したいタスクを定義する YAML ファイルです。Ubuntu Server のセットアップを自動化する Playbook を作成してみましょう。
4.1 Playbook ファイルを作成する
ファイルを作成します。ファイル名: setup.ymlです。
nano setup.yml
4.2 Playbook を定義する
Playbook に次の内容を追加します。
---
- name: Configure Ubuntu Server
hosts: ubuntu_servers
become: true
tasks:
- name: Update and upgrade apt packages
apt:
update_cache: yes
upgrade: dist
- name: Install common packages
apt:
name:
- curl
- wget
- git
- build-essential
state: present
- name: Enable UFW and allow SSH
ufw:
rule: allow
name: OpenSSH
state: enabled
- name: Create a new user
user:
name: devuser
password: "{{ 'password123' | password_hash('sha512') }}"
state: present
groups: sudo
タスクの説明
- パッケージの更新とアップグレード:サーバーに最新の更新とセキュリティパッチが適用されていることを確認します。
- 一般的なパッケージをインストールする:必須ツール(
curl、wget、git)をインストールします。 - UFW を有効にする:SSH アクセスを許可するようにファイアウォールを設定します。
- 新規ユーザーを作成する:sudo 権限を持つ新規ユーザーを追加します。
- ホスト名を設定する:サーバーのホスト名を設定します。
ファイルを保存して終了します。
ステップ 5:Playbook を実行する
Playbook を実行して、設定を適用します。
ansible-playbook -i inventory setup.yml
Ansible は各タスクの進捗を記録します。すべてのタスクが正常に完了すれば、Ubuntu Server の設定は完了です。
出力は次のとおりです。
uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml
PLAY [Configure Ubuntu Server] ***************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]
TASK [Update and upgrade apt packages] *******************************************************************************
^X^C [ERROR]: User interrupted execution
uadmin@u2204-001:~$ sudo nano setup.yml
uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml
PLAY [Configure Ubuntu Server] ***************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]
TASK [Update and upgrade apt packages] *******************************************************************************
ok: [192.168.50.42]
ok: [192.168.50.145]
TASK [Install common packages] ***************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]
TASK [Enable UFW and allow SSH] **************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]
TASK [Create a new user] *********************************************************************************************
changed: [192.168.50.42]
changed: [192.168.50.145]
PLAY RECAP ***********************************************************************************************************
192.168.50.145 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.50.42 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ステップ 6:設定を確認する
6.1 インストール済みパッケージを確認する
ターゲットサーバーのいずれかにログインし、一般的なパッケージがインストールされたことを確認します。
curl --version
git --version
6.2 ファイアウォールの状態を確認する
ファイアウォールが有効になっていることを確認します。
sudo ufw status
6.3 新規ユーザーを確認する
新規ユーザーが作成されたことを確認します。
cat /etc/passwd | grep devuser

高度なユースケース
基本的な Playbook に慣れたら、より高度なユースケースを試してみましょう。
- アプリケーションのデプロイ:Ansible を使って Web サーバー(Nginx、Apache など)やデータベース(MySQL、PostgreSQL など)をインストールし、設定します。
- 複数の環境の管理:ステージング環境、本番環境、開発環境用に、それぞれ別のインベントリファイルを作成します。
- ロールの使用:複雑なセットアップ向けに、Playbook を再利用可能なロールとして整理します。
- CI/CD との統合:CI/CD パイプラインの一環として、サーバーのセットアップを自動化します。
参考資料:
Ansible ドキュメント — Ansible コミュニティドキュメント
まとめ
Ansible は、サーバーのセットアップと構成を自動化するための強力なツールです。このガイドでは、次の内容を扱いました。
- コントロールノードへの Ansible のインストール。
- ターゲットサーバーへの SSH アクセスのセットアップ。
- Ubuntu Server のセットアップを自動化するための基本的な Playbook の作成と実行。
Ansible を活用することで、時間を節約し、ミスを減らし、インフラ全体の一貫性を確保できます。1 台のサーバーを管理する場合でも、数百台を管理する場合でも、Ansible は最新の DevOps ワークフローに欠かせないツールです。
2 thoughts on “24. Automating Ubuntu Server Setup with Ansible: A Practical Guide”