Azure Functions with Multiple Output Bindings

Recently while working on a partner project, it was required that we build an Azure Function that not only outputs to an Azure Storage Queue, but also archives that same message in Azure Storage. While the concept itself is simple, I wanted to use the built in Azure Functions bindings to do this as simply and cleanly as possible. After a little research, it turns out this is possible and very easy to implement.

The following walks you through how to create an Azure Function with a manual trigger that both sends a message to Azure Table Storage and Azure Queue Storage through built in Azure Function Bindings.

As with anything, there are multiple ways you can do this. I will walk you through from the very beginning starting with the easiest method, through the Azure Portal.

The following assumes you have an Azure Account. If not you can sign up for a free trial here or you can try the Azure Functions for free by clicking here.

If you would like to skip the tutorial and go right to the code, you can view the repo here: Azure Functions Multiple Output Bindings.

Create a new Function App (you can skip this step if you are using the try Azure Functions demo)

This will create your Azure Function App Service and a corresponding blob storage account. For the demo we will use this blob storage account but technically you could use any by utilizing the connection string.

 

 

Browse to the new function app you created. Click on new function, choose C#, then ManualTrigger-CSharp and click create.

Note; We are doing a manual trigger for demo purposes but you could use any of the triggers available.

Great! Now we have an Azure Function created. Lets add some output bindings. Click on “Integrate

From here, we can easily add multiple output bindings through the interface.

Click on New Output, choose Azure Queue Storage and click Select

Leave all the default values and click Save. We will come back to these later.

Again, click on New Output, this time choose Azure Table Storage, and hit Select.

Again, let’s leave all the default values and click Save.

Behind the scenes, the portal interface has been modifying your function.json file which contains all the trigger and binding information for your Azure Function. Your function.json should now look like this.

You can get to this by click on “view files” and selecting function.json.

function.json tells the Azure Function that you now have two output binding and holds their configuration values. In this case we want to output to a table named outputTable and a storage queue names outqueue. All this using the default connection to the storage account we created.

Note; you do not have to create the Azure Storage Queue or Table. It will automatically be created if it does not exist.

All we need to do now is add some code to the function to send data to those bindings.

Let’s go back to our run.csx and replace all the code with the following:

Click save and if you did everything correctly you should see Compilation Succeeded

That’s it! You now have an Azure Function that can easily write to Azure Table Storage and Azure Storage Queue using built in Output bindings and very little code.

If you go ahead and run it you should get the following message. In addition, if you open the storage account for the function you will see the new table and queue created with the messages stored.

Deploy Azure Web App or Azure Function from Repository Folder

I participate in a lot of hackathons. Whether its an internal up-skilling event, university hackathon, or on site with a partner. These are often some of the most fun and frustrating things I get to work on.

At just about every hackathon, we use GitHub to setup a central repo with all the parts of the project we are working on. This could for example contain a web app, azure functions, Xamarin app, console app etc. We normally will just throw everything into its own folder and work from the one repo to keep it easy for everyone.

Often, I want to deploy my web app (and only the web app) right from this repo as I am pushing changes to GitHub. Thankfully through Azure, not only is it very easy to setup continuous deployment using GitHub, but you can also specific what folder within the repo to deploy from.

To deploy an ASP.NET Core web app to Azure from a specific folder in your repository, you simply have to add a new application setting called ‘project’ and point it to the source folder of the project.

For example; I have a project consisting of a UWP slideshow application and my web app to manage the slides. The repository can be found here: https://github.com/joescars/MICMediaSlideshow

In this instance, I only want to deploy the folder ‘MicMediaManager’ to my web app. To do this I connected my Azure Web App to GitHub for continuous deployment and then added the following settings to my app settings.

That’s it! Now I can update each folder independently and my web app will only publish changes within the source folder specified.

So… what about Azure Functions?

This same method works with Azure Functions as well. I’ve setup a sample repository here: https://github.com/joescars/AzureFunctionsCustomDeployment in which I have a folder with my Functions inside their own sub-folder. I then go to the function app settings, add a project setting and it will deploy all my Functions from that folder.

Happy Coding!

Azure IoT Hub, Azure Functions and Farming!

Late last year I had the opportunity to work with Costa Farms on a small proof of concept project. The goal was simple; actively monitor pH levels in their plants water supply and take intelligent action if needed.

We were able to accomplish this using Azure IoT Hub, Stream Analytics, Event Hubs and Azure Functions.

You can find the full case study here.

In addition please find a slide deck below with additional info.