Lambda Durable Functionsの使い所

はじめに

ウェブエンジニアの青木です。

先日開催されたAmazon Web Services(以下AWS)のカンファレンス「AWS Summit Japan 2026」に初参加してきました。これまで参加したカンファレンスの中で最も大規模でセッションや展示数が多く、とても楽しめました。
その中で、『サーバーレスで「待つ」を設計する - AWS Lambda Durable Functionsのリプレイモデル』というセッションを聴講しました。紹介されたLambda Durable Functionsが興味深かったため、記事にまとめます。

紹介記事は公式ブログを含めて既にいくつか存在するため、本記事ではどのようなケースで活用できそうかを考察します。

Lambda Durable Functionsとは

Lambda Durable Functionsは、Lambda関数を最大1年間待機できるサービスです。 2025年12月2日にリリースされたサービスであり、執筆時点(2026年7月現在)では一部利用できないリージョンもありますが、多くのリージョンで利用できます。

Lambda Durable Functionsで何ができるか

Durable Functionsの内部は通常のLambda関数のため、Lambdaで可能な処理であればすべて実行できます。 通常のLambdaとは異なり、チェックポイント/リプレイメカニズムで進行状況を追跡し、長時間の実行をサポートします。 コードの実行が再開されると最初から動作しますが、完了済みのチェックポイントはスキップします。 このように実行を常時待機するのではなく、トリガーに応じて実行するため、長時間の待機が可能で、その間の料金も発生しません。

import {
  withDurableExecution,
} from "@aws/durable-execution-sdk-js";

export const handler = withDurableExecution(
  async (event, context) => {
    const orderId = event.orderId;
    
    // Step 1: Validate order
    const validationResult = await context.step(async (stepContext) => {
      stepContext.logger.info(`Validating order ${orderId}`);
      return { orderId, status: "validated" };
    });
    
    // Step 2: Process payment
    const paymentResult = await context.step(async (stepContext) => {
      stepContext.logger.info(`Processing payment for order ${orderId}`);
      return { orderId, status: "paid", amount: 99.99 };
    });
    
    // Wait for 10 seconds to simulate external confirmation
    await context.wait({ seconds: 10 });
    
    // Step 3: Confirm order
    const confirmationResult = await context.step(async (stepContext) => {
      stepContext.logger.info(`Confirming order ${orderId}`);
      return { orderId, status: "confirmed" };
    });
        
    return {
      orderId: orderId,
      status: "completed",
      steps: [validationResult, paymentResult, confirmationResult]
    };
  }
);

引用: https://docs.aws.amazon.com/lambda/latest/dg/durable-getting-started.html#getting-started-create-durable-function

上記は公式ドキュメントから引用したNode.jsのコードです。 最初にバリデーションを実行し、注文処理を進めます。その後10秒間待機し、最終的に注文を確定する処理となっています。 コード内ではcontext.step()でチェックポイントを付与し、context.wait()で待機を行っています。

context.step()でチェックポイントを付与することでLambdaがタイムアウトしたりクラッシュしてもチェックポイントで再開でき、決済処理が二重に走ることを防ぐことが可能となります。また、context.wait()で待機することで外部システム等の時間のかかる別プロセス実行の間、Lambdaの課金を発生させずに待機することができるようになります。

このようにLambda Durable Functionsを利用することで「障害発生時の復旧が容易になる」「長時間の待機も課金発生なしで行うことができる」などのメリットがあります。

利用する上での注意点

  • Node、Python、Javaのみで利用可能
  • コードを繰り返し実行するため、実行のタイミングで値が変わる現在時刻などを取得すると、結果が変わる恐れがある

ユースケース

公式ドキュメントでは以下のような場合に利用すべきと記載がありました。なお、該当箇所を日本語に翻訳して紹介します。

・短期間の分散処理の制御
障害発生時の自動ロールバック機能を備え、決済・在庫・配送など複数サービス間の連携を制御します。注文の検証から決済承認、在庫確保、配送完了までの一連の処理を確実に実行します。

・確実な決済フローの実現
障害が発生してもトランザクション状態を維持し、自動でリトライを行う堅牢な決済フローを構築できます。複数ステップの承認や不正チェック、決済事業者との連携を制御し、すべての処理履歴を確実に追跡します。

・信頼性の高いAIワークフローの構築
AIモデルの呼び出しの連鎖や、人の承認プロセスを組み込んだ複数ステップのワークフローを作成できます。長時間のタスクも障害発生時に確実な制御が可能です。一時停止後の自動再開に対応しており、料金は実際の実行時間分しか発生しません。

・複雑な注文処理の統合管理
在庫、決済、配送、通知などの各システムにまたがる注文処理を、高い堅牢性を持たせて統合管理します。部分的な障害の自動復旧や注文状態の維持に加え、リソースを消費せずに外部イベントを待機できます。

・長期間に及ぶ業務フローの自動化
従業員の入社手続きやローンの承認など、数日から数週間にわたる長期の業務フローを確実に構築できます。人の承認、システム連携、タスクの定期実行をまたいで状態を維持し、進捗や履歴を完全に可視化します。

引用: https://docs.aws.amazon.com/lambda/latest/dg/durable-functions.html#durable-functions-use-cases

また個人的な見解ですが、以下のいずれかの要件・特徴を持つプロジェクトでは採用の検討をおすすめします。

  • すでにLambdaを利用して待機処理を追加したい場合
  • 特定の動作や時間を待つ必要がある場合
  • サーバーレスな構成にしたい場合
  • 長期間待機する必要がある構成の場合
  • AWS以外のサービスを利用する場合
    • ※AWSでワークフローを構築するサービスとしてAWS Step Functionsがありますが、こちらは外部APIの呼び出しに工夫(HTTPタスクや専用のLambda関数)が必要となります。Durable Functionsの場合使い慣れたコードやSDKをそのまま利用できるため、外部連携が容易です。サービスの比較は次のセクションで行っています。

他サービスとの比較

AWSでワークフローや非同期処理を組む場合、AWS Step FunctionsやSQS、EventBridgeなどがありますが、以下のような違いがあります。

サービス 特徴 どんな時に使うか
Step Functions GUIによる可視化、大規模・複雑な制御、広範なAWS連携 システム全体の堅牢なオーケストレーション
Lambda Durable Functions 使い慣れた言語で記述可能、Lambda内で完結、簡易的 Lambdaの手軽さを活かした、小〜中規模のマルチステップ処理
SQS / EventBridge イベント駆動のキューイング、疎結合化 シンプルな非同期メッセージング

以下のドキュメントでは、Durable FunctionsとStep Functionsの詳細な違いを解説しています。
https://docs.aws.amazon.com/lambda/latest/dg/durable-step-functions.html

AWSには類似の機能を持つサービスが複数あるため、プロジェクトの特性や要件に応じて、最適なサービスを選定する必要があります。

おわりに

Lambdaは短時間の実行に利用するイメージでしたが、長時間の実行をサポートしていると知って驚きました。
Lambda Durable Functionsはサーバーレスでコストを抑えて構築できる魅力的なサービスです。ただし、活用シーンは限定されるため、要件を見極めて採用を検討していく必要があります。
記事内でも挙げたように有効なユースケースが複数考えられるため、適した場面があれば積極的に活用していこうと思います。