Ansibleで複数サーバーにマイクロサービスをデプロイする方法

マイクロサービスアーキテクチャを採用すると、複数の小さなサービスを独立して開発・運用できるメリットがあります。しかし本番環境やステージング環境にデプロイする際、複数サーバーへの一括反映や設定の一貫性維持が課題になります。

そこで有効なのが Ansible です。本記事では、Ansibleを使って複数サーバーにマイクロサービスをデプロイする方法を解説します。


1. 前提条件

  • Ansible が管理サーバーにインストール済み
  • SSH で対象サーバーに接続可能
  • 各サーバーは Linux 環境(Ubuntu または CentOS を想定)
  • 各マイクロサービスは Docker イメージとして配布可能

2. ディレクトリ構成例

以下のような Ansible プロジェクト構成を想定します。

ansible-microservices/
├── inventory/
│ └── hosts.yml
├── roles/
│ └── deploy_service/
│ ├── tasks/
│ │ └── main.yml
│ └── templates/
│ └── docker-compose.yml.j2
└── site.yml

3. インベントリ設定

対象サーバーを inventory/hosts.yml に記述します。

all:
  hosts:
    service1.example.com:
      ansible_user: ubuntu
    service2.example.com:
      ansible_user: ubuntu
  children:
    microservices:
      hosts:
        service1.example.com:
        service2.example.com:

4. Playbook の作成

site.yml でデプロイ対象を定義します。

- name: Deploy microservices
  hosts: microservices
  become: true
  roles:
    - deploy_service

5. ロールのタスク定義

roles/deploy_service/tasks/main.yml

- name: Install Docker & Docker Compose
  apt:
    name: "{{ item }}"
    state: present
  loop:
    - docker.io
    - docker-compose-plugin
  when: ansible_os_family == "Debian"

- name: Create app directory
  file:
    path: /opt/microservice
    state: directory
    owner: "{{ ansible_user }}"
    group: "{{ ansible_user }}"
    mode: '0755'

- name: Deploy docker-compose.yml
  template:
    src: docker-compose.yml.j2
    dest: /opt/microservice/docker-compose.yml

- name: Start containers
  command: docker compose up -d
  args:
    chdir: /opt/microservice

6. Docker Compose テンプレート

roles/deploy_service/templates/docker-compose.yml.j2

version: '3.8'
services:
  api:
    image: myrepo/microservice-api:latest
    ports:
      - "8080:8080"
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

7. 実行方法

以下のコマンドで複数サーバーに一括デプロイできます。

ansible-playbook -i inventory/hosts.yml site.yml

8. 応用ポイント

  • 環境ごとに変数を分離
    group_vars/production.yml などを用意し、サービスのバージョンやDBパスワードを環境ごとに切り替える。
  • サービスごとのロール化
    roles/deploy_api, roles/deploy_frontend のように分離すると管理しやすい。
  • CI/CDと連携
    GitHub Actions や GitLab CI/CD から ansible-playbook を呼び出すことで、自動デプロイを実現可能。

まとめ

  • Ansible を使うことで、複数サーバーへのマイクロサービスデプロイを自動化できる。
  • Docker Compose をテンプレート化することで、設定の一貫性と再利用性を確保できる。
  • CI/CD パイプラインと組み合わせれば、継続的デプロイ環境を容易に構築可能。

👉 次回は「Ansible+Docker Swarm/Kubernetesでマイクロサービスを本番運用する方法」について詳しく解説します。

テックジム|プログラミング教材の一括まとめ買い

プログラミング教材をまとめて効率よく学びたい方におすすめ!
学習の時間とコストを節約できます。


今すぐチェックする

Uncategorized
スポンサーリンク
タイトルとURLをコピーしました