イベント駆動型アプリケーション

AWS でのアプリケーション開発

Ricardo Sueiras

Principal Technologist

イベントとは

 

event-vs-messages

  • メッセージは、コンポーネント間で送受信される作業単位です。
  • イベントは、すでに発生した事実を記録します。
  • サービスはイベントを発行することで通信します。
  • 他のサービスはそれらのイベントに独立して反応します。
  • 疎結合により、依存関係が減りスケーラビリティが向上します。
AWS でのアプリケーション開発

イベントプロデューサー

 

event producers

  • プロデューサーはアクションが発生したときにイベントを作成・発行します。
  • AWS サービスとカスタムアプリケーションの両方がイベントを生成できます。
  • Amazon S3 へのファイルのアップロードがその一例です。
  • Amazon S3 はオブジェクト作成イベントを発行します。
AWS でのアプリケーション開発

イベントコンシューマー

 

consumers

  • コンシューマーはイベントを非同期に受信・処理します。
  • イベントソースによって配信モデルが異なります。
  • プッシュ型:イベントが即座に配信されます。
  • ポーリング型:コンシューマーがポーリング時にイベントを取得します。
AWS でのアプリケーション開発

イベントソースマッピング

  • AWS Lambda は代表的なイベントコンシューマーです。
  • ソースをポーリングし、レコードのバッチを自動的に取得します。

 

event source mapping

AWS でのアプリケーション開発

Lambda イベントソースマッピングの調整

  • イベントソースマッピングを調整してスループットを改善します。
  • バッチサイズを調整して、1 回の呼び出しあたりのレコード数を制御します。
  • 失敗したレコードの再試行設定を構成します。
  • 対応しているソースでは部分バッチレスポンスを使用します。
  • ReportBatchItemFailures で成功済みレコードの再処理を防げます。

 

event source mapping

AWS でのアプリケーション開発

Amazon EventBridge

  • EventBridge はサービスとアプリケーション間でイベントをルーティングします。
  • サービスを密結合させずに動的なルーティングを実現します。
  • アプリケーションは EventBridge にイベントを発行します。
  • ルーティングルールが各イベントの送信先を決定します。

 

event bridge

AWS でのアプリケーション開発

EventBridge の機能

 

capabilities

  • EventBridge にはいくつかのルーティング機能があります。
  • ルールで 1 つのイベントを複数のターゲットに配信できます。
  • スケジュールルールにより cron サーバーが不要になります。
  • スケジュールは rate()、at()、cron() 式をサポートします。
  • パイプはポイントツーポイント統合を提供します。
  • パイプではフィルタリングと変換も利用できます。
AWS でのアプリケーション開発

イベントバス

 

event bus

  • イベントバスの種類によってルーティング方法が異なります。
  • デフォルトバスは AWS サービスからのイベントを受信します。
  • カスタムバスはアプリケーション固有のイベントを処理します。
  • パートナーバスはサードパーティプロバイダーからのイベントを受信します。
  • ルールは各バスとそのターゲットの間に配置されます。
AWS でのアプリケーション開発

スキーマディスカバリー

 

event schema and registry

  • プロデューサーとコンシューマーは独立して進化することが多いです。
  • イベントの構造を理解することが不可欠です。
  • スキーマディスカバリーは受信イベントの構造を自動的に取得します。
  • イベントペイロードの検査に使用します。
  • 統合の検証に使用します。
  • 対応言語のバインディング生成に使用します。
AWS でのアプリケーション開発

スキーマレジストリ

  • スキーマレジストリはイベントスキーマを保存します。
  • 開発者がイベント構造を理解し、バインディングを生成するのに役立ちます。

 

event schema and registry

AWS でのアプリケーション開発

イベントフィルタリング

  • フィルタリングにより不要な処理を削減できます。
  • JSON イベントパターンでマッチング条件を定義します。
  • パターンは指定したイベントのみに一致します。
  • 下流のシステムは関連するイベントのみを処理します。

 

event filtering

AWS でのアプリケーション開発

イベントの順序制御

  • イベントの順序は常に保証されるわけではありません。
  • サービスによっては順序が前後する場合があります。
  • 順序制御を使用して明示的にシーケンスを保証します。

 

event ordering

AWS でのアプリケーション開発

イベントのアーカイブと再生

 

archiving and replaying

  • EventBridge はイベントをアーカイブして後から再生できます。
  • 障害からの復旧にイベントを再生します。
  • 新しいコンシューマーのテストにイベントを再生します。
  • 下流システムの再構築にイベントを再生します。
AWS でのアプリケーション開発

エラー処理

 

handling errors

  • イベント駆動型アプリはエラーを安全に処理する必要があります。
  • 障害にはイベントの重複が含まれます。
    • 処理の失敗。
    • コンシューマーの不応答。
  • コンシューマーは可能な限り冪等になるよう設計します。
AWS でのアプリケーション開発

DLQ と Destinations

 

handling errors

  • DLQ を使用して繰り返し失敗するイベントを分離します。
  • EventBridge の DLQ は関数単位ではなくルールターゲット単位で設定します。
  • Lambda Destinations はこのルーティングを拡張します。
  • Destinations は成功・失敗の両方の結果をルーティングします。
AWS でのアプリケーション開発

イベントのテストと検証

  • イベント駆動型アプリのテストはルーティングを検証します。
  • イベントフィルタリングも検証します。
  • イベントの再試行も検証します。
  • 分散システム全体での処理を確認します。
  • AWS SAM を使用してサンプルテストイベントを生成します。
  • サンプルイベントは実際の JSON 出力を正確に再現します。

 

testing

AWS でのアプリケーション開発

テスト対象

  • SAM を使用してデプロイ前にローカルでテストできます。
  • イベントパターンマッチングを検証します。
  • 再試行の動作を検証します。
  • スロットリングのシナリオを検証します。
  • イベントの重複配信を検証します。
  • コンシューマーの冪等な動作を検証します。

 

testing

AWS でのアプリケーション開発

練習しましょう!

AWS でのアプリケーション開発

Preparing Video For Download...