前回は、AWS CDK で hello のデータを DynamoDB に接続しました。

今回は、AWS Lambda のデプロイを設定します。

AWS Lambda をデプロイするには、依存関係を一つにまとめる必要があります。

また、AWS CDK では TypeScript で書いていますが、Node.js は JavaScript なので TypeScript をコンパイルする必要があります。

この問題を解決するために、aws_lambda_nodejs モジュールを使います。

ドキュメントによると、関数を実行するために必要なコードと依存関係を含む Lambda パッケージが作成されるとのことです。

また、このモジュールは、esbuildを使用します。

esbuild とは、webpack のように JavaScript を一つにまとめるバンドラーです。

まずは、ターミナルでプロジェクトのディレクトリに移動し、npm install --save-dev esbuild@0 を実行します。

インストールが完了後、lambda-node フォルダを作成します。

lambda-node フォルダ内に、hello.ts ファイルを作成します。

body に『Hello, Lambda Node!』を入れました。

async function handler(event: any, content: any) {
  console.log("request:", JSON.stringify(event, undefined, 2))
  return {
    statusCode: 200,
    body: "Hello, Lambda Node!",
  }
}

lib フォルダの cdk-stack.ts フォルダを開きます。

aws-cdk-lib から aws_lambda_nodejs をインポートします。

import {
  Stack,
  StackProps,
  aws_lambda,
  aws_apigateway,
  aws_lambda_nodejs,
} from "aws-cdk-lib"

hlello と同じように、CdkStack クラス内に helloLambdaNode を書いていきます。

aws_lambda_nodejs の NodejsFunction を使います。

また、entry にはパスを書きます

const helloLambdaNode = new aws_lambda_nodejs.NodejsFunction(
  this,
  "helloLambdaNodeHandler",
  {
    entry: "lambda-node/hello.ts",
    handler: "handler",
  }
)

ターミナルで、 cdk synth を実行します。

正常に実行できたようです。

image2

ターミナルで、 cdk deployを実行します。

デプロイを実行していいか聞かれるので、『y』を入力し、エンターキーを押します。

image3

デプロイが完了しました。

AWS Lambdaにアクセスします。

helloLambdaNodeHandler が作成されていました。

image4

image5

自由に外部モジュールをインポートして利用することができるようになりました。

ブログ一覧