イベント駆動型アプリケーション
AWS でのアプリケーション開発
Ricardo Sueiras
Principal Technologist
イベントとは
- メッセージは、コンポーネント間で送受信される作業単位です。
- イベントは、すでに発生した事実を記録します。
- サービスはイベントを発行することで通信します。
- 他のサービスはそれらのイベントに独立して反応します。
- 疎結合により、依存関係が減りスケーラビリティが向上します。
イベントプロデューサー
- プロデューサーはアクションが発生したときにイベントを作成・発行します。
- AWS サービスとカスタムアプリケーションの両方がイベントを生成できます。
- Amazon S3 へのファイルのアップロードがその一例です。
- Amazon S3 はオブジェクト作成イベントを発行します。
イベントコンシューマー
- コンシューマーはイベントを非同期に受信・処理します。
- イベントソースによって配信モデルが異なります。
- プッシュ型:イベントが即座に配信されます。
- ポーリング型:コンシューマーがポーリング時にイベントを取得します。
イベントソースマッピング
- AWS Lambda は代表的なイベントコンシューマーです。
- ソースをポーリングし、レコードのバッチを自動的に取得します。
Lambda イベントソースマッピングの調整
- イベントソースマッピングを調整してスループットを改善します。
- バッチサイズを調整して、1 回の呼び出しあたりのレコード数を制御します。
- 失敗したレコードの再試行設定を構成します。
- 対応しているソースでは部分バッチレスポンスを使用します。
ReportBatchItemFailures で成功済みレコードの再処理を防げます。
Amazon EventBridge
- EventBridge はサービスとアプリケーション間でイベントをルーティングします。
- サービスを密結合させずに動的なルーティングを実現します。
- アプリケーションは EventBridge にイベントを発行します。
- ルーティングルールが各イベントの送信先を決定します。
EventBridge の機能
- EventBridge にはいくつかのルーティング機能があります。
- ルールで 1 つのイベントを複数のターゲットに配信できます。
- スケジュールルールにより cron サーバーが不要になります。
- スケジュールは
rate()、at()、cron() 式をサポートします。
- パイプはポイントツーポイント統合を提供します。
- パイプではフィルタリングと変換も利用できます。
イベントバス
- イベントバスの種類によってルーティング方法が異なります。
- デフォルトバスは AWS サービスからのイベントを受信します。
- カスタムバスはアプリケーション固有のイベントを処理します。
- パートナーバスはサードパーティプロバイダーからのイベントを受信します。
- ルールは各バスとそのターゲットの間に配置されます。
スキーマディスカバリー
- プロデューサーとコンシューマーは独立して進化することが多いです。
- イベントの構造を理解することが不可欠です。
- スキーマディスカバリーは受信イベントの構造を自動的に取得します。
- イベントペイロードの検査に使用します。
- 統合の検証に使用します。
- 対応言語のバインディング生成に使用します。
スキーマレジストリ
- スキーマレジストリはイベントスキーマを保存します。
- 開発者がイベント構造を理解し、バインディングを生成するのに役立ちます。
イベントフィルタリング
- フィルタリングにより不要な処理を削減できます。
- JSON イベントパターンでマッチング条件を定義します。
- パターンは指定したイベントのみに一致します。
- 下流のシステムは関連するイベントのみを処理します。
イベントの順序制御
- イベントの順序は常に保証されるわけではありません。
- サービスによっては順序が前後する場合があります。
- 順序制御を使用して明示的にシーケンスを保証します。
イベントのアーカイブと再生
- EventBridge はイベントをアーカイブして後から再生できます。
- 障害からの復旧にイベントを再生します。
- 新しいコンシューマーのテストにイベントを再生します。
- 下流システムの再構築にイベントを再生します。
エラー処理
- イベント駆動型アプリはエラーを安全に処理する必要があります。
- 障害にはイベントの重複が含まれます。
- コンシューマーは可能な限り冪等になるよう設計します。
DLQ と Destinations
- DLQ を使用して繰り返し失敗するイベントを分離します。
- EventBridge の DLQ は関数単位ではなくルールターゲット単位で設定します。
- Lambda Destinations はこのルーティングを拡張します。
- Destinations は成功・失敗の両方の結果をルーティングします。
イベントのテストと検証
- イベント駆動型アプリのテストはルーティングを検証します。
- イベントフィルタリングも検証します。
- イベントの再試行も検証します。
- 分散システム全体での処理を確認します。
- AWS SAM を使用してサンプルテストイベントを生成します。
- サンプルイベントは実際の JSON 出力を正確に再現します。
テスト対象
- SAM を使用してデプロイ前にローカルでテストできます。
- イベントパターンマッチングを検証します。
- 再試行の動作を検証します。
- スロットリングのシナリオを検証します。
- イベントの重複配信を検証します。
- コンシューマーの冪等な動作を検証します。
練習しましょう!
AWS でのアプリケーション開発
Preparing Video For Download...