Lambda のワークフローとイベントの管理
Lambda を使用してサーバーレスアプリケーションを構築するときは、関数の実行をオーケストレーションし、イベントを処理するための手段が必要になることがよくあります。AWS は、Lambda 関数を調整するためのアプローチをいくつか提供しています。
-
Lambda 内のコードファーストワークフローオーケストレーションのための Lambda Durable Functions
-
複数のサービス間のビジュアルワークフローオーケストレーション用の AWS Step Functions
-
イベント駆動型アーキテクチャとスケジューリング用の Amazon EventBridge スケジューラと Amazon EventBridge
これらのアプローチを一緒に統合することもできます。例えば、特定イベントの発生時に Durable Functions または Step Functions のワークフローをトリガーするための EventBridge スケジューラを使用したり、定義された実行ポイントで EventBridge スケジューラにイベントを発行するためのワークフローを設定したりすることができます。本セクションの以下のトピックでは、これらのオーケストレーションサービスの使用方法をより詳しく説明します。
Durable Functions を使用したコードファーストオーケストレーション
Lambda Durable Functions は、ワークフローオーケストレーションにコードファーストのアプローチを提供し、Lambda 関数内でステートフルで長時間実行されるワークフローを直接構築できます。外部オーケストレーションサービスとは異なり、Durable Functions はワークフローロジックをコード内に保持するため、ビジネスロジックと並行してバージョン管理、テスト、保守が容易になります。
Durable Functions は、以下が必要な場合に最適です。
-
コードファーストワークフローの定義: JSON やビジュアルデザイナーではなく、使い慣れたプログラミング言語を使用してワークフローを定義する
-
長時間実行されるプロセス: 標準の Lambda 関数の 15 分の制限をはるかに超える、最大 1 年間実行できるワークフローを実行する
-
開発の簡素化: ワークフローロジックとビジネスロジックを同じコードベースに保持し、メンテナンスとテストを容易にする
-
コスト効率の高い待機: 待機状態中にコンピューティングリソースを消費せずに実行を一時停止する
-
組み込み状態管理: 外部ストレージ設定のない自動チェックポイントと状態の永続性
Durable Functions と Step Functions の選択
Durable Functions と Step Functions はどちらもワークフローオーケストレーション機能を提供しますが、異なるユースケースに対応します。
| 考慮事項 | Durable Functions | Step Functions |
|---|---|---|
| ワークフロー定義 | コードファースト (JavaScript、Python、Java) | JSON ベースの Amazon States Language またはビジュアルデザイナー |
| 開発アプローチ | ビジネスロジックを備えた単一のコードベース | ワークフロー定義と関数コードを分離する |
| サービス統合 | Lambda 関数コードと AWS SDK 経由 | 多くの AWS サービスとのネイティブ統合 |
| 実行期間 | 最大 1 年 | 最大 1 年 (標準)、5 分 (Express) |
| 並列処理 | Promise.all() およびコードベースのパターン | 並列状態と分散マップ |
| エラー処理 | Try-catch ブロックとカスタム再試行ロジック | 組み込みの再試行とキャッチの状態 |
| ビジュアルモニターリング | CloudWatch ログとカスタムダッシュボード | ビジュアル実行グラフと詳細履歴 |
| 次の用途に適しています | 開発者中心のワークフロー、複雑なビジネスロジック、ラピッドプロトタイピング | マルチサービスオーケストレーション、ビジュアルワークフロー、エンタープライズガバナンス |
Durable Functions は、次の場合に使用します。
-
チームがコードファーストの開発アプローチを優先する
-
ワークフローロジックがビジネスロジックと密接に連携する
-
ラピッドプロトタイピングとイテレーションを必要とする
-
ワークフローが主に Lambda 関数とシンプルなサービスコールで構成されている
Step Functions は、次の場合に使用します。
-
ビジュアルワークフローの設計とモニタリングを必要とする
-
ワークフローが複数の AWS サービスを広範囲にオーケストレーションする
-
エンタープライズガバナンスとコンプライアンス機能を必要とする
-
非技術的な利害関係者はワークフローロジックを理解する必要がある
耐久性のある関数の詳細については、「Durable functions for Lambda」を参照してください。
Step Functions を使用したワークフローのオーケストレーション
AWS Step Functions は、複数の Lambda 関数やその他の AWS サービスを構造化されたワークフローにまとめて調整するために役立つワークフローオーケストレーションサービスです。これらのワークフローは、状態の維持、高度な再試行メカニズムを用いたエラーの処理、データの処理を大規模に行えます。
Step Functions では、さまざまなオーケストレーションニーズを満たすために 2 つのワークフロータイプが提供されています。
- Standard ワークフロー
-
1 回だけの実行セマンティクスを必要とする、実行時間が長い監査可能なワークフローに最適です。Standard ワークフローは最大 1 年間実行でき、詳しい実行履歴を提供するとともに、ビジュアルデバッグをサポートします。受注処理、データ処理パイプライン、マルチステップ分析ジョブといったプロセスに適しています。
- Express ワークフロー
-
1 回以上の実行セマンティクスを使用する、イベントレートが高い短期間のワークロード向けに設計されています。Express ワークフローは最大 5 分間実行でき、大量のイベント処理、ストリーミングデータ変換、または IoT データインジェストのシナリオに最適です。Standard ワークフローよりも高いスループットを提供し、コストが低くなる可能性もあります。
注記
Step Functions ワークフロータイプの詳細については、「Choosing workflow type in Step Functions」を参照してください。
これらのワークフロー内では、Step Functions が並列処理用に 2 つのマップ状態タイプを提供します。
- インラインマップ
-
親ワークフローの実行履歴内にある JSON 配列からの項目を処理します。インラインマップは最大 40 個の同時イテレーションをサポートしており、小規模なデータセットや、すべての処理を単一の実行内で行う必要がある場合に適しています。詳細については、「Using Map state in Inline mode」を参照してください。
- 分散マップ
-
256 KiB を超えるデータセット、または 40 個以上の同時イテレーションを必要とするデータセットでイテレーションを行うことにより、大規模な並列ワークロードの処理を可能にします。最大 10,000 件の並列子ワークフローの実行をサポートする分散マップは、Amazon S3 に保存されている半構造化データ (JSON ファイルや CSV ファイルなど) の処理に優れているため、バッチ処理や ETL 操作に最適です。詳細については、「Using Map state in Distributed mode」を参照してください。
Step Functions は、これらのワークフロータイプとマップ状態を組み合わせることによって、小規模な操作から大規模なデータ処理パイプラインにおよぶ複雑なサーバーレスアプリケーションをオーケストレーションするための、柔軟かつ強力なツールセットを実現します。
Step Functions での Lambda の使用を開始するには、「Orchestrating Lambda functions with Step Functions」を参照してください。
EventBridge と EventBridge スケジューラを使用したイベントの管理
Amazon EventBridge は、イベント駆動型アーキテクチャの構築に役立つイベントバスサービスで、AWS サービス、統合アプリケーション、および Software as a Service (SaaS) アプリケーション間でイベントをルーティングします。EventBridge スケジューラは、1 つの中央サービスからタスクを作成、実行、管理できるようにするサーバーレススケジューラで、cron 式や rate 式を使用してスケジュールに基づく Lambda 関数の呼び出しを行ったり、1 回限りの呼び出しを設定したりできます。
Amazon EventBridge と EventBridge スケジューラは、Lambda を使用したイベント駆動型アーキテクチャの構築に役立ちます。EventBridge は AWS サービス、統合アプリケーション、SaaS アプリケーション間でイベントをルーティングし、EventBridge スケジューラは Lambda 関数を反復的または単発で呼び出すための特定のスケジュール作成機能を提供します。
これらのサービスは、Lambda 関数を使用するための主要機能をいくつか提供します。
-
EventBridge を使用して、イベントのマッチングと Lambda 関数へのルーティングを行うルールを作成
-
EventBridge スケジューラを使用して、cron 式と rate 式を用いた反復的な関数呼び出しを設定
-
特定の日付と時間での 1 回限りの関数呼び出しを設定
-
スケジュールされた呼び出しに対する柔軟な時間枠や再試行ポリシーを定義
詳細については、「スケジュールに従って Lambda 関数を呼び出す」を参照してください。