以下の内容はhttps://makky12.hatenablog.com/entry/2026/03/09/201658より取得しました。


【AWS CDK】Lambda Durable Functionsをトリガ起動で呼び出す

はじめに

前回、AWS CDKでLambda Durable Functionsを作成する方法を紹介しました。

今回はその続きで、前回の最後に記載した「Lambda Durable Functionsをトリガ起動で呼び出す」方法を紹介します。

なお本記事では、Lambdaのトリガ元としてメジャーなAPI Gatewayを例に説明します。

参考サイト

従来の定義ではNG

通常、AWS CDKでAPI GatewayをトリガにLambdaを呼び出すには、下記のようなコードを記載します。(import文やpropsは省略)

// Lambda定義
const sampleFunc = new NodejsFunction(this, 'SampleFunction', {
   ...(略)
})  
  
// API Gateway定義
const restApi = new RestApi(this, `RestApi`, {
   ...(略)
});
  
// メソッド&それをトリガに起動するLambdaを指定  
const sampleResource = restApi.root.addResource('sample');
sampleResource.addMethod('POST', new LambdaIntegration(sampleFunc));  

しかし、Lambda Durable Functionsの場合、上記の定義ではエラーとなり、デプロイできません。

これは前回関係した「修飾ARN」「非修飾ARN」が関係しており、Lambda Durable Functionsは修飾ARN(末尾にバージョン番号やエイリアスなどが付いたARN)を指定しないといけないのですが、上記定義だと非修飾ARN(末尾にバージョン番号やエイリアスなどが付かないARN)で指定してしまうため、エラーとなってしまいます。

実際、エラーメッセージも「You cannot invoke a durable function using an unqualified ARN(=非修飾ARNではDurable Functionを実行できません)」となります。

Aliasを使う

ではどうやるかというと、CDKでエイリアスを作成すればOKです。
一例として、下記のコードでエイリアスを作成できます。

// Lambda Durable Functions定義(詳細は前回を参照)
const sampleFunc = new NodejsFunction(this, 'SampleFunction', {
   ...(略)
})  
  
// エイリアスを追加
const sampleAlias = sampleFunc .addAlias("latest");  

そしてAPI Gateway側で LambdaIntegration に指定する引数に、Lambda関数ではなくエイリアスを指定すればOKです。

// API Gatewayのメソッド&それをトリガに起動するLambdaにエイリアスを指定
sampleResource.addMethod('POST', new LambdaIntegration(sampleAlias));

今度はちゃんとデプロイできますし、もちろんLambda Durable FunctionもRest API経由で正しく実行できます。

ちなみに LambdaIntegration の第一引数の型は Function ではなく IFunction なので、Lambda関数ではないAliasも問題なく指定可能です。

API Gateway以外のトリガは?

S3やDynamoDBなど、API Gateway以外のトリガ元ですが、これも同様にAliasを使用すればOKです。

これらをトリガ元にしてLambda Durable Functionsを起動する場合、最終的に下記コンストラクタを使用すると思います。

  • aws-s3-notifications.LambdaDestination()
  • aws-events-targets.LambdaFunction()

これらコンストラクタも、第一引数に指定するのは IFunction なので、Aliasも問題なく指定可能です。

またAliasは addFunctionUrl() メソッドを持っているので、関数URLも問題なく指定可能です。

参考:class Alias (construct)

まとめ

以上、Lambda Durable Functionsをトリガ起動で呼び出す方法でした。

通常のLambda同様、Lambda Durable Functionsをトリガ起動で呼び出すことも今回記載した方法で可能なので、もし「You cannot invoke a durable function using an unqualified ARN」エラーで困っていた方は、ぜひ参考にしていただければと思います。

宣伝

3/18(水)19時から、JAWS-UG 名古屋で「全員LT登壇会 No Audience, Only Builders」というイベントが開催されます。

まだまだ参加者募集中のようですので、よろしければぜひご参加ください(私もあるCDKネタで話します)

イベントページ

では、今回はこの辺で。




以上の内容はhttps://makky12.hatenablog.com/entry/2026/03/09/201658より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14