Jets v4 is an interesting release. It supports Ruby 3.2 on AWS Lambda even before AWS official support for Ruby 3.2. Read along to find out how this was done.

Update 6/7/2023: AWS Lambda has officially released support for Ruby 3.2 🎉 AWS Blog Post. Tested and deployed a Jets v4 app and it works on the official Ruby 3.2 runtime with no changes 😄

A Little Backstory

A few weeks ago saw this:

The user mentioned that Lambda published the Ruby 3.2 Container image. I was salivating about AWS officially releasing support for Ruby 3.2. Sadly, I did not read the comment closely and mistakenly thought that Ruby 3.2 was already released. Even provided screenshots. Again, without reading the comment closely enough. 🤦🏻‍♂️ Thankfully, the user handled my careless speed-reading and let me know gently. 👍

Around the same time, a long-time Serverless Gems customer contacted me about the ethon gem. It’s a gem that was apparently written by the same typheous team. It wraps libcurl libraries to make network calls at a low level. The ethon gem was quite problematic to compile and get the binaries working. Eventually, I figured it out and was able to build a Serverless Gems package for it. Shipped it!

Jets v4: Ruby 3.2 Support

These things planted the seed to look at Jets and AWS Lambda Ruby 3.2 again. The most interesting thing about this release is that we can test Ruby 3.2 before AWS officially releases it. This is achieved by using an AWS Lambda Custom Runtime.

AWS Lambda Custom Runtime

For folks interested in trying Jets with Ruby 3.2 on AWS Lambda now, you can use the Custom AWS Lambda Runtime. Building a Custom Runtime is not for the faint of heart. It took a few days of fiddling around before I was able to get it working! Thankfully, using the Custom Runtime is not as hard as building it. You can use the Custom Runtime today by following these docs: AWS Lambda Custom Runtime: Ruby 3.2.

I’m sure AWS will release Ruby 3.2. It’s even noted in this issue comment that they typically release it in about 90 days after publishing their Docker image.

What Happens When AWS Releases Ruby 3.2

When AWS releases the official Ruby 3.2 runtime, Jets v4 should support it as-is. You just have to remove the Custom Runtime layer config.lambda.layers configuration in config/application.rb and jets deploy again. That’ll swap out the Custom Runtime with the Official Runtime. That’s how it’s supposed to work 😄

Upgrading

If you’re upgrading from Jets v3 to v4, take a look at the Jets Upgrading Guide. A blue-green deploy is probably required.

Additional Fixes

Also, used the opportunity to tackle a few issues that many users have kindly reported. Thank you to these amazing users who provide many details in their reports and are generous with their time.

  • #641 bundle check and prevent error from getting to aws lambda
  • #642 Fix rack mounted apps: update interface with removed meth
  • #643 JETS_EXTRA support, deprecate JETS_ENV_EXTRA
  • #644 remove docs to separate repo
  • #645 PreheatJob: fix function lookups and iam function permission
  • #646 log debug uploading and setting content type
  • #647 fix Jets.logger call
  • #648 make sure logger level info is default
  • #649 Custom Domain: Hard fail on IAM permission error
  • #650 Validate lambda function names
  • #651 allow custom rake tasks with params to work with jets as well as rake command
  • #652 Validate lambda function names: fix regexp
  • #653 refactor cleanup: rename Jets::Naming to Jets::Names
  • #654 Ruby 3.2 Support

Full Jets CHANGELOG

Happy Jets Users

Jets is still going strong. People who use Ruby on Jets report that they absolutely love it ❤️ They have a secret weapon 🦸‍♂️ Jets is still one of best serverless frameworks in the world. Of course, I’m bias. 🤣 But that’s my 2 cents. Hope you enjoy Jets Release v4. 🎉