At the recent Global Azure Bootcamp event held at the Microsoft office in Columbus, I was the only one with a laptop covered in AWS stickers. Despite a strong feeling of imposter syndrome, I actually felt right at home due to the large number of similarities between AWS and Azure. Perhaps more surprisingly, as someone with a Java and Linux background, the platform appears very welcoming to the code I write.
Most of the topics had a presentation and then a lab giving us the chance to get hands-on with the services discussed.
Infrastructure as Code using Amazon Resource Manager
This was listed on the agenda as "Advanced IaC with PowerShell and ARM Templates", and I had to do some searching to figure out what this was going to be about. It turns out that this is the Azure equivalent of AWS CloudFormation which I'm very familiar with and was a perfect example of things being similar but not quite the same.
A few things struck me in particular:
- ARM creates resources in a Resource Group (making it seem a bit like a CloudFormation stack), but Resource Groups are used extensively without ARM, and a Resource Group could contain both manually created resources and resources created via ARM (but that is probably not a good idea).
- By default ARM updates run in "incremental mode", and if a resource is removed from the template it will not be deleted from the Resource Group. Specifying "complete mode" will delete resources in the group that are not part of the template.
- Templates are in JSON - having switched from JSON to YAML for CloudFormation, I would not want to go back to JSON.
- Templates have a variables section that can store computed values to be referenced within the template, and there is a much larger set of functions available than in CloudFormation.
- The example templates for creating VMs in Azure seemed a lot more complicated than their equivalent in CloudFormation. I'm not sure if this is because they were showing every possible option, or if there is less default configuration.
Everyone has to have an Internet of Things framework and Azure is no different. There appear to be a lot of similarities to the AWS offerings, but not having used them extensively it's hard to compare. Because we did not have any IoT devices to use at the bootcamp we used simulated devices, which is fine but ultimately turns it into a basic messaging demonstration.
This session did inspire me to download Windows 10 IoT core and install it on a spare Raspberry Pi 2 that I had at home. While the Pi 2 is a supported platform, it was so painfully slow that I lost any interest in doing any more with it - I'm sure it would run much better on a Pi 3.
Both AWS (Elastic container service for Kubernetes - EKS) and Azure (Azure Kubernetes Service - AKS) have managed Kubernetes services in preview. The difference with Azure is that it's accessible for anyone to use immediately, whereas you have to apply to join the AWS preview. This may be a difference in philosophy between the platforms - there seem to be a lot of services in preview in Azure that anyone can start using, presumably taking on a risk that the service may change significantly before it is fully released.
I've been using AWS EC2 Container Service (ECS) for a couple of years to run containers in production and it's worked pretty well for us but it is fairly basic in terms of scheduling, and everything is AWS specific. The promise of both EKS and AKS is the ability to define container deployments using the standard Kubernetes tools while running on a platform where you don't need to worry about managing (or paying for) master nodes.
I enjoyed the chance to play with AKS and use Kubernetes for the first time, using the generous free trial you get for Azure when you first sign up (we also got $300 in credit for attending the bootcamp which was very nice).
During this lab I had the chance to use the Azure Cloud shell. Running a bash shell in a browser window on Microsoft's cloud (in a tab of Microsoft Edge) shows a great level of support for Linux users in Azure. Interestingly the Powershell version of Azure Cloud shell has just switched to running on Linux instead of Windows.
Azure Functions are similar to AWS Lambda with a different set of supported languages but some overlap. Logic Apps (based upon BizTalk) allow workflows to be defined and systems to be connected without writing any code, and there's nothing really equivalent in AWS.
Because this was the last topic of the day it didn't have a lab so I haven't gone hands on with Azure functions yet to see if Java functions are as painfully slow to start on Azure as they are on AWS.
I really enjoyed the Global Azure Bootcamp and I'll probably attend next year as well. Thank-you to the organizers and Microsoft and the other sponsors (although the sponsor who gave away an Amazon Echo dot might want to rethink their choice of prize).
Both AWS and Azure offer such a large number of services that it's hard to compare the platforms. However, both offer a lot of similar building blocks and a lot of applications could be run equally well on either.