Amazon Web Services ブログ
AWS Lambda durable functionsを使用した耐障害性アプリケーションの構築
お知らせ
2026年7月からオンラインでサーバーレスに関するワークショップを4件開催します。ぜひ、ご参加ください。
- 7/7 10:00〜12:00 Kiroによるサーバーレス開発
- 7/9 10:00〜12:00 イベント駆動アーキテクチャ・アプリケーションの構築
- 7/14 10:00〜12:00 AWS Lambda durable functions によるコード型ワークフロー
- 7/16 10:00〜12:00 AWS Lambda マネージドインスタンス
本記事は2026年2月6日に公開された Building fault-tolerant applications with AWS Lambda durable functions を翻訳したものです。翻訳はSolutions Architectの加藤 諒が担当しました。
ビジネスアプリケーションでは、顧客オンボーディング、決済処理、大規模言語モデル推論のオーケストレーションなど、確実に実行する必要がある、あるいは長期間の待機が必要な、複数のステップを連携させることがあります。これらは、一時的な中断やシステム障害があってもプロセスを完了する必要があります。そのため、開発者はビジネスロジックではなく進捗の追跡、障害の処理、外部イベントの待機時のリソース管理のメカニズムの実装といった付加価値を生まない作業に時間を費やしています。
re:Invent 2025で、Amazon Web Services (AWS)はAWS Lambda durable functionsを発表しました。これは、使い慣れたプログラミング言語を使用して耐障害性のある複数のステップが必要なアプリケーションとAIワークフローを構築するための新しい機能です。基本的に、durable functionsは通常のLambda関数であるため、Lambdaの開発および運用プロセスは引き続き適用されます。ただし、Lambda関数を作成する際に、durable executionを有効にすることで、進捗のチェックポイント保存、障害からの自動回復が可能になります。また、human-in-the-loopプロセスなどの長時間実行タスクを待つ間、最大1年間実行を一時停止できます。
標準のLambda関数を使用する場合、コードは単一の呼び出しで開始から終了まで実行されます。実行中のいずれかの時点で障害が発生した場合、呼び出し元のイベントソースによって関数全体を再試行する必要があります。実行間で保持する必要がある状態は、明示的に保存および取得する必要があります。これは通常、Amazon DynamoDBやAmazon Simple Storage Service (Amazon S3)などの外部ストレージサービスを使用して行われます。さらに、同じイベントの重複(同時)呼び出しを防ぎ、イベントの処理を継続しながら安全に更新をデプロイする対策を講じる必要があります。
対照的に、Lambda durable functionsでは、開発者はイベントハンドラーで「Steps」や「Waits」などのdurable operationsを使用して、進捗をチェックポイントし、障害を処理し、Lambda関数のコンピュート料金を発生させることなく待機期間中に実行を一時停止します。これらのdurable operationsとそれらから任意で返される状態は、durable execution backendで管理され、自動的に永続化されます。実行中に障害が発生した場合、または一時停止後に関数が実行を再開した場合、Lambdaは関数を再度呼び出し、イベントハンドラーを最初から実行することで以前の状態を復元(リプレイ)しますが、完了したdurable operationsはスキップします。開発者向けがこのチェックポイント/リプレイの仕組みを簡単に利用できるようにするため、Lambda durable execution SDKを使用してイベントハンドラーをラップまたはアノテーションできます。具体的には既存のLambdaコンテキストにcontext.step()やcontext.wait()などのいくつかの新しいメソッドが追加されます。さらに、context.waitForCallback()などのメソッドを使用して、”human-in-the-loop”シナリオなどの外部ジョブや非同期プロセスを待機できます。SendDurableExecutionCallbackSuccessまたはSendDurableExecutionCallbackFailureレスポンスがLambda APIに送信されるまで実行は一時停止されます。
AWS Serverless Application Model (AWS SAM)で、AWS Quick Start Templateを使用して新しいdurable functionを作成します。sam initコマンドで実行できます。
Lambda durable functionsは、AWS Cloud Development Kit (AWS CDK)、AWS Command Line Interface (AWS CLI)、AWS CloudFormation、およびTerraformなどの他のinfrastructure as code (IaC)フレームワークでもサポートされています。
ユーザーオンボーディングを実行する以下の関数を考えてみましょう。まず、ユーザーの入力データに基づいてユーザープロファイルを作成し、次に検証のためにメールを送信し、ユーザーがメールアドレスを確認するか、24時間のタイムアウトに達するまで待機します。最後に、確認を送信します。
durable functionsには、組み込みでステップ用のカスタマイズ可能なエラー処理があります。たとえば、プロファイルが正常に作成され検証されたが、確認の送信時に一時的なエラーが発生した場合、そのステップが再試行されます。再試行では、プロファイル作成やコールバックなど、以前に完了したチェックポイントはスキップされます。確認送信ステップ内のコードのみが再度実行されます。
次に、durable functionを含めるためにAWS SAMテンプレートを更新します。関数にDurableConfig設定を含めることで、Lambda durable functionを作成します。現在、後からLambda関数にdurable configurationを追加することはできないことに注意してください。ExecutionTimeoutは、暴走やデッドロックといったアプリケーションバグから保護するために、durable executionがタイムアウトする時間を定義します。この設定は、単一の呼び出しが実行できる時間を定義するinvocation timeoutとは別です。単一関数呼び出しの最大invocation timeoutは15分で変わりません。Lambda durable functionsでは、SDKでの待機機能や自動再試行を使用する場合など、通常、1回の’durable executionにつき複数の呼び出しが発生します。非同期呼び出しを使用する場合、ExecutionTimeoutを最大1年間設定できます。
RetentionPeriodInDaysは、実行完了後にdurable executionの実行データが利用可能な期間を定義します。
また、関数に必要な権限を含める必要があります。たとえば、マネージドポリシーAWSLambdaBasicDurableExecutionRoleを設定します。このポリシーはセキュリティを向上させるためにチェックポイントとログの作成/取得のための最小限のAWS Identity and Access Management (IAM)アクションのみを許可します。したがって、他の(durable)関数を呼び出したり、コールバックを管理する場合はこれでは権限が不足します。詳細については、ドキュメントを参照してください。
関数をデプロイする前に、AWS SAM local invokeを使用してローカルでテストできます。

AWS SAMは関数をローカルで呼び出し、context.waitForCallback()に到達するまでイベントハンドラーを実行します。コールバックを完了するために、AWS SAMはコールバックを必要とするdurable functionsをローカル実行した際に対話的にコールバックの返却ができます。この例では、コールバックを完了するためにSuccessレスポンスを送信します。レスポンスに関連データを含めることもできます。画面上のガイドを使用して直接レスポンスを送信するか、別のプロセスから別のAWS SAM CLIコマンドを使用してレスポンスを送信できます。
sam local callback succeed <your-callback-id> --result '<your data>'

AWS SAMを使用してdurable functionsの実行履歴を取得できます。これには、以下のサンプルコードに示すように、ステップ、コールバック、待機時間に関する詳細が含まれます。
sam local execution history <execution-arn>

必要にに応じて、代わりにコールバックにFailureレスポンスを送信し、コード内でそれらのエラーを処理できます。
sam local callback fail <your-callback-id> --error-data '<your data>'
たとえば、後続のステップで補償ロジックを定義している場合にそれの動作を試すことができます。
関数が意図したとおりに動作することを確認できたので、sam deployコマンドを使用してAWSにデプロイします。
Lambda durable functionの呼び出しには、エイリアスやバージョンなどの修飾されたAmazon Resource Name (ARN)が必要です。速度優先のプロトタイピングやローカルテスト以外では、$LATEST修飾子を使用しないことをお勧めします。明示的なバージョンを使用することで、リプレイが実行開始時と同じコードで常に実行されることが保証されます。これは、決定論的実行を確保し、実行中に関数コードを更新する際の不整合を防ぐためです。
お好みのパッケージマネージャーを使用して、durable execution SDKを関数コードにバンドルすることをお勧めします。SDKは高速に進歩しているため、新機能が利用可能になったときに依存関係を更新できます。
アプリケーションの構築に使用できる、Lambda durable functions SDKのその他のdurable operationsがあります:
waitForCondition():条件が満たされるまで関数の実行を一時停止します。たとえば、APIでポーリングされるジョブのステータスなどです。これを機能させるには、waitStrategyとステータスをポーリングするチェック関数を提供します。parallel():同じ関数内で複数のdurable operationsを並列実行し、最大同時ブランチ数や望ましい障害動作などの設定可能なオプションを提供します。これにより、同時非同期アクションの耐久性とチェックポイント管理が合理化されます。map():提供されたマッピング関数に基づいて、配列の各項目に対してdurable operationとチェックポイントを作成します。項目は同時に処理されます。invoke():別のLambda関数を呼び出し、その結果を待機します。SDKはチェックポイントを作成し、ターゲット関数を呼び出し、呼び出しが完了すると関数を再開します。これにより、関数合成とワークフロー分解が可能になります。
詳細については、開発者ガイドを参照してください。
Lambdaコンピュート料金は、リプレイを含むすべての呼び出しに適用されます。待機操作を使用する場合、関数は実行を一時停止し、Lambda関数の実行が再開されるまで実行時間料金は発生しません。また、durable operations、書き込まれたデータ、データ保持に対しても課金されます。Lambda durable functionsの料金について詳しく知るには、Lambda料金ページを参照してください。
最新のリージョン可用性については、AWS Capabilities by Regionページをご覧ください。
AWS Lambda durable functionsは、使い慣れたプログラミングパターンを使用して簡単に耐障害性のある長時間実行アプリケーションの構築するために、Lambdaのプログラミングモデルを拡張します。Lambda durable functionsを使用して、チェックポイントとエラー回復を自動的に処理する組み込みメソッドを使い、お好みのプログラミング言語でマルチステップワークフローを記述できます。これによりシンプルなアーキテクチャを維持したまま、ビジネスロジックに集中できます。また、課金は実際に処理を行っている時間のみなのでコストを最適化できます。
Lambda API、AWS Management Console、AWS CLI、AWS CloudFormation、AWS SAM、AWS SDK、およびAWS CDKを使用して、Python、Node.jsまたはJavaベースのLambda関数用のdurable functionsを構築できます。
開始するには、Lambda Developer Guideをご覧いただくか、re:Invent breakout sessionをご視聴ください。