AWS EventBridgeでマイクロサービス x サーバレス x イベント駆動アーキテクチャ開発した話
株式会社エアークローゼット / nghia11110
テックリード / テックリード
| 利用プラン | 利用機能 | ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
|---|---|---|---|---|
スタンダードプラン | イベント駆動 | 11名〜50名 | 2022年1月 | B to C |
| 利用プラン | スタンダードプラン |
|---|---|
| 利用機能 | イベント駆動 |
| ツールの利用規模 | 11名〜50名 |
| ツールの利用開始時期 | 2022年1月 |
| 事業形態 | B to C |
アーキテクチャ
アーキテクチャの意図・工夫
CQRSを採用しているため、WRITEとREADでアーキテクチャ図が分かれています。 エアークローゼットでは将来的にメンズやシニア、キッズ向けなど今展開していないラインを増やしていきたいと考えており、そのときに基盤となる汎用的なシステムを追求した結果、イベント駆動アーキテクチャを採用しました。 APIと比べると同期的に呼び出すことができないことがネックではあるものの、複数のシステムが相互に関連し合う仕様なのと、個別でもシステムが動作できるよう疎結合を保つことが最も重要だと考えたためです。 CQRSの採用については主に3点理由があり、1つはパフォーマンス観点から、もうひとつは確実にhistoryのログが残る点、そしてもう一つは強制的に責務分離させられることです。
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
エアークローゼットではairCloset, airCloset Mallと複数事業展開しています。サービスごとに特化してシステムを開発していたために、事業の横展開に弱くて、同じ機能なのに、似て非なるものを開発しなければならない状態です。
どのような状態を目指していたか
そのため、ドメインを事業単位ではなく、事業の枠を超えた機能単位でマイクロサービスとして切り出し抽象化していくのが必要となります。
例えば、airClosetでもairCloset Mallでもクレジットカードで決済を行うことができるような「共通決済サービス」を開発することです。
比較検討したサービス
- redis streams
- rabbit mq
- kafka
比較した軸
マイクロサービス開発するために、色んな技術スタックがありますが、弊社ではインフラが殆どAWS使用しているので、マイクロサービスでもAWSで展開できる技術・ツールを考慮した上に、イベント駆動アーキテクチャ x AWS EventBridgeを選びました。
選定理由
Amazon EventBridge は、独自のアプリケーション、AWSのサービスからのデータを使用して、アプリケーションを簡単に接続することを可能にするサーバレスイベントバスです。EventBridgeはイベントを発行したり、発行されたイベントをフィルタリングし(イベント駆動)、所定のイベントが発生した場合のみLambda関数実行など特定の処理を実施することができます。
それに、サーバレスアーキテクチャにすれば、今後の運用コストも削減できるメリットがあるので、楽かなと思っています。
導入の成果
改善したかった課題はどれくらい解決されたか
マイクロサービスを一通り導入した結果、新規事業の立ち上げにかかるコストやローンチまでの時間を大幅に削減できました。 また、ノウハウが一箇所に集約されたことで、メンテナンスもしやすくなりました。
どのような成果が得られたか
2024年11月に、結婚式やイベント向けのスポットレンタルサービスairCloset Spot Rental(エアクロスポットレンタル)(元はairCloset Dress)をリリースしました。 企画立ち上げから完成までの開発期間はわずか3か月で、これまで新規事業を立ち上げていた際と比べて、コストを約70〜80%削減することができました。
導入時の苦労・悩み
開発環境と運用フロー:
サーバレス構成にすると、本番へのデプロイ自体はとても楽になりますが、開発環境を構築してチーム全体のエンジニアが同じように開発・検証できる状態を作るのは簡単ではありません。 そのため、AWS の各リソースをローカル環境で一通りエミュレーションできるツールを探す必要があります。 さらに、作成される AWS リソースの数が非常に多くなるため、 Git 上でコードとして管理できないとレビューができず、品質を担保するのが難しくなります。 そのため、IaC を記述するためのライブラリ(ツール)も必須になると考えています。
導入に向けた社内への説明
上長・チームへの説明
上記の条件をすべて満たす上で、AWS が CDK を提供しているのはとても便利です。 AWS Cloud Development Kit (AWS CDK) は、使い慣れたプログラミング言語(typescript, python, java)を使用してクラウドアプリケーションリソースを定義するためのオープンソースのソフトウェア開発フレームワークです。 CDK + CodePipelineを使うと、定義したリソースを簡単にAWSにデプロイできるし、cdk localstackを使ったら、開発環境においてAWSのサービスを擬似的に使用できるので、ローカル開発&テストがとても楽です。
チームに説明した際も、エンジニア全員がすでに Node.js に慣れていることもあり、スムーズに展開できそうだということで、みんな非常に納得してくれました。
活用方法
よく使う機能
- イベントルーティング(Rule)
- カスタムイベントの発行
- AWSサービスイベントの受信
- 複数ターゲットへの配信
- Event Bus による責務分離
- スケジューリング(EventBridge Scheduler)
- 再実行・リトライ制御
ツールの良い点
- AWS環境に慣れているチームであれば、導入が容易
- 低コストから利用を開始できます
- モニタリングや運用にかかるコストが低く抑えられています
ツールの課題点
このアーキテクチャの一番の課題は、非同期前提でのシステム構築が必須になるということと、それに付随してエラーが発生した際の調査が難しいことです。 イベント駆動アーキテクチャでは、処理ごとにトランザクションを分離して実装するのが一般的ですし、APIのようにresponseを待つといった概念も存在しません。 そのため、必然的にAPI駆動であるようなエラーをcatchするような実装はできず、エラーが発生した際には dead letter queue等の実装をする必要があります。 またそれぞれの処理が独立して動くため、どういう順番でどの処理が動いたのかログを残すのも工夫が必要になります。 これに対してエアークローゼットでは、 AWS X-Rayといったようなサーバレスに特化したログサービスや、処理のフローを制御してくれる AWS Step Functionsを積極的に導入し、処理の可視化やエラー時の挙動の一括管理をできるようにしていく予定です。
株式会社エアークローゼット / nghia11110
テックリード / テックリード
株式会社エアークローゼット / nghia11110
テックリード / テックリード
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法


