Building a virtual event platform using Microsoft Azure
Tags: architecture, azure
Published: 2020-07-13 22:52:05

---
title: Building a virtual event platform using Microsoft Azure
published: true
date: 2020-07-09 23:26:05 UTC
tags: Architecture,Azure
canonical_url: https://blog.siliconvalve.com/2020/07/10/building-a-virtual-event-platform-using-microsoft-azure/
---

Over the last several months I’ve been involved in the coordination of multiple online community events and a constant struggle I see is the choice of platforms out there to host these sort of events.

In this post I am going to run through how Azure can provide all you need if you wanted to build an “event-in-a-box” service that you can use to host online events. Think of this post as your event platform recipe card! 🙂

The following criteria are being used to drive my choices:

- Attendees should register to view sessions.
- Attendees can build their own schedule.
- Minimal or no Infrastructure-as-a-Service (IaaS) allowed.
- Software-as-a-Solution (SaaS) solutions where they make sense.
- PAYG pricing – no fixed commitments.

Note that the services I’ll run through aren’t presented as a bundled event offering you can just sign up for, but if you have the time and experience you can easily stitch them together to make a compelling offer. If I had a few more hours in the day I’d be off building something :).

Pricing and conditions of use used are based on public pricing available at time of publication (July 2020).

### Event website hosting

Your website is key – before the event it will help promote it to attendees, speakers and sponsors. During the event it can be hub around which your attendees congregate. Your site may contain one or more of the following:

- Attendee registration page(s)
- Speaker submission page(s)
- Session catalogue once event is ready
- Session video viewing page(s) including ability to provide voting feedback on quality of talk
- Discussion forums to replace the hallway track
- Mini-CMS to maintain some or all of this content!

[Azure App Service](https://docs.microsoft.com/azure/app-service/overview) has to be your go-to for hosting this. It offers support for many common web development frameworks by default, with a fall back of Containers should you have some specialised requirements not directly supported.

You can also host [static web applications here](https://docs.microsoft.com/azure/app-service/app-service-web-get-started-html) (in-preview at time of writing), which I’d prefer over the [Azure Storage Static Web Sites](https://docs.microsoft.com/azure/storage/blobs/storage-blob-static-website) due to the various features of App Service such as [easy DNS](https://docs.microsoft.com/azure/app-service/app-service-web-tutorial-custom-domain) and certificate management (including [free certificates](https://docs.microsoft.com/azure/app-service/configure-ssl-certificate#create-a-free-certificate-preview) which is a bonus).

As an additional benefit with App Service, once you provision a Plan you can run multiple Web Apps [on top of the Plan](https://docs.microsoft.com/azure/app-service/overview-hosting-plans) at no additional cost. This is particularly useful if you intend to host any form of API to help run components of either your website or event-related services such as a mobile app.

If you’ve not used Azure before you will also get access to a 20MB Azure SQL DB instance you can use with your plan which could prove handy. 🙂

[Monthly cost](https://azure.microsoft.com/pricing/details/app-service/linux/) (USD): ~$58.40  
(US West 2 | Linux Standard Tier | excludes data egress | billed per second)

### Attendee registration and authentication

In Azure the service you’d want to use for this is [Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/) which provides a standards-compatible (OAuth2 / OIDC) way to add user identity to any solution you are building (web, mobile or desktop). It’s so good Microsoft uses it for its own events like Build and Microsoft Ignite.

By adopting AAD B2C you also allow attendees to register using existing identities ([Microsoft Account](https://docs.microsoft.com/azure/active-directory-b2c/identity-provider-microsoft-account-custom), [Google Account](https://docs.microsoft.com/azure/active-directory-b2c/identity-provider-google-custom), Apple ID, Twitter, et al) without you needing to build anything custom into your event application website or mobile application.

If you wanted to issue a virtual ticket from a third-party ticketing platform that provides a REST API then you could add this in as part of a [custom policy in B2C](https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-rest-api-intro) that will allow you to invoke the ticket providers API and provide the details necessary to issue a ticket to the user who is registering. If you’d like to capture more properties for an attendee then you can also bake this into your registration page using B2C and then utilise the Graph API for B2C to use those properties elsewhere in your event platform.

[Monthly cost](https://azure.microsoft.com/pricing/details/active-directory-b2c/) (USD): $0\*

\* If you have up to 50,000 Monthly Active Users (MAU) then you don’t pay anything (though Multi-factor Authentication will incur a cost if you enable it).

### Video streaming and playback

As recently at the Rio Olympics, [Azure Media Services](https://docs.microsoft.com/azure/media-services/latest/stream-files-tutorial-with-api) has been providing streaming content [support for NBC in America](https://customers.microsoft.com/en-us/story/nbcolympics).

It’s not one of those services I’ve seen deployed a lot because it’s a very specialised offer that not a lot of people would look at without large scale streaming requirements. For our use case though it is really compelling for either uploaded video or for streaming when coupled with [OBS](https://docs.microsoft.com/azure/media-services/latest/live-events-obs-quickstart) or [Wirecast](https://docs.microsoft.com/azure/media-services/latest/live-events-wirecast-quickstart) or other commercial media packages.

Where Media Services can get a little tricky is when it comes to what you’ll pay as it will depend on the service features you utilise and the volume of content you produce. The [pricing page for Media Services](https://azure.microsoft.com/en-us/pricing/details/media-services/) has a good example that makes it easy to understand, though it’s buried in the FAQ, so I’ll cover it here briefly.

Firstly you need to understand the states for Live Streams and their cost – Starting ($0); Running ($$); Stopping ($0); Stopped($0).

So, if you run a two hour stream and you use Standard Media Encoding you would pay as follows. You should always have the encoder running prior to the start of your event. Let’s say you are in the “Running” state for 2 hours and 15 minutes (135 minutes) which is the period you will pay for. In this example our cost would be (in West US 2) ~$5.36, billed by the second.

[Hourly cost](https://azure.microsoft.com/en-us/pricing/details/media-services/) (USD): ~$2.38  
(US West 2 | Standard Live Encoding | excludes data egress and storage | billed per second)

### Egress data

In Azure there is [one place to review data egress costs](https://azure.microsoft.com/pricing/details/bandwidth/), regardless of the service generating the outbound data. Anything under 5 Gigabytes is free, though it’s likely you’d exceed this amount with a moderately successful event.

For arguments sake let’s say we use one Terabyte of egress data. That would cost ~$90 (West US 2 | USD | Zone 1 data pricing | billed per GB).

### Backend database service

Pretty much every application relies on data in some respect. In an event’s case it would likely be the session catalogue and the attendee schedules that require storage.

In Azure, unsurprisingly, there are a bunch of choices when it comes to Databases-as-a-Service (DBaaS).

For relational data you can use [Azure SQL Database](https://docs.microsoft.com/azure/azure-sql/database/sql-database-paas-overview) or Azure Database for [MariaDB](https://docs.microsoft.com/azure/mariadb/overview), [MySQL](https://docs.microsoft.com/azure/mysql/overview) or [PostgreSQL](https://docs.microsoft.com/azure/postgresql/overview) which are all managed database services (no database infra for you to manage!) Azure SQL Database also has a [Serverless tier](https://docs.microsoft.com/azure/azure-sql/database/serverless-tier-overview) which is useful for lightly-used databases – after a period of time the compute is spun down and you pay only for data storage. Perfect 🙂

For non-relational / NoSQL workloads your choice of platform is likely to be [Cosmos DB](https://docs.microsoft.com/azure/cosmos-db/introduction) which provides multiple APIs you can use (it supports [MongoDB](https://docs.microsoft.com/azure/cosmos-db/mongodb-introduction), [Gremlin](https://docs.microsoft.com/azure/cosmos-db/graph-introduction) and [Cassandra](https://docs.microsoft.com/azure/cosmos-db/cassandra-introduction) APIs amongst others). The recently released [free tier for Cosmos DB](https://docs.microsoft.com/azure/cosmos-db/optimize-dev-test#azure-cosmos-db-free-tier) might also suffice for smaller events and gives you room to grow over time as required which is really handy.

### Integration and API services

Often times as an organiser you’ll use SaaS services like [Sessionize](https://sessionize.com/) to host components of your event (why build it when you can buy it?) The great thing about most SaaS providers is that they will provide you with [APIs](https://sessionize.com/developers) to read and write data to or from their systems, so being able to integrate into those APIs is important.

Out of everything Azure has to offer the two best choices for integration are [Azure Functions](https://docs.microsoft.com/azure/azure-functions/functions-overview) and [Azure Logic Apps](https://docs.microsoft.com/azure/logic-apps/) which both provide consumption-based billing models.

You’ll find that Azure Functions has a healthy free tier (up to [1 million executions a month](https://azure.microsoft.com/pricing/details/functions/)) which means you can perform code-based integration for very little cost in many cases. While there is no free tier with Azure Logic Apps you are still only paying when the Logic App runs, so if you’re doing only periodic calls to remote APIs you can control costs quite easily.

You could also use Azure Functions to build out an API and, if you wanted, publish it via [Azure API Management](https://docs.microsoft.com/azure/api-management/) for additional security and flexibility. The [Consumption tier](https://azure.microsoft.com/pricing/details/api-management/) for API Management provides a cost-effective way to serve APIs, including 1 million free calls which might suffice for small or medium events.

### Easier than ever

If I think back even five years the idea that you could stand up a private event platform entirely in one place, run it for a period of time and then tear most of it down to reduce costs is pretty unthinkable.

I love the power of modern cloud technology as it opens up so many possibilities. Can you do it all for $0? No! I would argue though, that if you’re trying to build a quality event that you should expect it will require more than a shoestring budget to pull together.

Having said this, you also don’t need to break the bank in running smaller events by being clever about how you use the resources you have at your fingertips (and deprovisioning them when you don’t need them any more!)

I’m looking forward to seeing you at the next event you run! 😎