AWS Lambda宣布将废弃 go1.x 运行时,仅在 Amazon Linux 2 运行时中支持 Go。该项声明以及年底前需要迁移至定制的 provided.al2 运行时引起了 Go 社区的关注。
根据Amazon Linux AMI的生命周期,go1.x 运行时将于 12 月 31 日废弃,开发人员应该在此之前迁移至provided.al2运行时。亚马逊云科技的高级解决方案架构师Micah Walter、Yanko Bolanos和Ramesh Mathikumar解释了其中的收益:
首先,它支持在 AWS Graviton2 处理器上运行 Lambda 函数,与在 x86_64 处理器上运行的函数相比,性价比最大可以提高 34%。其次,它通过更小的部署包和更快的函数调用简化了实现。最后,该变更能够使 Go 与其他可编译为原生代码的语言保持一致,如 Rust 或 C++。
在名为RIP AWS Go Lambda Runtime的文章中,Stax 的工程主管Mark Wolfe表达了不同的意见:
我认为这是一件糟糕的事情,原因有如下几点:现有的 Go Lambda 函数没有自动迁移至新的自定义运行时的路径(……)。其次,这将从 AWS Lambda 控制台中移除 Go1.x 的名称,现在 Go 将会变成另一种运行时,而不是受支持的一等语言。
对于 Node、Python 或 Java 等其他语言,Lambda 提供了原生运行时,而 Go 现在只能通过 provided.al2 运行时来使用,这降低了在 AWS 上 Go 作为 serverless 语言的可见性。
甚至在 AWS 移除对 Go 的原生支持之前,就有开发人员认为,转而使用自定义运行时有很多优势,比如支持 Lambda扩展、较新的 Amazon Linux 2 执行环境,以及能够统一运行时和处理器程序的代码。Wolfe 评论到:
虽然自定义运行时提供了更好的性能和更新的操作系统,但是对于 AWS Lambda 上的许多 Go 开发人员来说,这一改变需要花费一定的精力。AWS 提供的一些自动化辅助和验证有助于减少这一变更带来的冲突和问题。
在一个热门的Reddit帖子中,有些 Go 开发人员强调了缺乏沟通的问题,而另一些人则支持这一变更。NightVision 的创始工程师、AWS Serverless Hero Aidan Steele则将关注的重点放在了标记的收益上:
我已经在使用更新的运行时了,但我也从博客文章中了解到,AWS SAM 现在可以为更新的运行时构建 Go Lambda 函数了——不再需要 Makefiles!我从 BuildMethod: makefile 切换到了 BuildMethod: go1.x,发现我的 Lambda 包现在是原来的两倍大。这意味着冷启动和部署速度均会变慢。
为了减轻对开发人员的影响,公告介绍了如何将函数从 go1.x 运行时迁移到 provided.al2 运行时,以及如何对构建脚本或 CI/CD 配置进行修改。
评论