Update: Lambda Gems is now called Serverless Gems.
I created Jets, the Ruby Serverless Framework, over a year ago – way before AWS officially released Ruby Support for AWS Lambda. Although it would have been nice to have official Ruby support back then, it was all for the best because I was forced to learn a lot about AWS Lambda and Serverless in general – its strengths, weaknesses, and the challenges that one typically encounters.
Serverless is the best thing for development since good ol’ sliced bread. The benefits of serverless are many. The one that is often most discussed is that it is infinitely scalable. AWS adds capacity on-demand in proportion to the number of requests we throw at it. We don’t even have to tune AutoScaling. It’s an incredible feat of engineering.
Another key benefit of serverless is that there are no servers to manage. Your team doesn’t have to operate, manage, maintain, patch, and upgrade infrastructure until who-knows-when. The infrastructure-management aspect has been abstracted out. Instead, you pass that burden on to hundreds of full-time AWS engineers and let them deal with it. It’s awesome. Your valuable development time can be spent on more important things.
The business case for serverless is strong. Adopting a serverless approach can lead to higher development velocity. It’s not only about infinite scalability and not having to manage servers, but about not having to deal with a non-core aspect of your business. Let’s face it. We’re not AWS, Microsoft, IBM, or Google. It’s not our core business to build a data-center. To be honest, it’s not even our core business to manage the virtual servers on someone else’s cloud. We only do it because we accept it as a cost-of-doing-business in order to achieve success with our true business goals. With serverless technology, we can free ourselves from this costly burden. Over time, serverless done right will accelerate all businesses and allow them to innovate.
Your development time is precious.
Serverless Challenges: Coming Back Full Circle
While Serverless delivers on the promise of no server maintenance, it doesn’t eliminate all operational complexity; the implementation details of Lambda itself make for a build and deployment process that’s language, framework, application, and environment specific, and thus difficult to generalize and automate across multiple projects and environments.
The most obvious operational complexity, when dealing with Ruby applications, is the engineering time required to deploy applications which contain binary gems such as pg, mysql2, and nokogiri. It would be time-consuming enough to compile every single gem/version we need for the Lambda target, which is quirky for excellent engineering reasons, but we have to do more than that – including packaging the binaries as layers so that Lambda can use them.
The Custom Runtimes and Lambda microVM technologies are great when leveraged properly and have made AWS Lambda quite awesome; but if we spend too much time managing the packaging and deployment process, then ironically we’ve returned to the wormhole of managing servers! The whole point of serverless is for your team not to have to deal with this kind of stuff, so it can focus on the core business.
Enter Lambda Gems
Today, I’m introducing the official beta for lambdagems.com. Lambda Gems addresses the complexities of building and deploying to AWS Lambda in a hassle-free manner. Behind the scenes, Lambda Gems launches a fleet of EC2 servers, spinning up hundreds of on-demand instances in parallel to build gem dependencies.
Today, for Ruby developers, Lambda Gems allows you to deploy Jets applications out-of-the-box to AWS Lambda. Essentially, Lambda Gems abstracts out the serverless infrastructure details that you shouldn’t have to deal with. After all, that’s the whole point and promise of serverless: a world where businesses can focus on their core goals. I hope that Lambda Gems will do its small part in the serverless ecosystem and allow serverless to live up to its full potential.
Sign Up Today
The Lambda Gems service is currently available for free. If folks find this service valuable, then the service will continue to operate and soon go into a paid model for private repos. Open source projects will always be free. Sign up to join the beta list today. Early signups to the beta will receive special offers for their support.
- For an Jets Introduction: Introducing Jets: A Ruby Serverless Framework.
- Also more info at: Jets documentation site.
Jets Links and Tutorial Series
- Introducing Jets: A Ruby Serverless Framework
- Toronto Serverless Presentation: Jets Framework
- Jets Afterburner: Serverless Rails in 5 Minutes
- Mega Mode: Rails on AWS Lambda
- An Introductory CRUD App Part 1
- Deploy to AWS Lambda Part 2
- Debugging Logs Part 3
- Background Jobs Part 4
- IAM Policies Part 5
- Function Properties Part 6
- Extra Environments Part 7
- Different Environments Part 8
- Polymorphic Support Part 9
- Jets Delete Tutorial
- Jets Image Uploads Tutorial with CarrierWave
- Cron Job Tutorial: Backup Route53
- Build an API with the Jets Ruby Serverless Framework
Thanks for reading this far. If you found this article useful, I'd really appreciate it if you share this article so others can find it too! Thanks 😁 Also follow me on Twitter.
Got questions? Check out BoltOps.
You might also like
Kubes: Kubernetes Deployment Tool
Kubes is a Kubernetes Deployment Tool. It builds the docker image, creates the Kubernetes YAML, and runs kubectl apply. It automates the deployment process and saves you precious finger-typing energy.
Jets: The Ruby Serverless Framework
Ruby on Jets allows you to create and deploy serverless services with ease, and to seamlessly glue AWS services together with the most beautiful dynamic language: Ruby. It includes everything you need to build an API and deploy it to AWS Lambda. Jets leverages the power of Ruby to make serverless joyful for everyone.
Lono: The CloudFormation Framework
Building infrastructure-as-code is challenging. Lono makes it much easier and fun. It includes everything you need to manage and deploy infrastructure-as-code.