AWSにおけるモノリスからマイクロサービスへ:3つの移行パターン
『Monolith to Microservices』に触発され、AWSにおけるモノリスからマイクロサービスへの移行パターンを解説します。
モノリスからマイクロサービスへの移行には決まった正解がなく、Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith で紹介されている複数のパターンを、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
Cognito User PoolsとOIDCでSlackサインインを実装する
Cognito user poolをOIDC経由でSlackと連携させ、"Sign in with Slack"をAmplifyでNext.jsアプリに組み込みます。
Lambda Web AdapterでFastAPIをAWS Lambdaにデプロイする
Lambda Web Adapterを使うと、FastAPIで書いたAPIバックエンドをコンテナのまま単一のLambda関数にデプロイできます。
API Gateway WebSocket:モック統合の実装
バックエンドのLambdaを一切使わず、モック統合のみでAPI Gateway WebSocket APIを構築し、あらかじめ用意されたレスポンスを返します。
CloudFront署名付きURL経由でS3にアップロードする
CloudFrontの署名付きURLを使えば、独自ドメイン経由でS3にアップロードできます。S3の直接の署名付きURLが使えない場合に有用です。
AWS EventBridge Scheduler:スケジュールに沿ってEC2を起動・停止する
Lambdaを介さずEventBridge SchedulerがEC2 APIを直接呼び出すことで、cronスケジュールに従ってEC2インスタンスを起動・停止します。
