How do you cleanly package small, individual Lambda Functions

I’m having trouble producing individual lambda functions from a set of modules under a single serverless.yml. I feel like I’ve tried every possible combination of include/exclude and still end up with zip files containing the node_modules of the sibling functions in each of the final packaged zips.

My structure looks like this:

- lambdas
  - serverless.yml
  - function1
    - node_modules
    - index.js
    - package.json
  - function2
    - node_modules
    - index.js
    - package.json

My serverless.yml (well one of the many, many combinations I’ve tried) is:

  functions:
    function1:
      handler: function1/index.handler
      events:
        - http:
            path: fun1/
            method: post
      package:
        individually: true
        exclude:
          - "./**"  
        include:
          - ./function1/**
    function2:
      handler: function2/index.handler
      events:
        - http:
            path: fun2/
            method: post
      package:
        individually: true
        exclude:
          - "./**"  
        include:
          - ./function2/**

I was hoping for one zip file for each function that contained only that function’s dependencies. But what I am getting is each zip file looks like this:

function1
  - function1
      - index.js
      - package.json
      - node_modules
  - function2
      - node_modules

I’ve tried using the exclude statement on the global package setting, tried putting all the functions in a src folder, and various combination of globs for the excludes. Am I doing something obviously wrong, or is this not a supported use pattern?

1 Like

Are you defining a top-level package setting for your service? Something like:

service: my-service
package:
  individually: true
1 Like