如何在serverless.ts的functions段正确设置Lambda层ARN
Serverless Framework TS配置文件绑定Lambda层类型报错修复
报错根因
触发TS编译错误是两个配置写法问题:
functions配置结构不符合类型定义:functions对象的每个一级键对应一个Lambda函数的逻辑名,键对应的值才是函数的具体配置项。原写法把name、layers直接挂在functions根下,TS会将整个functions对象识别为单个函数配置做校验,直接触发类型不匹配。- 函数级
layers字段要求类型为字符串数组,而非单个字符串,即使只绑定1个层也需要用数组包裹。 - 额外问题:原配置中层的键名
calulator存在拼写错误(漏写字母c),后续如果用Ref引用本地层会直接部署失败。
正确配置示例
layers: { calculator: { path: 'calculator-layer', name: '${sls:stage}-cal-layer', compatibleRuntimes: ['nodejs16.x'], compatibleArchitectures: ['x86_64'], description: 'A hello lambda layer for reusing calculate function across lambdas', package: { include: ['../nodejs/**'] } } }, // 函数配置 functions: { // 键为函数逻辑名,这里对应你导入的hello函数 hello: { handler: hello, // layers必须传数组格式,支持硬编码ARN、本地层引用、动态变量 layers: [ 'arn:aws:lambda:us-east-1:xxxx:layer:dev-cal-layer:1' // 引用当前配置文件内定义的层可以不用写全ARN,直接传CloudFormation引用即可: // { Ref: 'CalculatorLambdaLayer' } ] } }
动态层ARN配置方式
需要配置动态ARN时,直接把动态变量拼接为数组项即可,完全符合TS类型要求,示例:
layers: [ `arn:aws:lambda:us-east-1:xxxx:layer:${slsStage}-cal-layer:${layerVersion}` ]
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

