

# Lambda のワークフローとイベントの管理
<a name="workflow-event-management"></a>

Lambda を使用してサーバーレスアプリケーションを構築するときは、関数の実行をオーケストレーションし、イベントを処理するための手段が必要になることがよくあります。AWS は、Lambda 関数を調整するためのアプローチをいくつか提供しています。
+ Lambda 内のコードファーストワークフローオーケストレーションのための [Lambda Durable Functions](durable-functions.md)
+ 複数のサービス間のビジュアルワークフローオーケストレーション用の AWS Step Functions
+ イベント駆動型アーキテクチャとスケジューリング用の Amazon EventBridge スケジューラと Amazon EventBridge

これらのアプローチを一緒に統合することもできます。例えば、特定イベントの発生時に Durable Functions または Step Functions のワークフローをトリガーするための EventBridge スケジューラを使用したり、定義された実行ポイントで EventBridge スケジューラにイベントを発行するためのワークフローを設定したりすることができます。本セクションの以下のトピックでは、これらのオーケストレーションサービスの使用方法をより詳しく説明します。

## Durable Functions を使用したコードファーストオーケストレーション
<a name="durable-functions-orchestration"></a>

Lambda Durable Functions は、ワークフローオーケストレーションにコードファーストのアプローチを提供し、Lambda 関数内でステートフルで長時間実行されるワークフローを直接構築できます。外部オーケストレーションサービスとは異なり、Durable Functions はワークフローロジックをコード内に保持するため、ビジネスロジックと並行してバージョン管理、テスト、保守が容易になります。

Durable Functions は、以下が必要な場合に最適です。
+ **標準プログラミング言語の使用:** JavaScript や Python などの使い慣れたプログラミング言語を使用してワークフローを定義する
+ **長時間実行されるプロセス:** 標準の Lambda 関数の 15 分の制限をはるかに超える、最大 1 年間実行できるワークフローを実行する
+ **開発の簡素化:** ワークフローロジックとビジネスロジックを同じコードベースに保持し、メンテナンスとテストを容易にする
+ **コスト効率の高い待機:** 待機状態中にコンピューティングリソースを消費せずに実行を一時停止する
+ **組み込み状態管理:** 外部ストレージ設定のない自動チェックポイントと状態の永続性

耐久性のある関数と Step Functions の選択については、「[Durable functions or Step Functions](durable-step-functions.md)」を参照してください。

耐久性のある関数の詳細については、「[Lambda の耐久性のある関数](durable-functions.md)」を参照してください。

## Step Functions を使用したワークフローのオーケストレーション
<a name="orchestrating-workflows"></a>

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](https://docs.aws.amazon.com/step-functions/latest/dg/choosing-workflow-type.html)」を参照してください。

これらのワークフロー内では、Step Functions が並列処理用に 2 つのマップ状態タイプを提供します。

**インラインマップ**  
親ワークフローの実行履歴内にある JSON 配列からの項目を処理します。インラインマップは最大 40 個の同時イテレーションをサポートしており、小規模なデータセットや、すべての処理を単一の実行内で行う必要がある場合に適しています。詳細については、「[Using Map state in Inline mode](https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-map-state.html)」を参照してください。

**分散マップ**  
256 KiB を超えるデータセット、または 40 個以上の同時イテレーションを必要とするデータセットでイテレーションを行うことにより、大規模な並列ワークロードの処理を可能にします。最大 10,000 件の並列子ワークフローの実行をサポートする分散マップは、Amazon S3 に保存されている半構造化データ (JSON ファイルや CSV ファイルなど) の処理に優れているため、バッチ処理や ETL 操作に最適です。詳細については、「[Using Map state in Distributed mode](https://docs.aws.amazon.com/step-functions/latest/dg/state-map-distributed.html)」を参照してください。

Step Functions は、これらのワークフロータイプとマップ状態を組み合わせることによって、小規模な操作から大規模なデータ処理パイプラインにおよぶ複雑なサーバーレスアプリケーションをオーケストレーションするための、柔軟かつ強力なツールセットを実現します。

Step Functions での Lambda の使用を開始するには、「[Orchestrating Lambda functions with Step Functions](with-step-functions.md)」を参照してください。

## EventBridge と EventBridge スケジューラを使用したイベントの管理
<a name="managing-events"></a>

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 関数を呼び出す](with-eventbridge-scheduler.md)」を参照してください。