我尝试使用AWS CDK来部署Lambda层

一开始

我在自己的研究过程中使用了AWS CDK,但我发现很少有关于部署Lambda层的示例,所以我决定自己尝试并不断摸索。

开发环境

    • 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 层。

// 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]
  }
);

就以上了。
只用这么简单的东西就能做出定义,真是太厉害了呢。

重点是后端的目录结构。
Lambda层需要按照nodejs/node_modules的目录结构进行设置,在cdk-stack.ts中,我们需要指定包含nodejs目录及其子目录的代码。

尝试将lambda函数应用于其中

我们将刚刚定义的layer应用于lambda。

// 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层,然后使用cdk deploy命令进行部署即可完成。

最后

果然,用编程的感觉来构建无服务器架构比起用YAML来编写更直观和好。将来,我希望能正确配置APIGateway的资源策略、IAM角色等安全相关的内容,以便在实际工作中使用。我打算研究各种资料。

广告
将在 10 秒后关闭
bannerAds