MongoDB Atlas Triggersで実現するデータ連動とコスト最適化

メディア統括本部 サービスリライアビリティグループ(SRG)の小林(@berlinbytes)です。
#SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。
本記事ではMongoDB Atlas Triggersの仕組みと事例を解説し、サーバーレスでのデータ連動や運用自動化を通じて開発効率化とコスト削減を実現する方法を紹介しています。

MongoDB Atlasについて


MongoDB Atlasは、AWS、Google Cloud、Azureといった主要なクラウドプロバイダー上で利用できる、フルマネージド型のクラウドデータベースサービス(DBaaS)です。 インフラの管理を最小限に抑えながら、スケーラブルなMongoDB環境を数クリックで構築できるのが非常に便利です。
このMongoDB Atlasには、アプリケーション開発や運用を効率化する「Triggers(トリガー)」という機能があります。 Triggersを活用すると、データベースの変更を起点としたリアルタイム処理や、定期的なメンテナンス作業などをサーバーレスで実現可能です。
ここからは、どのようにTriggersが活用されているのかを、公式の事例などから調べてみた結果をご紹介していこうと思います。

MongoDB Atlas Triggersの概要と仕組み


Triggersは、特定のイベントが発生した際に、あらかじめ定義しておいたサーバーサイドのロジック(Atlas Functions)を自動的に実行する機能です。 インフラのプロビジョニングや管理を行うことなく、イベント駆動型での処理や定期実行タスクを実装できます。
Triggersには大きく分けて以下の2種類が存在します。

1. Database Triggers(データベーストリガー)

MongoDBのコレクションに対する変更(ドキュメントの挿入、更新、削除、置換)を検知して発火するトリガーです。 技術的にはMongoDBの「Change Streams」という機能をベースにしており、データベース内の操作ログ(Oplog)を監視することで、変更イベントをリアルタイムに捕捉しています。 これにより、ユーザーのアクションやデバイスの状態変化に即座に反応するアプリケーションを構築できます。

2. Scheduled Triggers(スケジュールドトリガー)

指定したスケジュールに基づいて定期的に関数を実行するトリガーです。 Unix系のシステムで広く使われている「CRON式」で実行頻度を定義できます。 夜間のバッチ処理、定期的なレポート生成、データのクリーンアップ、あるいは外部APIのトークン更新など、時間の経過に伴うタスクの自動化に適しています。

2つのトリガーの使い分け


これら2つのトリガーは、実現したい目的によって使い分けることができます。
  • Database Triggersが適しているパターン ユーザーやIoTデバイスによる「今この瞬間の変化」に反応したい場合に利用します。 例えば、在庫が減った瞬間に発注システムへ通知する、ユーザー登録と同時にウェルカムメールを送信する、チャットメッセージが投稿されたらプッシュ通知を送る、といったケースです。 変更に即反応する必要がある場合は、こちらを選択します。
  • Scheduled Triggersが適しているパターン 「定刻にまとめて行う」運用タスクや、コスト管理に適しています。 例えば、業務時間外にデータベースのスペックを下げてコストを削減する、毎朝データを集計してダッシュボードを更新する、古いログデータを定期的に削除する、といったケースです。 時間を起点とする処理は、こちらを選択することになると思います。

Database Triggersによるリアルタイム連携


ここでは、データの変更をトリガーにしたシステム間連携や、リアルタイム処理を実現している事例をパターンごとに紹介します。

外部システムへの即時連携とイベント駆動

MongoDB Atlas上のデータ変更を起点として、Azure FunctionsやAWS Lambdaなどの外部FaaS(Function as a Service)を呼び出し、他システムへデータを同期しています。
  • Catylex(契約AI) 契約ドキュメントの解析結果をイベント駆動で各機能に反映させています。 データの加工やタグ付け、外部サービスへの連携といった処理を、データベースの更新を起点に自動化することで、イベント駆動型のスケーラブルなシステムを実現しています。

IoTとリアルタイム制御

物理的なデバイスの状態管理にもDatabase Triggersは有用なようです。
  • Bosch(スマートビルディング) ARアプリから照明設備を制御する試作において活用されていました。 MongoDB内の「ライト状態」を示すドキュメントが更新されるとトリガーが発火し、API経由で実際の照明のオン/オフが切り替わります。 アプリと物理デバイスの間をデータベースが仲介し、状態の同期を行っています。

ユーザー体験の向上(通知・同期)

モバイルアプリなどでのユーザー体験向上にも寄与します。
  • MongoDB公式チュートリアル(プッシュ通知) 書籍アプリにおいて、新しい書籍が追加されたり削除されたりした際に、Firebase Admin SDKを通じてユーザーにプッシュ通知を送る実装例があります。 データの更新と通知を直結させることで、ユーザーに最新情報を逃さず届けることができます。

Scheduled Triggersによる運用自動化とコスト削減


次に、定期実行を行うScheduled Triggersを活用して、運用の効率化やコスト削減を実現している事例を紹介します。

コスト最適化(自動スケーリング・停止)

クラウドデータベースのコスト管理において、使用していない時間帯のリソースを調整することは非常に効果的です。
  • Atlas Cluster Automation MongoDB公式のオープンソースツールとして、タグ付けされたクラスタを一斉に停止(Pause)または再開(Resume)する仕組みが公開されています。 開発環境や検証環境など、夜間や休日に稼働させる必要がないクラスタを自動停止することで、無駄な課金を防ぐことができます。

定期的なメンテナンスと集計

システムの安定稼働やデータ活用に必要な定期タスクも自動化されています。
  • Goodnotes(デジタルノートアプリ) 検索機能やオートコンプリート機能で使用するための「集計済みコレクション」を定期的に生成しています。 複雑な集計処理をバックグラウンドで定期実行しておくことで、ユーザーが検索する際のレスポンス速度を高速に保つことができます。

まとめ


MongoDB Atlas Triggersは、アプリケーションのアーキテクチャをシンプルにすることが可能で、運用の自動化を推進できるツールです。
「Database Triggers」を使えば、データの変更を起点としたリアルタイムな連携や通知が可能になり、イベント駆動型のアプリケーションを構築できます。 「Scheduled Triggers」を使えば、リソースの自動調整によるコスト削減や、定期的なデータメンテナンスをサーバーレスで実現できます。
これらの機能を使い分けることで、開発工数の削減だけでなく、インフラコストの最適化やユーザー体験の向上といった、ビジネス上のメリットも享受することができそうです。 弊社でも、Scheduled Triggersによるコスト最適化の恩恵は、複数プロジェクトで享受しています。
まだ活用されていない方は、まずは開発環境の自動停止設定や、簡単な通知機能の実装から試してみてはいかがでしょうか。
 
SRG では一緒に働く仲間を募集しています。
ご興味ありましたらぜひこちらからご連絡ください。