マイクロサービスアーキテクチャを採用すると、複数の小さなサービスを独立して開発・運用できるメリットがあります。しかし本番環境やステージング環境にデプロイする際、複数サーバーへの一括反映や設定の一貫性維持が課題になります。
そこで有効なのが 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でマイクロサービスを本番運用する方法」について詳しく解説します。