LoginSignup
3
2

More than 3 years have passed since last update.

AWS CDKを使ってlambda layerをデプロイしてみた

Last updated at Posted at 2020-09-21

はじめに

自己研鑽の一環でAWS CDKを使っているのですが、lambda layerをデプロイするようなサンプルがあまりないように感じたので、自分で試行錯誤しながらやってみました。

開発環境

  • aws-cdk:1.58.0
  • cdk使用言語:typescript

前提として

cdkを使えるような環境のセットアップが出来ている前提で記載していきます。
私は以下の記事を参考にさせていただきました。
https://dev.classmethod.jp/articles/aws-cdk-101-typescript/

ディレクトリ構成

本記事のディレクトリ構成は以下のようになっています。

├─backend
│   └─ src
│     ├─function
│     │  └─sample
│     └─layer
│      └─SharedLayer
│        └─nodejs
│         └─node_modules
└─cdk-stack
     ├─bin
     ├─lib
     └─test

定義してみる

さっそくですがlambda layerを定義していきます。

cdk-stack/lib/cdk-stack.ts
// lambdaとlambda layerを定義するためのライブラリ
import { AssetCode, Function, Runtime, LayerVersion } from '@aws-cdk/aws-lambda';

// lambdaLayerの定義
const nodeModulesLayer = new LayerVersion(this, 'NodeModulesLayer',
  {
    code: AssetCode.fromAsset('../backend/src/layer/SharedLayer'),
    compatibleRuntimes: [Runtime.NODEJS_12_X]
  }
);

以上です。
たったこれだけで定義が出来るのはすごいですね。

ポイントはbackendのディレクトリ構成です。
lambda layerはnodejs/node_modulesのディレクトリ構成にする必要があり、cdk-stack.tsではcodeにnodejs以下を含むディレクトリを指定しています。

lambdaに適用してみる

先ほど定義したlayerをlambdaに適用してみます。

cdk-stack/lib/cdk-stack.ts
// lambda関数の定義
const sampleLambda = new Function(this, `sample-lambda-function`, {
  code: new AssetCode('../backend/src/function/sample'),
  handler: 'index.handler',
  runtime: Runtime.NODEJS_12_X,
  layers: [nodeModulesLayer],
  functionName: 'sampleFunction'
});

上記のようにlayersのキーに配列で定義したlambda layerを記載してあげるだけでOKです。
あとはcdk deployコマンドでデプロイすれば完了です。

さいごに

やはりプログラミングをする感覚でサーバレスアーキテクチャを構築できるのはyamlで書くより直感的で良いですね。
今後は実務での利用を目指してAPIGatewayのリソースポリシーやIAMロールなどのセキュリティ周りを正しく設定できるように色々調べたいと思います。

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