AWS CDKでLambda Durable Functionsがサポートされたので早速試してみた #AWSreInvent

AWS CDKでLambda Durable Functionsがサポートされたので早速試してみた #AWSreInvent

2025.12.07

リテールアプリ共創部のるおんです。re:Invent 2025にてリリースが発表された Lambda Durable FunctionsAWS CDK v2.232.0 にて、サポートされました。早速試してみたので、その実装方法を共有したいと思います。

https://github.com/aws/aws-cdk/releases/tag/v2.232.0

Lambda Durable Functionsとは

Lambda Durable Functionsは、re:Invent 2025で発表された新機能で、 最大1年間実行可能な長時間ワークフロー を構築できるAWS Lambdaの新しいオプションです。

https://docs.aws.amazon.com/lambda/latest/dg/durable-functions.html

AWS Lambda Durable Functionsについての詳しい解説は、以下のブログを参照してください。

https://dev.classmethod.jp/articles/aws-lambda-durable-functions-awsreinvent/

やること

今回は以下の構成で、公式ドキュメントにあるサンプルコードをデプロイしてみます。

  1. CDKでDurable Functions対応のLambdaを作成
  2. Durable Execution SDKを使ったハンドラーの実装
  3. デプロイして動作確認

プロジェクト構成

以下のようなディレクトリ構成で進めます。

lambda-durable-function-cdk-test/
├── infra/                    # CDKプロジェクト
│   ├── lib/
│   │   └── lambda-durable-function-cdk-test-stack.ts
│   └── package.json
└── server/                   # Lambdaハンドラー
    ├── src/
    │   └── index.ts
    └── package.json

実装してみる

1. CDKのバージョンを更新

Durable FunctionsはCDK v2.232.0にて追加されたため、package.jsonでバージョンを指定します。

infra/package.json
"dependencies": {
+ "aws-cdk-lib": "2.232.0",
  "constructs": "^10.0.0"
}

2. CDKスタックの実装

Durable Functionsを有効にするには、Lambda関数にdurableConfigプロパティを設定します。

infra/lib/lambda-durable-function-cdk-test-stack.ts
import { Duration } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as path from 'path';

export class LambdaDurableFunctionCdkTestStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new lambda.Function(this, 'LambdaDurableFunction', {
      runtime: lambda.Runtime.NODEJS_24_X,
      handler: 'index.handler',
      code: lambda.Code.fromAsset(path.join(__dirname, '../../server/dist')),
+     durableConfig: {
+       executionTimeout: Duration.hours(1),
+       retentionPeriod: Duration.days(30),
+     },
    });
  }
}

ポイントは以下の通りです:

  • runtime: Durable Functionsは現在(2025年12月6日)、NODEJS_24_Xランタイムで利用可能です
  • durableConfig.executionTimeout: Durable実行のタイムアウト時間(最大1年)
  • durableConfig.retentionPeriod: 実行履歴の保持期間(1〜90日、デフォルト14日)

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.DurableConfig.html

3. リージョンの設定

Lambda Durable Functionsは現在(2025年12月6日時点)、オハイオ(us-east-2)リージョンでのみ利用可能 です。そのため、CDKのエントリーポイントでリージョンを指定します。

infra/bin/lambda-durable-function-cdk-test.ts
#!/usr/bin/env node
import * as cdk from 'aws-cdk-lib/core';
import { LambdaDurableFunctionCdkTestStack } from '../lib/lambda-durable-function-cdk-test-stack';

const app = new cdk.App();
new LambdaDurableFunctionCdkTestStack(app, 'LambdaDurableFunctionCdkTestStack', {
+   // Lambda Durable Functions は現在オハイオ(us-east-2)でのみ利用可能
+   env: { region: 'us-east-2' },
+ });

4. Lambdaハンドラーの実装

Lambdaハンドラーでは、AWS公式のDurable Execution SDKを使用します。

cd server
npm install @aws/durable-execution-sdk-js
server/package.json
{
  "name": "lambda-durable-function-server",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
+   "@aws/durable-execution-sdk-js": "^1.0.0"
  },
  "devDependencies": {
    "@types/node": "^22.0.0",
    "typescript": "~5.7.0"
  }
}

Lambda関数の中身を実装します。
公式ドキュメントにあるサンプルコードをそのまま貼り付けます。

server/src/index.ts
import {
  DurableContext,
  withDurableExecution,
} from "@aws/durable-execution-sdk-js";

export const handler = withDurableExecution(
  async (event, context) => {
    const orderId = event.orderId;

    // ステップ1: 注文のバリデーション
    const validationResult = await context.step(async (stepContext) => {
      stepContext.logger.info(`Validating order ${orderId}`);
      return { orderId, status: "validated" };
    });

    // ステップ2: 決済処理
    const paymentResult = await context.step(async (stepContext) => {
      stepContext.logger.info(`Processing payment for order ${orderId}`);
      return { orderId, status: "paid", amount: 99.99 };
    });

    // 外部確認をシミュレートするために10秒待機
    // この間、コンピュート料金は発生しない
    await context.wait({ seconds: 10 });

    // ステップ3: 注文の確定
    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],
    };
  }
);

SDKのwithDurableExecutionでハンドラーをラップし、context.step()context.wait()などのDurable操作を使用します。

詳細は公式ドキュメントを参照してください。
https://docs.aws.amazon.com/lambda/latest/dg/durable-execution-sdk.html

5. デプロイ・動作確認

まずは、server/src/index.tsをビルドします。

cd server
npm run build

次に、CDKプロジェクトからデプロイします。
オハイオリージョンでCDKを使うのが初めての場合は、まずBootstrapを実行してください。

cd infra
cdk bootstrap --region us-east-2 # オハイオリージョンでCDKを使うのが初めての場合、Bootstrapを実行
cdk deploy

無事Lambda関数が作成されました。
スクリーンショット 2025-12-07 3.27.38

Lambda関数の詳細を確認すると、Durable Functionsが有効になっていることが確認でき、実際に実行すると問題なくDurable Functionsの機能が利用できることが確認できました!

スクリーンショット 2025-12-07 3.28.54

おわりに

AWS CDK v2.232.0でLambda Durable Functionsがサポートされ、長時間実行ワークフローをCDKで簡単に構築できるようになりました。IaCで管理したい方にとっては嬉しいアップデートではないでしょうか。

durableConfigを設定するだけでDurable Functionsが有効になり、Durable Execution SDKを使うことで、チェックポイント管理やリトライ処理を意識せずに堅牢なワークフローを実装できます。

re:Invent 2025でDurable Functionsが発表されてからわずか数日でCDKのL2対応がリリースされたのは流石ですね。AWSさんのLambda Durable Functionsに対する本気度が伝わってきます

以上、ラスベガスからお送りしました!参考になれば幸いです。

参考

https://github.com/aws/aws-cdk/releases/tag/v2.232.0

https://docs.aws.amazon.com/lambda/latest/dg/durable-functions.html

https://docs.aws.amazon.com/lambda/latest/dg/durable-execution-sdk.html

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.DurableConfig.html

https://github.com/aws/aws-durable-execution-sdk-js

この記事をシェアする

FacebookHatena blogX

関連記事