-
Notifications
You must be signed in to change notification settings - Fork 56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RuntimeDependenciesLayer rebuilding on every API request #11
Comments
That's weird! I don't remember such nasty behavior. What is your SAM CLI version? It may be some SAM CLI bug… |
Hey @Envek sorry for the delay, I didn't see your reply come through. $ sam --version
SAM CLI, version 1.29.0 |
+1
Edit: No change after updating to 1.31.0 |
+1
|
+1 also. I'm kinda new to AWS SAM. Thank you sir @Envek for the ts template
|
+1 |
+1 |
One way I found that changes this behavior is to include the
From: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-local-start-api.html with some more relevant tidbits here: https://aws.amazon.com/blogs/compute/working-with-aws-lambda-and-lambda-layers-in-aws-sam/ |
Seems like the workaround for
Does stop the containers rebuilding the layer each time. This is interesting as the docs (cli ref) imply there would be no difference between EAGER and LAZY with regards to layer rebuilding. While this is helpful it's not great since a lot of times I am only testing a subset of lambdas and don't need the others to invoke at all (or build). Warming all of them still slows down dev process which is what This related ticket implies to solve this one would need to publish the lambda and then reference via ARN: aws/aws-sam-cli#1630 IMO this isn't really a great solution since i want SAM to build the layer for me. I use sam so i can have everything in one place and a reproducible build. I believe the reason to rebuild the layer is because sam needs to check if anything changed. However, i think practically speaking it would be a better solution to assume the layers do not change like the templates and in the event of a layer update I also get a lot of errors using the EAGER warm flag, once I start making changes to the code some of the containers don't seem to exit properly and it causes |
This is great research, @ahurlburt! Please open issue in https://github.com/aws/aws-sam-cli with this text so SAM CLI developers can be aware of it and hopefully will fix it some day. |
@Envek done: aws/aws-sam-cli#3725 Maybe people coming across this can upvote :) |
@Envek really liked your blog post that pointed me to this repo. I didn't use this template as I was updating an existing project (from 4 years ago) to have better developer experience. I moulded the project to be like this, but I ran into the same issue (sam cli 1.121.0) that every code change (using I think the issue is that both ContentUri (Layer) and CodeUri (Lambda) are both looking the project root folder, sam cli was picking up TS files changes (and potentially the dist folder too) and deciding that the layer needed rebuilding. I couldn't change either of these, otherwise it would involve moving the My solution was to update the sam template with a new parameter:
Then a condition:
And then finally in globals/function section, use this condition as to whether the layer should be attached to the function:
Then use the command |
First of all, thank you @Envek and others for both the great writeup at https://evilmartians.com/chronicles/serverless-typescript-a-complete-setup-for-aws-sam-lambda and for this template repo.
This is my first time using AWS SAM in general, and it's been tricky with Typescript.
Problem
When running
sam local start-api
, every request I make to http://127.0.0.1:3000/ triggers a rebuild of the dependency layer.Steps to reproduce
sam local start-api
The first visit will build the image as expected.
When refreshing the browse, based on this comment, I would expect the image not to rebuild since no source code would have changed.
However, on each request, the image appears to be rebuilt with the following log line:
The time it takes to rebuild this image makes it difficult to develop my frontend.
The workaround I have right now is to just point my frontend at my
dev
environment in AWS, but I'd prefer to be able to run both front & backend locally.The text was updated successfully, but these errors were encountered: