provider:
name: aws
runtime: nodejs12.x
stage: dev
region: ap-southeast-2
iamRoleStatements:
- Effect: 'Allow'
Action:
- 'lambda:InvokeFunction'
- 'lambda:InvokeAsync'
Resource: '*'
environment:
variable1: value1
layers:
axios:
path: deps
name: axios
description: axios module
package:
exclude:
- .prettierrc
- .eslintrc
- ./node_modules/**
- ./package.json
- ./package-lock.json
functions:
hello:
handler: handler.hello
layers:
- Ref: AxiosLambdaLayer
Upload layers
layers:
axios:
path: deps
name: axios
description: axios module
In the Layers property, you should point out which folder in the project directory you are going to upload to AWS Lambda as layers.
The key point I am going to illustrate here is,
do not use nodejs
as folder's name (I use deps
here) and there must be a folder which is named with nodejs
in this folder (deps
).
As the Serverless Framework will zip the folder automatically when you run serverless deploy
and upload the zip file to AWS, when the lambda handler.js
require module, lambda will navigate it to /opt/nodejs/
to find out the module.
In the nodejs
folder, there is package.json
file, and run npm install --save
for download all modules locally. Then there are package.json
, package-lock.json
and node_modules
under nodejs
.
Ref the layer
functions:
hello:
handler: handler.hello
layers:
- Ref: AxiosLambdaLayer
In the field of function, the function which need layers created above should config with layers
property. use Ref
and the value should be layer name with capitalized initial letter plug string of LambdaLayer
(eg.AxiosLambdaLayer).
If you are going to use existed layer, you can use ARN
excluded files
package:
exclude:
- .prettierrc
- .eslintrc
- ./node_modules/**
- ./package.json
- ./package-lock.json
Using ./
for just excluding node_modules
and package.json
from root directory, do not use node_modules/**
and package.json
, it will exclude node_modules
and package.json
from deps/nodejs/
folder.
Top comments (0)