The anatomy of “vmchooser”… Adding some serverless into the architecture!

Introduction

In an earlier blog post I discussed the decision criteria in selecting a VM. In that post I also showed a tool called “VMchooser“. Today’s post will be on the architecture I used to build this one. As you might have guessed, it’s built on Azure components. Let’s get to it and check the anatomy of this application.

 

High Level Architecture

VMchooser has the following high level architecture ;

  • Web App : The front-end of the application is hosted on an Azure Web App.
  • Azure Functions : The back-end API & batch parser are built with Azure Functions. Which unlocks insane scaling possibilities.
  • Storage Account : The storage account serves as decoupled/central storage component for the batch parsing. And it could also be used for hosting the “database” (flat file).
  • Application Insights : Application insights is used to have the needed insights into the usage & other metrics.
  • Github : All code for this project is open-source and publically hosted. You can run your own VMchooser if you want… 😉 Every change is immediately pushed towards the front-end, back-end & database.
  • API Management : As the back-end API is decoupled from the application, I’ve also linked this api with api management. This would provide me with the option to allow 3th party application integrations via an API subscription plan.

 

Continue reading “The anatomy of “vmchooser”… Adding some serverless into the architecture!”

Azure Functions : Increasing the time-out of your function…

Introduction

When I was working on the “CSV import” of  VMchooser, I noticed that long jobs sometimes had issues. After some investigation, it quickly became apparent that I was hitting the time-out. So I had a need to increase it…

 

Logic Apps Time-out = 2 minutes

As a bit of back story, I first started off with my async parsing flow by using the combination of logic apps & functions. Where I at first thought it was due to the time-out on the functions side, it actually appeared to be on the logic apps side. And that one cannot be changed…

 

Azure Functions Time-out 

So I browsed the web, and encountered two variables, which I both set on my platform ;

To reach set these, click on your functions bar (“kvaesvmapi” here), then “Platform Features”, and then “Application Settings” ;

But let’s get back to the variables… From various posts I saw these two popping up. Where I set them both to be safe, I started investigating a bit. The first one ;

WEBJOBS_IDLE_TIMEOUT – Time in seconds after which we’ll abort a running triggered job’s process if it’s in idle, has no cpu time or output (Only for triggered jobs).

This is actually the one you need for your function. As it’s clearly described in the kudu docs. Where the second one apparently is only related to the deployment phase;  hence the “SCM_”-prefix.

 

TL;DR

Set the “WEBJOBS_IDLE_TIMEOUT” in your “Application Settings” ;

And don’t be distracted by the “SCM_COMMAND_IDLE_TIMEOUT”. 😉

What Azure Virtual Machine size should I pick?!?

Introduction

Remember the last time you went shopping for a shirt? Then you surely also recall the moment in time when you were looking to find the right shirt size for yourself…

You probably also noticed that sizes might differ a bit depending on the context. A  woman’s size vs & men’s size is totally different. There are geographical differences… and some people just like to wear cloths that have more “free space”.

So is today’s post about buying cloths? Hell no… 😉 But it’s to point out that there are analogies between finding the right shirt for you, and finding the right Azure Virtual Machine. Today we’ll delve into the aspects that will guide you a given T-shirt size in Azure ; for instance, why choose an FS1 above an A1_V2, where they both have 1 core & 2GB of memory. Though there is a price difference of 10€ per month on them.

Continue reading “What Azure Virtual Machine size should I pick?!?”

Issue : Failed to pull image : rpc error: code = 2 desc = unknown blob

Introduction

When you are deploying an image, which is hosted on a private registry, to a kubernetes (k8s) cluster with windows nodes… Then you might get the following error ;

Failed to pull image “kvaes.azurecr.io/kvaes2017:v1“: rpc error: code = 2 desc = unknown blob
Error syncing pod, skipping: failed to “StartContainer” for “private-reg-container” with ErrImagePull: “rpc error: code = 2 desc = unknown blob”

 

Context

So what did my setup look like?

  • Orchestrator : Kubernetes for Windows (Azure Container Service)
  • Registry : Private (Azure Container Registry)
  • Image : Windows Nano Based

 

Technical Check

Let’s deploy two pods…

The first I’ll deploy via yaml, which is basically the example from the kubernetes docs on pulling an image from a private repo

Now the second one is an adaptation of the example flow from the Azure Container Service documentation ;

Now let’s see how that one went…

The first one failed, and the second one passed! What was the difference?

 "nodeSelector": {
    "beta.kubernetes.io/os": "windows"
    }

Apparently this one forces the switch to “windows container mode” (or something like that…). As it seems very similar to the following thread

 

TL;DR

When deploying windows containers to a kubernetes cluster. be sure to the set the “nodeSelector” or you might end up with errors on pulling the image.

Testdriving the Azure-to-Azure (A2A) variant of the Azure Site Recovery (ASR) services

Introduction

About two weeks ago the public preview was announced for an Azure-to-Azure site recovery service (DR). This was a highly anticipated service to me. So I’m glad it was announced! Today’s post will be on doing a quick setup of the service to get an insight into the look & feel.

 

Topology

What will we be doing today? We’re going to replicate a machine from “West Europe” to “South UK”.

What will the flow be? We’ll have a “Site Recovery Vault” in the target destination. Why? This to ensure that we can leverage the service when the source region went offline. In the source region, we’ll have our VM + Storage Account / Disks, but also a storage account used for caching. All changes make to the disk, will be stored in that cache. On the target side, we’ll have a storage account where a replica (and retention points) of the VM will be kept. Sound pretty easy? Let’s find out…

Continue reading “Testdriving the Azure-to-Azure (A2A) variant of the Azure Site Recovery (ASR) services”

Azure : IT Governance in the cloud

Introduction

During the weekend I saw the following tweet passing by …

Apparently, a hosting company (allegedly) got all their data wiped by an ex-admin. Now I can imagine people thinking that this is something that is part of the territory when it boils down to cloud. So I wanted to write a blog post entailing what you do to set up a governance structure in Azure. Here I’m aware that the above tweet is more related to the security aspect of governance, it’s a part of it nevertheless.

 

Governance?!?

Let’s get started on our scope… IT Governance can cover a lot of ground. In essence, the goal is to assure that the investment in IT generates business value and the risks that are associated with IT projects are mitigated. Though I found that CIO.com has a nice definition on it ;

Simply put, it’s putting structure around how organizations align IT strategy with business strategy, ensuring that companies stay on track to achieve their strategies and goals, and implementing good ways to measure IT’s performance. It makes sure that all stakeholders’ interests are taken into account and that processes provide measurable results. An IT governance framework should answer some key questions, such as how the IT department is functioning overall, what key metrics management needs and what return IT is giving back to the business from the investment it’s making.

So let’s take a look at how we can put an enterprise-grade structure around the management of Azure!

 

TL;DR = Azure Enterprise Scaffold

For those who want to skip the post below… When talking about governance in Azure, the best place that summarizes it the following page in our documentation ; “The Azure Enterprise Scaffold“.

Continue reading “Azure : IT Governance in the cloud”

Setting up Azure MySQL with CodeIgniter by having SSL enforced

Introduction

In my previous post I talked about integrating Azure MySQL with a PHP webapp. Today we’ll elaborate on that one a bit further and see how we can setup CodeIgniter to use the Azure MySQL.

 

Prep the webapp

First thing, set all your database variables as app settings (read: environment variables) ;

That’s it as preparation 😉

Continue reading “Setting up Azure MySQL with CodeIgniter by having SSL enforced”