AWS Lambda vs Azure Functions: Which Should You Opt For

Introduction

 
Ever since Serverless Computing came into existence, it became hugely popular among enterprises. In serverless computing, the cloud vendor takes care of the operational part, while companies look after the ‘business’ part of their business.
 
As per the studies conducted by Right Scale’s 2018 State of the Cloud, serverless computing is the fastest growing extended cloud service in the world. This growth led to the powerfulness of two of the biggest cloud providers currently in the market - AWS Lambda and Microsoft Azure Functions.
 
In this article, we will look at both of them and see how well they compete with each other in the market.
 

AWS Lambda

 
AWS Lambda vs Azure Functions Which Should You Opt For
 
In 2014 AWS Lambda by Amazon Web Services became the first public cloud provider to release serverless architecture. Eventually, developers began to adopt this as the norm because serverless computing became a critical component of DevOps. Because of this, they no longer had to worry about provisioning servers anymore. This also paved the way for agile and automated infrastructure operations.
 

Azure Functions

 
AWS Lambda vs Azure Functions Which Should You Opt For
 
Azure Functions by Microsoft Azure is a comparatively new player in the field of serverless computing, as it was introduced in the market in 2016 at the Build 2016 Conference. Of course, they were offering PaaS or Platform as a Service for several years before that, but they entered the realm of serverless marketing only quite recently, through Microsoft Azure Functions.
 
Let’s look at the differences between the two services on certain parameters.
 

Timeout  Azure scores

 
There is a specified timeout of 5 minutes to run your Lambda functions. When the timeout is reached, the function will cease to run. Azure’s default is also 5 minutes, but you can configure this up to 10 minutes when you choose the consumption-based hosting option. However, when Functions are hosted in the App Service, you don’t have to worry about the timeout.
 

Monitoring - Azure scores again!

 
AWS Lambda helps the developer host great applications on the cloud by providing high-level monitoring of the basic metrics, including throttling, errors, duration, and invocations. But Azure Functions goes a step further by providing detailed function code monitoring with the option of “Application Insights” with a single checkbox.
 

Debugging - Azure gets a clear upper hand once again!

 
AWS Lambda has a SAM CLI tool that helps you run/test Lambda functions locally. Some developers say that you can also run .NET functions in SAM, even though C# is not listed in the official supported runtimes list. You can check this on your own, and see if this works.
 
Azure lets you debug functions, both locally and remotely. Visual Studio comes with the simple F5 debugging tool meant for Azure Functions.
Performance: Azure gives way to AWS here!
 
AWS Lambda is much more superior when compared to the runtime performance. It is true that certain improvements have been made to Azure Functions, but it still doesn’t match the capabilities of Lambda. However, more improvements are expected with v2 runtime, which is slated for a release later in the year.
 

Language Support - Azure, probably

 
Azure Functions supports Node.js, C#, F#, Python, and PHP. Java is also mentioned in the list, but developers are still confused on how to use it.
AWS Lambda supports Node.js, Python, and Java.
 
Because PHP is the most popular language, most of the developers turn to Azure.
 

Azure Function Bindings - Azure scores here hands down.

 
The triggers and bindings of Azure Functions are an interesting feature. You can define the bindings declaratively by using parameter attributes in the code. The three binding types are input bindings, output bindings, and triggers.
 
Developers have the freedom to choose a binding and the parameter type that suits their requirements. It is this differentiating feature that makes Microsoft a better option here. And that’s not all. The company is continually innovating with their bindings. Each binding comes with parameter types that can be configured and manipulated.
 

Difference in architecture

 
The architecture of Azure Functions is also quite different when compared to Lambda. App Service acts as an environment for Azure Functions, where the Functions are grouped logically. In Lambda, this is different because they are organizationally independent. App Service can also be dynamic or classic. In dynamic App Service, you pay only for the functions you use (time and memory). The memory allocated for Azure Services is as per app service and not as per function, which is the case with Lambda.
 
The container architecture of both are also different. Lambda provisions a new architecture to deploy your code on a cold request. The code is taken from the zip file. However, subsequent requests will be handled faster as the containers can be reused.
 
This is different in Azure Functions because they are not subject to cold or warm requests. The files aren’t frozen in a zip file because they run atop Azure’s WebJobs. However, they do provision resources as per requirement.
 
You can also say that Azure is a better choice for cloud hosting because they run on a Windows system, while Lambda runs on Linux.
A few differences between the two services lie in the following parameters as well:
  • Ability to pass data to backend services
  • Perform calculations
  • Transform data
  • Store results
  • Retrieve data quickly

Closing Thoughts - Which one to go for?

 
As long as your core runtime requirements are met, it is alright to choose any one of these cloud computing services. You can try both and see which of these services would prove to be more useful to you. Understand the practical limitations and read the fine print.
 
And it is also important to check the availability and consumption of various relevant services within the ecosystem (cloud providers) as well.
Next Recommended Reading Processing AWS SQS Messages via a LAMBDA