GCP, AWS or Azure for ASP.NET Core?
August 19, 2019
It has never been easier to deploy software than it is today. Cloud computing, PaaS, and Saas have made software deployment easier than boiling water using a kettle. As a developer, you do not need to have server expertise and with that, you can focus on what matters.
Lately, I have been developing an online service which I will probably make a separate blog post sometime after I release it and I was in the need of a place to host my .NET backend. This would also be the place I would host my future side projects.
After testing out Digital Ocean droplets which is essentially a virtual server I was sure that the time spends on infrastructure could be time spent on building my product instead.
The problem with choosing a platform is that there are way too many choices and you can don't know how the deployment and user experience will be before you try it. Never trust these big corporations, only trust yourself. Before we go to evaluate each cloud provider I can bring up the values that were most important for me.
- Developer experience
- User interface
This is ASP.NET Core focused and it doesn't take into account of deploying other technologies.
Google Cloud Platform
GCP from Google is a suite of cloud computing services that runs on the same infrastructure that Google uses internally for its end-user products. It launched in spring of 2008 and it currently has over 90 products.
App Engine The PaaS offering by GCP is the one I will be focusing on. It's fully managed and it officially supports .NET core.
GCP has a set of command-line tools which is well designed and easy to use. You have multiple ways to deploy an ASP.NET Core app to GCP as described further here. GCP also has an extension to Visual Studio that is supposed to make everything easier which works ok enough. I did have various problems with it and it didn't seem so stable and it looks like I'm not the only one since there are many open issues on their repository.
But it's pretty much worthless since they haven't updated it to be compatible with Visual Studio 2019 and that is a huge deal for me. Maybe not so huge a deal for everyone but switching to an older version of Visual Studio just to deploy the application is just an unnecessary hassle.
So the GCP dev experience is not off to a great start but the article I mentioned earlier said that there were 4 ways to deploy on GCP so I'm keeping up the courage and diving deeper into GCP land as their offering seems promising on the paper.
The other way you could deploy it is using the CLI and I tried both to deploy a framework-dependent deployment bundle and using a custom docker file. Both ways require you to have a minimal app.yaml file in your project that is the configuration for app engine.
runtime: aspnetcore env: flex
.NET Core is not supported on its standard environment so you gotta use a flexible environment which means the applications run within Docker containers on Compute Engine VM. The prices are higher for a flexible environment and also more complex as you gotta pay for vCPU, memory, and disk usage versus just instance hours.
But enough about the app engine and more about the deployment. After you are done running
dotnet publish -c Release you can finally deploy it. The deployment itself is heartbreaking as it takes ages to complete but when it finally deploys, things are looking quite good. I did have some problems connecting my DB from the .NET application so the ride is not that smooth.
Annoying pricing calculator where you gotta punch in vCPU's per hour, memory per hour, and persistent disk. I just wanna know how much an average application will cost. Is that too much to ask in the day and age of superadvanced AI's and so forth?
App Engine is a fully managed solution with features such as versioning, monitoring, and traffic splitting and all that good stuff come with a price. It's not that cheap when you are just testing something out or launching a small side project. There are however some tweaks you can do when testing out like adjusting the instance memory and stuff which makes it cheaper.
The downside is that .NET Core is not supported on their standard environment, only their flexible environment which is priced higher and scales automatically. This is not a bad thing but you could run into some surprises since there is no way to set a limit.
Their documentation is not something I like or hate. It's just not that good. The biggest problem is that it's not that easy to find what you are looking for since it's kinda messy. If you go to the main documentation page and click on C# you won't get an option to deploy it on App Engine, only Compute Engine.
The familiarity of the user interface hits me right in the face, and everyone that has ever been online in the last decade should feel the same. This is a google product and the interface is of high quality. The only issue I have with the interface is that it feels the same as using, for example, Google Search, Google Photos, or any other Google product. It doesn't feel as productive as it could be to be an enterprise cloud provider. But I do like it and it's also consistent throughout the services.
GCP has done a good job trying to cater to .NET developers, however, they seem to have lost interest at some point. This is too bad as I liked their app service (not the super slow deployment though) so they are probably a really good fit for other languages. I had higher hopes for them when it came to .NET core deployments but at least they have a lot of other stellar products in the likes of AI, Analytics, and Google Maps which I will probably use.
Amazon Web Services
AWS is a subsidiary of Amazon that provides plenty of cloud products. It launched first in summer of 2002 with a few tools and services and it was relaunched the in spring of 2006.
Elastik Beanstalk Elastik Beanstalk is an orchestration service that doesn't cost anything itself as you only pay for the services you are using, eq S3 storage.
The AWS team has made a pretty sturdy VS extension that makes deploying code easy. It was not available for Visual Studio 2019 at the beginning of the year but it's updated to support VS19 now. They also provide a lot of NuGet packages that are well designed and updated regularly.
The deployment itself is quite quick but Elastik Beanstalk requires more config than for example Azure. AWS also doesn't support Linux servers for .NET core applications and Elastik Beanstalk is a lot more to manage than the PaaS (Platform as a service) that GCP and Azure offer.
It's rather depressive to look at but it gets the job done. The monthly cost highlighted using the cheapest instance is $14.
The prices are very competitive but their services are very focused and you would have to do more work yourself. So, in the end, you need to figure out if you want to spend some extra time learning and configuring AWS properly than just cough up some extra cash for a pretty much configureless solution.
AWS has a lot of detailed documentation and it's quite easy to find what you are looking for as well. It could, however, be designed a tad more delicate but practicality beats beauty in these circumstances.
Elastik Beanstalk doesn't support Linux for .NET and you cannot use the free plan with it either.
The first impression is that this feels like an Amazon site which I describe as practical and unattractive. But all in all, a cloud provider should not be a piece of art, it should be practical, fast, and convenient. This is a tool for professionals and should be designed thereafter and in that sense, Amazon has done a good job. The site is fast and works well but in the end, it feels inconsistent, lazily designed, and unalluring.
AWS is the trusty old horse that has been on the market for a long time and has a lot of documentation and easy-to-find helpful resources as well. You can't go wrong with AWS because they also have so much to offer competitive prices but they have a lot of switches which requires you to spend more time to learn it all. It felt too clunky for me but there are solutions that can automate a lot like Ansible or Terraform so you wouldn't have to touch the GUI.
Azure by Microsoft is a cloud computing service through Microsoft-managed data-centers. It launched in winter of 2010 and it currently has over 600 services.
App Service App Service is a PaaS solution by Azure that is fully managed. Being a Microsoft product, it has first-class support for .NET core.
Developers, developers, developers. Steve Ballmer understood what's important and that's something Satya Nadella takes a step further. Deploying code to App Service is fully integrated into Visual Studio and it's a breeze. Fast as well. For the PowerShell connoisseur out there, Azure has a set of cmdlets that makes it easy to manage with PS.
This makes my heart blush and a euphoric feeling start to build up in my core. Did I pop a molly or am I gazing into the pricing calculator of Azure?
Simple and straight forward monthly pricing for both Windows and Linux.
Prices are not on the lowest side but the good thing is that they have economical plans for testing and developing which is a great addition. This makes it a breeze to test it out without thinking about getting a hefty bill. The greatest thing about Azure's pricing is that you don't need a PhD to understand how much you will end up paying every month.
I'm probably pretty biased to say this since I spend a lot of time on MSDN but the documentation for Azure services is excellent and pretty much always up to date.
The whole interface seems well designed and it is consistent as well. One thing I love is that Azure has a dark mode which either AWS or GCP has. The site feels fast as well so applaud Microsoft for taking the time to develop a good interface.
When it comes to the negative things, there are mainly two things that come to mind, most buttons and links don't act like links which makes it impossible to open in a new tab. This is a minor annoyance but still worth mentioning and the other issue is the whole sidescrolling adventure Azure got going. You can easily become lost in all the boxes here and there.
Microsoft has done a splendid job with Azure and their offering for .NET developers is unmatched. The documentation is of high quality and always up to date but the really strong selling point is the smooth developer experience which I cannot live without.
Azure is the cloud provider I'm going for. When it comes to deploying .NET code, Azure is the way to go but AWS and GCP are trying to make a decent experience for .NET developers as well but it's still miles away from the buttery smoothness of Azure deployments.
This writeup is far from complete as I still have a lot to say and test out so maybe there will be a part 2 in the future. If there are any questions, you can leave a comment or tweet at me or join the discussion on hackernews. For now, ill say, have a Happy Deployment.