2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

node(ts)でlambdaを非同期で起動

Posted at

はじめに

@aws-sdk/client-lambdaを使った具体例があまり見つからなかったので、自分の再利用時用に簡単な例をという感じでの記事です。

※ローカル実行したサンプルです。

環境

  • node:v16 (ts)
  • @aws-sdk/client-lambda
    • LambdaClient
    • InvokeCommand
    • InvokeCommandInput

yarn add @aws-sdk/client-lambda

実行権限 (未検証)

※ローカルで試したので検証していないですが、AWS上で実行する場合は、実行元に下記のようなロールが必要なはず。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:ap-northeast-1:xxxxxx:function:LambdaFunction"
    }
  ]
}

実装

import {
  LambdaClient,
  InvokeCommand,
  InvokeCommandInput
} from '@aws-sdk/client-lambda'

async invoke(bucketName:string, key:string) {
  
  const lambdaClient = new LambdaClient({
    region: "ap-northeast-1",
  });

  // s3のObjectCreateで発火するリクエストの一部を擬似的に作って試した。
  const payload =
    JSON.stringify({
      Records: [
        {
          s3: {
            bucket: {
              // name: "test-bucket"
              name: bucketName
            },
            object: {
              // key: "images/upload/sample1.webp"
              key
            }
          },
        }
     ]
    })
   const params: InvokeCommandInput = {
      // xxxxxx = AWSアカウント名
      // LambdaFunction = 起動するlambda名(lambdaのarn指定で実行可能)
      FunctionName: "arn:aws:lambda:ap-northeast-1:xxxxxx:function:LambdaFunction",
      InvocationType: "Event", // 非同期
      Payload: Buffer.from(payload)
    };
    const command = new InvokeCommand(params);
    await lambdaClient.send(command)
}

所感

実装できるとあっさり。
最初の例がInvokeCommandじゃなく、よく読まずに使おうとしてリクエストが想定と違うなーで少し詰まったくらい。

aws-sdkのv3系、実行方法はあるけどパラメータを指定した実行例があまり見つからないので、個人的に例が欲しいところです。
(それくらい仕様書 or プログラム見てパッとやれよって話なのかもですけど、、、)

参考

https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-lambda/
https://github.com/aws/aws-sdk-js-v3/issues/2252
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html
https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-lambda/src/models/models_0.ts#L3913

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?