内製ツールから脱却し、Ansible でサーバ構成管理をプロジェクト横断で統一する
株式会社コロプラ / 杉浦綜介
メンバー / インフラエンジニア / 従業員規模: 501名〜1,000名 / エンジニア組織: 101名〜300名
| ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
|---|---|---|
| 10名以下 | 2023年 | B to C |
| ツールの利用規模 | 10名以下 |
|---|---|
| ツールの利用開始時期 | 2023年 |
| 事業形態 | B to C |
アーキテクチャ

アーキテクチャの意図・工夫
複数のプロジェクトと複数のサーバタイプを横断して管理するため、共通処理は Role に切り出し、プロジェクト固有の設定は変数で上書きする構成を取っています。サーバタイプ(アプリケーション・バッチ・キャッシュ・マルチプレイリレーサーバなど)ごとにプレイブックを用意し、対象サーバに応じて実行するプレイブックを選択します。
特に共通基盤の Role は role/base として Git サブモジュール化しています。role/base 側を修正すれば、次回の構築や反映時に全プロジェクトへ同じ変更を適用できるようにしました。一方で、各プロジェクトでのみ使う Role はプロジェクト側に持てるようにしており、共通化と柔軟性の両立を狙っています。
導入の背景・解決したかった問題
導入背景
弊社のインフラ部門では、複数のゲームプロジェクトを横断して、アプリケーションサーバ・バッチサーバ・キャッシュサーバ・マルチプレイリレーサーバといった様々なタイプの VM サーバを管理しています。
以前はシェルスクリプトベースの内製ツールで構成管理を行っていましたが、メンテナー不在によるブラックボックス化や、各自の独自カスタマイズ、バージョン管理の欠如による運用の属人化が大きな課題となっていました。
CentOS 7 のサポート終了により、Ubuntu への移行が決まり、全体的なサーバの再構築が必要となりました。内製ツールの確実な動作が見込めない状態で、構築を行うのは難しく、ツールの刷新が必要となっていました。
比較検討したサービス
- 内製ツールの改修継続
- Chef
- Ansible
比較した軸
メンテナーが不在になっても継続して使い続けられるか、チームメンバーが学習しやすいかという点を重視しました。内製ツールを刷新する場合も、後任のメンテナーが確保できる保証はなく、同じ問題を繰り返すリスクがありました。
選定理由
内製ツールの改修は、メンテナー不在という根本的な問題が解消されないとして見送りました。Chef も候補に挙がりましたが、インフラチームに Ruby の利用者がおらず、管理対象へのエージェントのインストールも必要になることから採用を見送りました。
Ansible は YAML で設定を書けてエージェントレスで動くため、既存のチームメンバーが参入しやすく、ツールそのものの継続性もコミュニティに委ねられるという点が決め手になりました。また、同時期に Terraform の採用も進めており、組み合わせて使われる事例の多い Ansible がほぼ既定の選択肢となっていたため、他のツールを本格的に比較するには至りませんでした。
サーバ構成のコード化でバージョン管理ができるようになり、レビューが容易に行える点もありました。
導入の成果
プロジェクト横断で設定フォーマットを統一でき、全体の見通しが大きく改善しました。共通で変更したい項目は一箇所を修正すればよくなり、プロジェクトごとに差分を追いかける負荷が減っています。
構築時間も短縮できました。内製ツール時代は手作業での修正がたびたび発生し、サーバ構築に 1 日前後かかることもありましたが、誰が構築を行っても同じ手順で再現できるようになったことで、現在は 1〜2 時間程度で完了するケースが増えました。
また、group_vars を中心に変数を管理する運用にしたことで、設定ファイルそのものを直接編集する場面が減りました。レビューではパラメータ変更に集中できるためレビュワーの負荷が下がり、表記ミスによるシンタックスエラーも起こりにくくなっています。
導入時の苦労・悩み
内製ツールではプロジェクトごとに設定ファイルを直接配置する形でしたが、Ansible への移行にあたってはプロジェクト間の共通化を図るため Jinja2 テンプレートを採用しました。これにより、プロジェクトごとにわずかに異なっていた設定を変数として整理し直す作業が発生し、動作が以前から変わっていないかの確認に時間がかかりました。
また、CentOS 7 のサポート終了という期日に追われながら Ansible の設計を進めたため、ベストプラクティスから少し外れたファイル構成になった部分があります。動作確認の段階では少数のサーバタイプを対象にしており問題になりませんでしたが、本番対応で全タイプ分のプレイブックを揃えたとき、プレイブックをフラットに配置していたためファイルが多く並ぶ状態になりました。現在はプレイブックの命名規則を統一し、整理を済ませています。
導入に向けた社内への説明
上長・チームへの説明
内製ツールのメンテナーが不在で、いつまで安定して動き続けるか見通しが立たないこと、プロジェクトを横断したセキュリティ対応などで構成の統一が取りにくい状態が続いていることを課題として整理しました。
CentOS 7 から Ubuntu への移行による全体的なサーバ再構築は避けられない作業であり、この機会に構成管理ツールも切り替えることでまとめて移行コストを吸収できると伝えました。OSS として広く使われているツールへ移行することで、メンテナー依存のリスクを減らせるという点も説明しました。
活用方法
サーバの構築や設定変更が必要になったときに、対象のプレイブックを実行します。インフラ部門のメンバーが複数プロジェクトを管理しており、プロジェクト間で共通の処理は Role として一元管理することで、対応漏れを防いでいます。
加えて、開発検証環境と本番環境で可能な限り同じパラメータ設定を使う運用にしており、本番への適用漏れを減らしています。また、構成がコード化されたことで、稼働状態や設定内容を確認するテストも組み込みやすくなりました。
よく使う機能
- Playbook
- サーバタイプごとにプレイブックを作成し、構成の適用を自動化しています。
- Role
- 共通処理を Role として切り出し、
role/baseの Git サブモジュール運用で複数プロジェクトへ一括適用できるようにしています。
- 共通処理を Role として切り出し、
group_vars- 設定ファイル本体ではなく変数のパラメータを中心に管理し、レビューしやすさと設定ミスの抑制につなげています。
- Jinja2 テンプレート
- プロジェクト間で異なる設定値を変数として管理し、設定ファイルを生成しています。内製ツール時代にプロジェクトごとにわずかに異なっていた設定ファイルの差分を、変数の差分として明示できるようになりました。
ツールの良い点
- YAML で書けるため、特定の言語スキルがなくてもチームで読み書きしやすく、メンテナー依存になりにくいです
- エージェントレスで管理対象サーバへの特別なインストールが不要なため、導入の敷居が低かったです
- Role とテンプレートの仕組みにより、プロジェクト横断の共通化とプロジェクト固有の差分管理を両立しやすいです
- 内製ツール時代に発生していた手作業修正を減らし、構築時間を 1 日前後から 1〜2 時間程度まで短縮できました
ツールの課題点
--diffオプションで反映前に差分を確認できますが、モジュールによっては diff 出力に対応しておらず、事前に差分を確認できない場合があります- 実行エラーのログが分かりづらいものが多く、何を修正すればよいかがすぐに分からない場合があります
ツールを検討されている方へ
複数のサーバやプロジェクトを横断して管理し、構成を統一したい状況に向いています。共通設定を 1 つにまとめられる点や、処理(Role)と設定値(vars)を分離できる点により、変更レビューが分かりやすくなります。
導入前に、Role とプレイブックのディレクトリ構成の設計方針を決めておくと、後から整理する手間が省けます。少数のサーバタイプで動作確認しているときは問題に気づきにくいため、本番展開を見越した全タイプでの検証や構成の方針をチーム内で決めておくことをおすすめします。
今後の展望
ロジックやパラメータの変更レビューの際、差分を手動で用意していますが、CI の連携を進めて自動的に差分を取得したり、事前にシンタックスエラーなどを判断できる仕組みを用意したいと考えています。
また、同時期に採用した Terraform と連携を進め、インスタンスの立ち上げからサーバの構築までを一貫で行えるような CI/CD の構築を考えています。
株式会社コロプラ / 杉浦綜介
メンバー / インフラエンジニア / 従業員規模: 501名〜1,000名 / エンジニア組織: 101名〜300名
株式会社コロプラ / 杉浦綜介
メンバー / インフラエンジニア / 従業員規模: 501名〜1,000名 / エンジニア組織: 101名〜300名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法


