MMS • Renato Losio
AWS Lambda is deprecating the go1.x runtime, announcing support for Go exclusively in the Amazon Linux 2 runtime. The announcement and the need to migrate by the end of the year to the custom provided.al2 runtime raised concerns in the Go community.
As for the Amazon Linux AMI end-of-life, the go1.x runtime will be deprecated on December 31st, and developers should migrate to the provided.al2 runtime by that date. Micah Walter, Yanko Bolanos, and Ramesh Mathikumar, senior solutions architects at AWS, explain the benefits:
First, it supports running Lambda functions on AWS Graviton2 processors, offering up to 34% better price-performance compared to functions running on x86_64 processors. Second, it offers a streamlined implementation with a smaller deployment package and faster function invoke path. Finally, this change aligns Go with other languages that also compile to native code such as Rust or C++.
I think this is a bad thing for a couple of reasons: there is no automated migration path from existing Go Lambda functions to the new custom runtime (…). Second, this will remove Go1.x name from the AWS Lambda console, Go will now just be another custom runtime instead of a first-class supported language.
While for other languages like Node, Python, or Java, Lambda offers a native runtime, Go will now only be available using the provided.al2 runtime, which reduces the discoverability of Go as a serverless language on AWS.
Even before AWS removed native support for Go, there were developers arguing that switching to a custom runtime had many advantages, with support for Lambda extensions, a more recent Amazon Linux 2 execution environment, and the ability to unify the runtime and handler code. Wolfe comments:
While the custom runtime provides better performance and an updated operating system, the change will require effort for many Go developers on AWS Lambda. Some automated assistance and validation from AWS could help reduce friction and issues from this change.
In a popular Reddit thread, some Go developers highlight the lack of communication while others support the change. Aidan Steele, founding engineer at NightVision and AWS Serverless Hero, focuses instead on the benefits of flags:
I was already using the newer runtime, but I also learned from the blog post that AWS SAM can now build Go Lambda functions for the newer runtime – no more Makefiles required! I switched from BuildMethod: makefile to BuildMethod: go1.x and noticed that my Lambda packages were now twice the size. This means slower cold starts and slower deployments.
To mitigate the impact on developers, the announcement describes how to migrate functions from the go1.x runtime to the provided.al2 runtime and how to make configuration changes to build scripts or CI/CD configurations.