-
Notifications
You must be signed in to change notification settings - Fork 110
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
Node v18 Released #47
Comments
This comment was marked as off-topic.
This comment was marked as off-topic.
Maybe that way, the Node v18 will be done before past one year. |
Best thing you could do to enjoy Node v18 like-features is move to Netlify. They released Edge functions with Deno deploy: https://www.netlify.com/blog/announcing-serverless-compute-with-edge-functions Do tell Vercel, they may reconsider using AWS lambda images :) |
I honestly don't mind receiving flood of email notifications, since we really need to get more ppl to pressure AWS to stay on top of this NodeJS runtime update game. |
Honestly, having a 6 month bake (releasing the april LTS release in around October for lambda) would be a good compromise. gives enough time for tests and means we're only "one version behind" |
Isn't that what the 6 months between v18 release on 2022-04-19 and v18 becoming LTS on 2022-10-25 is for? Amazon can start making v18 images available now if they want to have 6 months of testing before offering v18 as LTS. |
Yes, that's exactly my point - AWS just also use that same bake time to prepare, then launch the node version as soon as it becomes active LTS |
Should be noted as well, that they will be transitioning to Javascript SDK V3 as well for the default SDK. |
Like many others I agree with the sentiments, AWS needs to get better on this. I went back and dug out the release history of lambda back to node 8. It is not a pretty sight. The current delay is second only to the delay with the node 10 release, that took until May 13. After Node 10 things got better - Node 12 dropped very promptly, 14 it started to drift back out and with 16 we’re back to at least May. Interesting to note the other two major cloud providers, ie Google and Azure, did manage to get 16 out in a timely manner.
|
@adcreare I mean, it's not like Amazon is a multi-billion dollar company.... oh wait |
Thanks all for the keen interest in seeing Node releases land promptly in Lambda. Regarding Node releases in general, we're tracking the Active LTS release dates in October, not the 'Current' release dates in April. This is because, as stated at https://nodejs.org/en/about/releases/, "Production applications should only use Active LTS or Maintenance LTS releases". As @adcreare pointed out above, there have been delays between Active LTS and our corresponding GA releases, not least for Node 16 (see #14 for latest status). While I can't give an ETA for Node 18 yet, we do hear your feedback and this is something we're actively working to improve. |
@jtuliani Well you could add it as beta status or something, actually node 12 is also not usable in production because it's not supported anymore, but you still have this runtime supported. I think it's nothing bad about thinking of new releases in advance. "Current" version is stable enough for some simple applications. It's a good idea to release it right when it hits lts status. |
Then why is your node 16 image that is just released based on node 16.4, which by your version definition, should not be used in production, because it was released multiple months before the first 16.x LTS version!!! |
This is "close" to what I'd like. i'm thinking more like This would allow us to deploy an experimental version and allow us to fix bugs ahead of the GA releases. If someone wants to use this for production purposes, that's their issue then as they agreed to the terms. |
That said, |
There shouldn't be a need to remove any configs, however it would be more aggressive on the removal of the runtimes. I would just say, create a new GA runtime without the suffix, and either remove the *-experimental runtime immediately or after a month. They already have policy and protocols for deprecation. The only other thing is, I'd probably disallow the runtime's for @edge. The nice thing about it is. Once a GA is announced then they deprecate and immediately release the "next" LTS version. So, if they have node18.x-experimental... after the GA, they release node18.x runtime, where both runtimes exist, then they release node20.x-experimental and remove node18.x-experimental. Experimentals are just treated as another runtime. |
how do customers deal with the fact that they have an its easy to say "make the customer do it" but its an impractical answer that leads to unhappy customers. it would be better to use a fixed name that wont change at GA, but force customers to accept its experimental nature pre GA To some degree i can see your point that they already have a process for deprecating runtimes, but in this instance it would seem more appropriate to not deprecate, but instead automatically onboard in to the non-experimental version at GA since pre GA the runtime may introduce breaking changes but if you're using the runtime pre GA, you presumably want to keep using it post GA. This would also address @GrahamCampbell's comment on node 16.4 being available pre LTS. This should have required the |
However that's not true, because many major bugs and security issues (such as CVE-2021-22930 and CVE-2021-22931) were fixed since the 16.4 release. 16.4.x is not suitable for production use IMO. |
@GrahamCampbell Please can you clarify how you checked the Node 16 version and which region you used? When I tried a simple function to |
@barneyparker The same way they handle deprecated versions of runtimes now. https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy
So I would expect, as a completely separate runtime, it would follow these steps but at a "faster" pace, and there would only be one "experimental" per GA release Edit the main problem is that the experimental runtime may have a "bug" thats not present in the GA version. |
Thanks all for the thoughts on 'preview' runtimes--please keep the ideas flowing. This is also something we're considering (no concrete plans yet). As well as the details of how preview runtimes would work, we're also keen to understand the 'why'...what would you all see as the main benefit(s)? Would you be willing to try runtimes during the preview phase and share feedback? |
@jtuliani The Main reason is for developers to deploy a "test" version of their application. This would allow us to iron out any issues with a new version before (90-99%) a GA is deployed. As it is now, when a GA is released, it can be up to a month sometimes for testing and QA teams to work with before we can utilize this in a production environment. Then all that is left is any issues between a "preview" version and the GA runtimes, which should be low. |
As the core maintainer of Middy, being able to know what will be included in the runtime when it hits GA will allow myself and other OSS projects to better server the AWS Lambda community. Currently, we need to be over conservative or reactionary with major releases which I feel isn't serving the community as well as it could be. Also, having more lead time mean better planning and less rushing to test and publish a new version once GA is released. Frameworks need to be updated and released before, as @dl748 mentioned, other downstream projects/developers can use them. I like this idea of having the LTS runtime released via to the API/SDK with a simple changelog in GitHub to know if there are any other changes besides the runtime itself. Then having a switch to GA it once the version transitions to LTS, enabling the console and updating the public docs. I don't think the runtime needs a Having access to the latest runtime sooner has additional advantages:
Happy to discuss feedback on preview nodejs runtimes and feature requests I've been collecting over the years. The Middy team is already building a relationship with the AWS Lambda Powertools Typescript team to see how we can better work together to serve the community, would love to do the same with the Lambda nodejs runtime team if there is interest. |
@jtuliani Could there maybe be a way to differentiate pre-released runtimes from released ones? Something like the That said, I understand that changing the public API is way harder than some of the other solutions presented. One way around that might be to change the actual name of the runtime to, say, |
I like the idea of implementing Node 18 current and LTS with the same runtime name of For example: Frameworks like Serverless Framework, plugins (like serverless-esbuild) or IDE extensions like Serverless IDE. All of them have/had to add support for the latest runtime and all of them have been blocked/waiting until May 9 to get started, making an already late runtime release take even longer because of the time required for dependencies to follow suit. If AWS released |
FYI As AWS is painfully slow at releasing new versions of node images we build our own lambda layers. We've been running our services on the latest node using layers for number of years now. At the moment we are not even able to do that as Node 18 requires glibc >= 2.28 currently unsupported by Amazon Linux (AL1 and AL2). What I think it means - is that we will not have Node 18 on AWS Lambda until it's operating on Amazon Linux 2022 (also see: https://repost.aws/questions/QUrXOioL46RcCnFGyELJWKLw/glibc-2-27-on-amazon-linux-2). |
NodeJS just moved up the EoL for v16 to 2023-09-11! The race is now on for all vendors to release v18 ASAP to ensure customers have sufficient time to upgrade. Hopefully this will force a new release schedule. |
I totally agree with @willfarrell that this is becoming much more of a priority right now. Hopefully AWS can prioritise this work |
Bun support would be a perfect fit for lambda's due to fast cold start, but it's quite a few months from v1 and I doubt AWS will even consider it prior to that. |
I doubt we'll ever see the likes of Bun or even Deno. Shame. |
@jtuliani thank you for the new feature, AWS Lambda runtime management controls.
|
@o-alexandrov Supporting new runtimes such as Deno or Bun would be a separate feature, it's not enabled by runtime management controls. I'm interested to learn more about your use case for Deno and/or Bun. How would they help you? |
@jtuliani thank you for considering this request.
|
@jtuliani Has there been any updates on the cold start issue with node.js v18? |
What's the cold start issue? |
Node 18 has longer cold start in comparison to node 16
|
@santiperone Thanks for following up. We have identified the primary cause of the longer cold starts in the Node 18 runtime as thread blocking in a dependency used during initialization. We are evaluating options to resolve this in a future Node 18 runtime update. |
What's the rough ETA on that update? I hope its sometime this year... |
that's excellent news, is it something in the aws lambda runtime interface client? |
This was in a newsletter from Node Weekly I received today:
Seems others have noticed too. |
How embarrassing. |
This is slightly related to performance questions: Maybe, AWS would kindly consider to provide us with managed by AWS Bun runtime. |
any news regarding this issue? is there a ticket we can subscribe to be notified of this progress? |
@bicatu this ticket is closed, Node.js 18 is available for all Lambda, including Lambda@Edge (support added in January 2023 if I'm not mistaken), some of us just shamelessly pinged AWS here 😅 having an opportunity to be heard I just created a separate ticket #83 regarding cold starts, so it's in |
There's still the issue of performance when using the built-in runtime's SDK: https://dev.to/aws-builders/benchmarking-the-aws-sdk-2pd4 |
@ffxsam funnily enough, I read that same article last night. Anyone here got a good example/tutorial on using esbuild with Typescript and tree shaking? I can't seem to find anything decent online :/ |
@paul-uz What, specifically, are you looking for? |
@ffxsam how to configure esbuild to compile TS and do tree-shaking (and minification). |
@paul-uz Tree-shaking is automatic in esbuild, as far as I know. As a test, just create an $ esbuild index.ts --bundle --format=cjs --minify --outfile=min.js Or |
@ffxsam oh sweet. TBH I've simply not yet tried it, as we currently just use TS to compile the JS files, and bundle all the production NPM dependencies in a ZIP. So, I can use esbuild to compile the TS into JS, at the same time, tree-shaking and minifying everything? So in theory I would end up with a JS file and a trimmed down node_modules folder? Or does esbuild create something else that gets imported? |
How is that single JS then referenced in my actual function? Does esbuild handle that as well? |
I guess this thread has now completely derailed, so I'm going to unsubscribe. However, relevant to the recent discussion, please take a look at "@vercel/ncc". We've been using it for hundreds of production lambda functions (and billions of executions) to bring down cold start / package size. It might take a bit of tinkering to get to work (depending on your dependencies - really helps if you have tests you can run against the compiled code), but the impact on cold start times is fantastic. |
@ffxsam I gave esbuild a quick test, and it seems to be working, mostly. I don't think tree-shaking is working by default though, as an included package I wrote is having all its functions bundled, not just the one being used in my main file. |
@paul-uz plz read https://esbuild.github.io/api/#tree-shaking and stop posting irrelevant comments here ) |
Even though we are still waiting for node v16 base image, this is the issue tracker for node v18 base image
https://nodejs.org/en/blog/announcements/v18-release-announce/
The text was updated successfully, but these errors were encountered: