sam local invoke does not work with symlink

Viewed 238

I am building a typescript project with AWS CDK and SAM.

I am trying to setup a backend where I have several lambda functions which share a common lib (which will ultimately talk to dynamo-db).

I created a very simple demo with one hello-world lambda importing from one common my-lib package (using yarn workspaces). https://github.com/ziggy6792/aws-cdk-lambda-shared-package I am using yarn workspaces to share my common my-lib library with my hello-world lambda

If I deploy this stack to AWS and run my hello-world lambda (by testing from the AWS console) it works! (It successfully imports my-lib does not error).

However I can't invoke my lambda function locally.

I have tried to use this method (which I found here) to mock locally (this method works fine when I don't import my common my-lib).

  • cdk synth --no-staging > template.yml (to find the logical lambda function id = HelloWorldLambda5A02458E)
  • sam local invoke HelloWorldLambda5A02458E

But I get an error

{"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'my-lib/MyLib'\nRequire stack:\n- /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js"}

It seems sam local invoke does not like my local dependency which is created as a symlink by yarn workspaces. If I replace the synlink my-lib with a hard copy of the my-lib package then the code runs fine locally. (But I don't want to so this every-time I want to run locally)

My question is

  1. How can I invoke my hello-world lambda function locally?

Thanks a lot

0 Answers
Related