Cloud Hosting

Amazon Web Services (AWS)


I spent about a year helping manage software deployments for a SAAS ("software as a service") company that hosted their application on AWS so I'm very comfortable with this platform. This application was hosted in EC2 instances in an auto-scaling configuration so that when traffic increased, additional web servers would automatically spin up. These multiple web servers were behind a load balancer to evenly distribute the traffic.

There was also an image processing component that used the SQS message queueing service to indicate how many images needs to be processed. A separate auto-scaling configuration could "dial up" the number of instances processing images. When a large batch appeared, the auto-scaling might create 100 instances to run for a few minutes to quickly process the backlog. Since cloud services charge by the minute, it's relatively inexpensive to run a lot of instances for a few minutes.

AWS began as more of an IAAS (Infrastructure as a Service) shop, but has moved in the PAAS (Platform as a Service) direction. Their RDS offering is a good example of this. If you need a SQL Server database in an IAAS environment, you would spin up a virtual machine (VM) and install SQL Server to run on that server (very similar to traditional on-premise, the server just lives somewhere else). RDS offers managed SQL Server (and other databases). What does that mean? The easiest way to begin understanding the difference is - with IAAS, you still have to install Windows Updates on the server. With RDS (PAAS), this is managed for you automatically. That's a drastic over-simplification, but hopefully that lets you start to understand the difference.

Microsoft Azure


My personal feeling is that's it's just a little better/easier to run Microsoft technology on Microsoft Azure, so most of my ASP.Net applications run on Azure.

I really like Azure DevOps. In addition to Git (source control) repositories, it offers work item tracking and is free for up to 5 users. The CI/CD (Continuous Integration/Continuous Deployment) tools are very strong, and you can run pipelines whether you're using Microsoft technology or something else. (I was pleasantly surprised to discover that AWS has tools published in the Azure DevOps marketplace so you can build with Azure and then use AWS CodeDeploy to deploy to AWS auto-scaling groups.) Now that Microsoft has purchased GitHub, it will be interesting to see how these products evolve. (It's already very easy to use GitHub repos in AzureDevOps pipelines.)

For IT managers, Azure is a easy way to move some of your infrastructure to the cloud. Azure Backup is an easy way to do offsite backups of your on-premise Windows Servers. You may not realize, but - if you are using Office 365 (as many organizations are), you already have an Azure account. It's easy to integrate your on-premise AD domain to Office 365 so that your user's can use the same credentials to log into their computer as they use for Office 365.

Both Azure and AWS have "lingo" that may take some getting used to. It's also really helpful to understand networking to be able to properly set up security and redundancy. My experience gained as a multi-location network administrator has really served me well in setting up cloud infrastructure. This is one of the areas I've seen really good developers struggle with as they are trying to move their applications to the cloud. Understanding and using the "availability group" concept of having resources in multiple data centers is very important.