Microsoft recently announced an addition to its Platform as a Service (PaaS) offering called Azure Functions. Initially launched as a preview service in March 2016, Azure Functions provide developers with an event-driven, serverless compute platform that allow organizations to pay for only what they consume.
Since Azure Functions is a PaaS service, customers do not need to provision for peak consumption or be concerned with traditional maintenance activities. Yochay Kiriaty, Principal Program Manager on Azure Platform, explains:
Azure Functions can scale up and down on demand so you don’t need to build infrastructure for the largest scale scenario and pay for resources you don’t use. You can also set a maximum daily spending cap to prevent runaway functions. There is also no more worrying about patching and maintaining frameworks, the operating system or infrastructure. Functions take care of the underlying infrastructure for you.
Azure Functions can be written in C# and Javascript. Additional languages, including F#, PowerShell, PHP, Python, CMD, BAT and Bash are still in preview. At launch, developers authored their Azure Functions within a web browser on the Azure Portal. However, since the general availability announcement, Microsoft has provided additional tooling, currently in preview, for developers interested in building Azure Functions in development IDEs. Developers can now build Azure Functions in Visual Studio 2015 by installing the Visual Studio Tools for Azure Functions.
Image Source: https://blogs.msdn.microsoft.com/webdev/2016/12/01/visual-studio-tools-for-azure-functions/
Developers can run Azure Functions locally and debug them in Visual Studio. Azure Functions can then be deployed to Azure through the Web Deploy – Publish feature. Once the Function(s) are in Azure, they can still be debugged through Visual Studio by attaching the debugger to the cloud instance.
Image Source: https://blogs.msdn.microsoft.com/webdev/2016/12/01/visual-studio-tools-for-azure-functions/
InfoQ recently had a chance to catch up with Chris Anderson, Program Manager, Azure Functions. Here is what he had to say.
InfoQ: There has been a lot of buzz related to serverless computing. What do you attribute all of this attention to?
Chris Anderson: I think the buzz around serverless computing is, at its root, because developers have never been able to build applications quicker and easier than with the experiences that serverless computing provides. People are excited when they’re empowered to do and build things faster. They’re also having an easier time operationalizing and managing their applications when they are using managed services and serverless computing because these services are designed to handle that responsibility for you, as much as possible. That means we’re innovating faster and having an easier time managing and scaling applications when we adopt serverless. I think it’s also because there’s been a great community that’s developed around this concept of serverless computing. Those two forces combined create a lot of buzz.
InfoQ: What are some of the more interesting use cases that your customers have used Azure Functions for?
Anderson: An interesting use case is what Plexure.io, IoT driven CRM platform, is doing with Azure Functions. Their platform helps customers consume IoT information related to customer interactions and, among many things, make it easy to orchestrate and react to that IoT data. When they saw Azure Functions, they thought they could use it to host some of their actions they use in their workflows (which is powered by Azure Logic Apps, our serverless workflow integration service that includes a visual designer and over 80 out-of-the-box connectors). They also wanted to let their customers write custom functions, inside the Plexure online portal. This allows their customers to do more from within their portal, without having to stand up a custom API service somewhere to react to WebHooks. Azure Functions is already one of the best ways of doing that, so they just cut out the middleman. Since our portal UI is open source, they were able to reuse our Angular2 components to quickly get an experience in their own online portal.
Another interesting use case is what we’re doing with the Microsoft Bot Framework. When the Microsoft Bot Framework team looked into the easiest way to deploy and run bots, they saw serverless as the logical solution. Azure Functions serve as their base compute layer for hosting their integrated Azure Bot Service while providing additional capabilities like on-demand scaling and support for continuous integration and delivery.
The most interesting thing for me, though, has been just how very plain, bare bones scenarios like small data transformations or enrichments can be at scale, when combined with some of other managed services. We see a lot of customers doing large amounts of integration workloads with Azure Logic Apps, and they are able to easily write Functions for custom actions along the way. For example, it’s super quick to build an application that reads all the tweets on a given subject and processes them with Logic Apps and Azure Functions, plus services like Cognitive Services for sentiment analysis and facial recognition, and outputs them to PowerBI. Similarly for IoT, it’s never been easier to do analysis of IoT data when you combine services like IoT Hub, Stream Analytics, and Azure Functions. Even though the Function isn’t doing anything super interesting, the fact that it’s so simple to set up and run means I’ve got the full benefit of managed services like IoT Hub and Steam Analytics.
InfoQ: What sort of scale (transactions) have you seen your customers achieve using Azure Functions?
Anderson: Most customers are doing several events a day. They’re using Functions to extend existing services in simple ways, and their use gradually increases as they adopt more serverless patterns and build more functionality. Our largest users are doing hundreds of millions of executions per day in the thousands per second range.
InfoQ: You have recently announced Visual Studio tooling. Why is this capability so important for your customers?
Anderson: From the very first day we started Azure Functions, we started with this fundamental mission to improve developer productivity and agility. We want developers to be able to build things, and we want them to build it fast with the tools they already use. We often used a mantra “5 seconds to get started, 5 minutes to value”. While it’s certainly possible to build things fast with just a text editor, we know from experience that many folks expect something powerful like Visual Studio to make them productive. We’re also investing in general local tooling and VS Code integration so we can support developers on other OS’s. Part of that great local editing experience is local debugging and we are supporting live debugging, today, inside of Visual Studio. I’ve come to rely upon it, already, to help me catch some of the harder bugs I’ve created for myself when I’m building demos or helping customers.
InfoQ: Azure Functions currently support binding to services like Azure Event Hubs, Azure Service Bus Queues and Topics and Azure Storage. What are some other event triggers that you are looking to include in the service?
Anderson: Given our enduring commitment to developer productivity, we’ve delivered and will continue to deliver additional bindings to make it easy to connect Functions with services and data (You’ll see us investing in more triggers to Azure services like Document DB and Azure IoT Hub). We’ll also be focused on tighter integration into services that can also talk to us like Azure Monitoring and SaaS solutions like Office 365 and Dynamics 365. We’ll also be looking at Functions specific triggers like being able to have a trigger when you have an error in a Function; using Azure Functions to better manage Azure Functions.