トップ
ブログ

Amplify / DynamoDB の検索とマルチテナントの問題を OpenSearch の導入で月額 $27 で全部解決した話

2026/2/24

Amplify / DynamoDB の検索とマルチテナントの問題を OpenSearch の導入で月額 $27 で全部解決した話

Aurora への移行を本気で検討していました。しかし結局、DynamoDB を捨てる必要はありませんでした。OpenSearch を 1 台追加するだけで、検索とマルチテナントの 2 つの課題を月額 $27 で同時に解決できました。

課題 1:DynamoDB だけでは検索要件に対応できない

Amplify Gen2 で構築した不動産テックプロダクトでは、プロダクトの成長とともに DynamoDB の検索の限界が顕在化しました。

・複数条件の組み合わせ検索(エリア × 価格帯 × 面積 × 築年数)に対応できない。1,000 件取得して 10 件に絞る非効率な処理に

・全文検索(キーワード検索)が不可能

・ソート順の切り替えに都度 GSI の追加が必要

課題 2:マルチテナントのコスト爆発

複数のプロダクトが同じ AWS アカウント上で稼働し、それぞれ staging / prod / sandbox 環境を持っています。検索エンジンをプロダクトや環境ごとに個別に立てると、複数プロダクト × 複数環境でインスタンスが増殖。Amplify の sandbox は開発者ごとに環境が立ち上がるため、5 人チームなら sandbox だけで 10 インスタンス。月額 $432 に膨れ上がる計算でした。

解決策:OpenSearch 1 台で検索もマルチテナントも解決

Aurora Serverless v2 への移行も検討しましたが、DynamoDB + Amplify の開発体験を維持したまま、検索レイヤーだけを追加する方針を選択しました。

検索:DynamoDB Streams + Lambda + OpenSearch

既存の書き込みパスを一切変更せず、DynamoDB Streams で変更を検知し Lambda 経由で OpenSearch に同期。検索 API は OpenSearch を参照します。全文検索・複数条件フィルタ・ソート・ページネーションが 1 クエリで完結します。

マルチテナント:1 インスタンス × index 分離

1 つの OpenSearch インスタンスを全環境で共有し、index 名({project}-{env}-{entity})で論理分離。sandbox 環境では OpenSearch リソースの作成をスキップし、stg 環境の共有インスタンスを参照。これにより $432/月 になるはずだったコストが $27/月 の 1 インスタンスで収まっています。

Aurora を選ばなかった理由

・コスト:Aurora Serverless v2 は最小構成でも月額約 $60〜70。DynamoDB + OpenSearch なら約 $30〜50 で半額以下

・Aurora に移行してもマルチテナント設計は別途必要。OpenSearch なら検索とマルチテナントを index 設計だけで同時に解決できる

・Amplify の Data モデル・GraphQL API 自動生成の恩恵を維持できる

成果

【検索】

・フィルタ:2〜3 条件が限界 → 任意の条件を組み合わせ可能に

・全文検索:不可 → 日本語形態素解析に対応

・レスポンス:Scan 時は数秒 → 複雑なクエリでも 100〜200ms

【マルチテナント】

・インスタンス数:最大 16 台 → 1 台に集約

・月額コスト:最大 $432/月 → $27/月

・sandbox 起動:OpenSearch 起動待ち(数分)→ スキップ

OpenSearch 1 台で検索とマルチテナントの 2 つの課題を同時に解決。プロダクトが増えても index を追加するだけでスケールする構成です。月額 $27 でここまでできるなら、Aurora に移行する理由はありませんでした。

Kohei Aoki

CEO / Engineer

Contact

まずは、
状況を整理しませんか?

課題が曖昧でも、
検証の進め方に迷っていても、
方向性が定まっていなくても大丈夫です。
PMLは、本質探索と検証設計から、
あなたの挑戦を論理的に前に進めます。

お問い合わせ内容

必須