ある企業が新しいマイクロサービスアーキテクチャを AWS 上に設計しています。10 個のマイクロサービスが相互に通信し、一部は同期 REST API、一部は非同期イベントドリブンで連携します。サービス間の依存を疎結合に保ち、一つのサービスが障害になっても他のサービスに影響が波及しないよう設計する必要があります。また、イベントのスキーマ管理と後方互換性の確保が重要です。最も適切なアーキテクチャはどれですか?
- A. 同期通信には Amazon API Gateway と AWS Lambda、非同期通信には Amazon EventBridge を使用する。EventBridge Schema Registry でイベントスキーマを管理し、後方互換性を確保する。Circuit breaker パターンには AWS App Mesh またはサービス側での実装を使用する
- B. すべての通信を Amazon Kinesis Data Streams に統一し、すべてのサービスをコンシューマーとしてストリームを購読させる
- C. Direct VPC 間通信(PrivateLink なし)でマイクロサービスを直接接続し、Elastic Load Balancer を各サービスの前段に配置する
- D. すべてのマイクロサービス間通信を Amazon SQS と SNS の組み合わせ(SNS fanout pattern)で非同期化し、サービスメッシュを廃止する
解答と解説を見る
正解: A
同期 REST API には API Gateway + Lambda、非同期イベントドリブンには EventBridge の組み合わせが AWS のベストプラクティスです。EventBridge Schema Registry によりイベントのスキーマを中央管理し、スキーマバージョン管理で後方互換性を確保できます。App Mesh によるサービスメッシュでサーキットブレーカーパターンを実装し、障害の波及を防止します。 D: SQS + SNS はメッセージングには有効ですが、スキーマ管理機能がなく、後方互換性の確保が課題になります。また、EventBridge の方がイベント駆動アーキテクチャに適した機能(フィルタリング、スキーマレジストリ等)を持ちます。 B: すべての通信を Kinesis に統一することは、リクエスト-レスポンス型の同期 REST API パターンに適していません。シンプルな同期通信をストリームで実装することはオーバーエンジニアリングです。 C: サービス間の直接 VPC 通信は疎結合の原則に反し、サービスが互いの IP アドレスやエンドポイントを直接知っている必要があり、依存が強まります。
📚 関連サービスの解説: Amazon API Gateway ・ AWS Lambda