CDKによるLambdaへのコードデプロイについて

概要

CDKを使ってLambdaにコードをデプロイする際のメモ(nodejs版)

説明

InlineCode版

  • ちょっとしたプログラムを手軽にセットする際に便利
  • 4096文字の制限があるので大作には向かない
  • 第一引数に流し込んだ文字列をindex.jsにしてくれる
  • nodejs12.xでは使えない(投稿時の確認では「Inline source not allowed for nodejs12.x」エラーが出る)
import lambda = require('@aws-cdk/aws-lambda');
import fs = require('fs');

new lambda.Function(this, "inlineExample", {
    ...
    code: new lambda.InlineCode(
        fs.readFileSync(`${__dirname}/inline-test/example-inline.js`, {encoding: "utf-8"})),
    ...
});

AssetCode版

  • 指定したパス以下をzip圧縮してアップロードしてくれる
  • 対象のパスにindex.jsを入れておく必要あり
    • index.jsを入れ忘れるとハンドラを定義していても「Runtime.HandlerNotFound: index.handler is undefined or not exported」になる(※index.jsである必要は無いが、ハンドラが別ファイルにある場合はhandlerを正しく設定してあげる必要あり、例えば「lambda/hello.js」に「exports.handler」の記述がある場合はhandlerに「lambda/hello.handler」をセットする)
import lambda = require('@aws-cdk/aws-lambda');

new lambda.Function(this, "assetExample", {
    ...
    code: new lambda.AssetCode(`${__dirname}/asset-test`),
    ...
});