24. Ansible を使った Ubuntu Server セットアップの自動化:実践ガイド

はじめに

サーバーを手動でセットアップ・管理するのは、特に複数のサーバーがある環境や、繰り返しの構成作業がある場合、面倒でミスが起きやすいプロセスです。強力なオープンソースの 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

09. Ubuntu サーバーの監査とログ記録

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 セットアップの自動化を始める前に、次のものを用意してください。

  1. コントロールノード:Ansible がインストールされているマシン(ローカルシステムまたは専用サーバー)。
  2. ターゲットサーバー:設定したい Ubuntu サーバー(オンプレミスまたはクラウド)。
  3. 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  

タスクの説明

  1. パッケージの更新とアップグレード:サーバーに最新の更新とセキュリティパッチが適用されていることを確認します。
  2. 一般的なパッケージをインストールする:必須ツール( curl、 wget、 git)をインストールします。
  3. UFW を有効にする:SSH アクセスを許可するようにファイアウォールを設定します。
  4. 新規ユーザーを作成する:sudo 権限を持つ新規ユーザーを追加します。
  5. ホスト名を設定する:サーバーのホスト名を設定します。

ファイルを保存して終了します。


ステップ 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”

コメントを残す