我尝试使用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角色等安全相关的内容,以便在实际工作中使用。我打算研究各种资料。