AWS におけるモノリスからマイクロサービスへ:3 つの移行パターン
『Monolith to Microservices』を参考に、モノリスからマイクロサービスへ移行する 3 つのパターンを AWS サービスに当てはめて解説します。
モノリスからマイクロサービスへの移行に決まった正解はありません。Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith で紹介されているパターンのうち 3 つを、AWS サービスにどう当てはめられるか整理します。
Strangler Fig Application
Strangler Fig Application パターンを使うと、既存アプリケーションに破壊的な変更を加えることなく、機能を段階的にマイクロサービスへ移行できます。
モノリス全体を一気に書き直すのではなく、既存システムの周囲に新しいマイクロサービスを少しずつ作成していきます。時間の経過とともに、これらのサービスがモノリスの責務を引き継いでいき、最終的にモノリスを廃止できるようになります。
AWS ALB による実装
Application Load Balancer (ALB) を使うと、リクエストをモノリスまたは新しいマイクロサービスへルーティングできます。ALB のパスベースルーティング機能で、リクエストパスに応じて転送先を切り替えます。
SQS による実装
メッセージ駆動型のアプリケーションでは、AWS Lambda が各メッセージを調べ、モノリスまたは新しいマイクロサービスが処理する SQS キューへ送信できます。
Parallel Run
Parallel Run パターンでは、モノリスとマイクロサービスの両方を同時に呼び出し、それぞれの結果を別々に保存します。
このアプローチはリスクの高い移行や大規模なシステム変更に特に有用で、最終的な移行を行う前に出力を比較するためのセーフティネットとして機能します。
Change Data Capture (CDC)
Change Data Capture (CDC) パターンはもう一つの移行戦略ですが、大きな課題も伴います。書籍の著者は次のように述べています。
In general, I try to keep the use of this pattern to a minimum because of the challenges around some of the implementations of this pattern.
AWS では、Database Migration Service (DMS) と DynamoDB Streams を使って CDC パターンを実装できます。
このパターンでは、ソースデータの変更に応じて処理を実行し、移行中に並行稼働するシステム間でデータを同期できます。
まとめ
Strangler Fig、Parallel Run、Change Data Capture を AWS サービスに当てはめると、それぞれのパターンがモノリスからマイクロサービスへの移行のどの部分を担うのかが見えてきます。
この 3 つのパターンは互いに競合するものではなく、同じ移行の異なる課題を扱います。Strangler Fig は、ALB のパスベースルーティングや SQS を使ってモノリスからトラフィックを徐々に切り離します。Parallel Run は切り替え前に新サービスの出力を検証し、CDC は両者が共存する間のデータ整合性を保ちます。
著者自身が CDC の利用に慎重である点には注意が必要です。3 つのパターンの中でも CDC は、実装方法によって運用上の問題が生じやすいためです。まず単純なパターンを検討し、それだけでは不十分な場合に DMS や DynamoDB Streams の採用を検討するのがよいでしょう。
Related posts
C4 ダイアグラムでチーム間のコミュニケーションを改善する
C4 モデルの特徴と、UML やインフラ構成図との違いを整理し、相手のロールに合った粒度でソフトウェアアーキテクチャを伝える方法を解説します。
Cognito User Pools と OIDC で Slack サインインを実装する
Cognito user pool を OIDC 経由で Slack と連携させ、"Sign in with Slack" を Amplify で Next.js アプリケーションに組み込みます。
Lambda Web Adapter で FastAPI を AWS Lambda にデプロイする
FastAPI で書いた API バックエンドをコンテナ化し、Lambda Web Adapter と AWS CDK を使って単一の Lambda 関数へデプロイします。
API Gateway WebSocket:モック統合の実装
バックエンドの Lambda を使わず、モック統合のみで API Gateway WebSocket API を構築し、あらかじめ用意したレスポンスを返します。
CloudFront 署名付き URL 経由で S3 にアップロードする
CloudFront の署名付き URL を使い、独自ドメイン経由で S3 にアップロードする方法を紹介します。S3 の署名付き URL を直接使えない場合に有用です。
