メールサービスにおけるAnsibleによるサーバ構成管理ツールの活用

2024年11月26日 火曜日


【この記事を書いた人】
今村 侑輔

2015 年新卒入社。途中、2年ほど IIJ Europe に出向経験もあるが SMX の中の人として長年スパムメールと奮闘中。M3AAWG, JPAAWG にも参加し始め、メッセージングエンジニアとして頑張ってます。最近の趣味はぶらり都バス旅。

「メールサービスにおけるAnsibleによるサーバ構成管理ツールの活用」のイメージ

こんにちは、こんばんは。ネットワーク本部で法人系メールサービスの運用をしている今村です。

サーバやネットワーク機器の管理の仕方は皆さん様々だと思います。

エクセルを使ってコンフィグを管理していたり、ファイルサーバにテキスト保存していたり、SVN(Subversion)やRCSなどの古き良き管理ツールで世代管理をしていたり、色々だと思います。

IIJのメールサービスであるIIJセキュアMXサービス(以下、セキュアMX)でも、過去はSVNを使ったコンフィグの世代管理をしていました。

各種アプリケーションはtar.gzで固めて、各サーバやSVNサーバから手作業でwgetコマンドで取得し、手作業で展開。各サービス(デーモン)の再起動も各サーバにログインして手で実施。

手前味噌ながら、毎日それなりの量の送受信メールの処理、及び各種Web画面へのアクセスがあるSaaSです。
サーバの台数は年々増え続け、そんな作業をいつまでもやっていたら、メンテナンス時間内に終わるものも終わらなくなってきました。

Chefでのコンフィグ管理

2015年頃、そんなメンテナンス作業に限界を感じていた我々セキュアMX運用チームは、当時少しずつ世間に浸透していっていたDevOpsに着目します。
最初に手に取ってみたのはChefでした。

当時Chefには、ローカルサーバ上で実施するChef Soloと、リモートサーバと適用対象ノードにインストールしたクライアントを用いて実施するChef Zeroがありました。
手始めに本番環境や評価環境、試験環境など様々な環境に構築されていた、迷惑メールフィルタ機能が動作しているサーバ群のアプリケーションコンフィグをChef Cookbookで管理することから始めました。
当時の迷惑メールフィルタ機能を提供しているサーバ群は、いくつかのサービスごとに同機能のサーバが横並びに10 環境ほど展開されており、それぞれのサービスごとにメンテナンスを計画すると毎週5時間のメンテナンスが3ヵ月以上掛かるような状況でした。

それまで環境ごとに別々にSVN管理されていたファイル群を、ChefとGitlabを使うことで、ファイルのテンプレート管理、及び環境ごとに変わる値の変数化を実現しました。
これにより、それまでメンテナンス作業準備に掛かっていたコンフィグ準備及び作業手順がほぼ標準化され、作業時間も劇的に削減できました。
更に作業手順が統一されたことで、作業手順書の作成もツールとテンプレートを用いた作成が容易になり、準備の工数の削減に成功しました。
# 具体的にどれくらい削減できたかは、ご想像におまかせします。
セキュアMX運用チームの負荷削減に加え、お客様のメールの送受信の遅延も削減でき、いいこと尽くしとなったのでした。

ChefからAnsibleへの移行

そんな快適なChef Lifeを謳歌していたセキュアMX運用チームですが、あるときChefからAnsibleへの移行を決意します。
当初、一部のコンフィグ管理のみをChefで行っていましたが、セキュアMX全体にChefを利用しようと考えたときに、メンバーからテンプレートファイルをerbで記述することへの反発が大きかったためです。
変数指定からテンプレートの記述まで、すべてRubyの記法で行えるのがChefの良いところの一つではありましたが、テンプレートはjinja2、変数設定やタスクの記述はYAMLとそれぞれ別々に記載ができるAnsibleの全面採用が決定しました。
またChefは、Chef Clientをターゲットホストにインストールしなければならず、Ansibleはその反面クライアントレスです。
ターゲットホストの負荷によっては、Chefが正常に動作しないことも稀に発生しており、Ansibleに軍配が上がりました。

Ansibleを使用したセキュアMXサーバの構成管理

セキュアMXでは、各サーバの構成管理ツールにAnsibleを採用しています。
クライアントレスで動作し、YAMLとjinja2ですべてを記載できるため、簡潔に各サーバのアプリケーションやネットワーク設定を管理できるのが魅力です。
独自のAnsibleモジュールもAnsibleコレクションで実装が可能なため、拡張性もあります。
また、Ansibleで利用する各Ansible Roleやvars、インベントリなどの管理はGitLabを利用して差分管理を実施しています。
更に、GitLab に付随しているCI機能を使って、各変更点のバリデーションチェックやサーバへのアプリケーションデプロイ単体テストなどを実現しています。

AnsibleはAnsibleで色々と悩みの種がこれまた多いのが現実です。
Ansibleコミュニティは、Ansible,Inc.時代から常に活発に議論や機能追加、修正が行われているようで、GitHubの更新を追っていると毎月何かしらのリリースタグが更新されている様子が分かります。
セキュアMXの運用でAnsibleを使っていく中では、年1回程度の更新を目標としています。

AnsibleやGitLabなどの構成管理ツールの導入の結果、どのような効果があったかというと次のメリットが挙げられます。

  • 構成管理ツールによって、各アプリケーションのコンフィグにおけるミスコンフィグレーションが削減された
  • 複数台いるサービスホストへの変更適用が並列実行可能になった
    • サービス断や遅延時間の縮小に繋がる
    • メンテナンス時間の大幅な削減にも繋がる
  • GitLab CIを使って、コミット時の各パラメータのバリデーションチェックも容易になった

構成管理ツールを使うにあたって、各種設定やテンプレートの変更はもちろん人の手で行う必要がありますが、バリデーションチェックやアプリケーションデプロイの単体テストなどを自動で行えるため、導入前後での各種確認に掛かる時間が大幅に削減できています。

セキュアMXでは、日々送受信される大量のメールを処理するためにサーバが相当数稼働しています。ですが、Ansibleを使うことで、従前時間の掛かっていたメンテナンス作業の作業時間が削減でき、ご利用中のお客様にご迷惑及びご心配をお掛けすることもだいぶ減ったと、運用している身としては勝手に思っています。

今後もセキュアMXでは、皆さんに安心して利用していただけるよう、色々な技術を活用していく予定です。

今村 侑輔

2024年11月26日 火曜日

2015 年新卒入社。途中、2年ほど IIJ Europe に出向経験もあるが SMX の中の人として長年スパムメールと奮闘中。M3AAWG, JPAAWG にも参加し始め、メッセージングエンジニアとして頑張ってます。最近の趣味はぶらり都バス旅。

Related
関連記事