はじめに
前回、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も問題なく指定可能です。
まとめ
以上、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ネタで話します)
では、今回はこの辺で。