3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

3
Posted at

はじめに

前回、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ネタで話します)

では、今回はこの辺で。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?