Skip to content

Modernizing Windows Server Applications on AWS

When DevOps teams seek to host their Microsoft-based applications, they may not immediately think of Amazon Web Services (AWS). However, the ease and efficiency with which AWS supports modernizing apps in the cloud make it a top contender for hosting applications.

After all, AWS is a cloud market leader with a mature offering and 13 years of experience running Microsoft workloads. In fact, almost sixty percent of public cloud Windows instances were on AWS in 2018, double the nearest cloud provider. AWS offers twice the SQL server performance and twice as many regions as their nearest competitor, with the potential for cost savings of more than a third. re:Invent 2021 announcements included faster speeds and price reductions on some services, too, with new Graviton3 processors available for Amazon Elastic Compute Cloud (EC2) instances.

In this article, we’ll explore various ways to modernize and migrate Windows workloads to AWS.

Adopting the Lift-and-Shift Approach

The “lift-and-shift” approach — also referred to as rehosting — enables moving a resource or application, as well as its associated data, to the cloud without the need for redesign. 

Organizations use this approach to migrate on-premises applications to the public cloud. The Amazon Elastic Cloud Compute (Amazon EC2) platform runs Windows applications as-is, supporting Windows and all major operating systems. Amazon EC2 adopters enjoy scalable computing capacity in the cloud and a secure and reliable platform for deploying Windows-based applications. 

Windows on Amazon EC2

As part of the lift-and-shift approach, AWS offers various options for running Windows Server and SQL Server on Amazon EC2.

Bring Your Own License (BYOL)

Previously, DevOps and developers migrating their on-premises Windows Server and SQL Server licenses to AWS had to self-manage the complex licensing terms and conditions. For larger organizations, navigating these requirements has often demanded experienced subject matter experts.  

To simplify these migration processes, AWS released BYOL in December 2019. This option enables users to seamlessly create virtual machines in Amazon EC2 using their existing licenses. It considerably simplifies the overall management of licenses and hosts.  

License Included Instances

Managing commercial licenses for Microsoft software and other providers can be daunting because of limited visibility. Companies not using third-party license providers tend to over-provision or under-provision their licenses. This mismatched provisioning results in wasted purchases or steep penalties.

 To overcome this, AWS offers license-included instances. Customers access fully-compliant and fully-managed Microsoft software licenses. This pay-as-you-go product comes bundled with Amazon EC2 or Amazon Relational Database Service (RDS) instances. Amazon RDS for SQL Server customers access databases without the overhead of managing the underlying infrastructure.

AWS also provides an option to migrate self-managed Microsoft SQL Server database instances to a fully-managed database on Amazon RDS. Amazon RDS supports six different database engines, including Microsoft SQL Server and Amazon Aurora, with the license included. Organizations can migrate their self-managed database instances to these AWS-managed instances using the AWS Database Migration Service (DMS).

Amazon Aurora is a fully-managed MySQL- and PostgreSQL-compatible relational database. The AWS Schema Conversion Tool (SCT) enables users to migrate an SQL server database to the Amazon Aurora MySQL-Compatible Edition database. AWS SCT automatically converts the SQL Server schema to the target Aurora MySQL schema.

SQL Server on Amazon EC2 Linux Instances

Amazon EC2 offers the option to run SQL Server on a Windows Server virtual machine. DevOps and developers can also run Microsoft SQL Server on Ubuntu and Amazon Linux 2, including license.

Amazon Linux 2 is AWS’ Linux server operating system. It’s available as an Amazon Machine Image (AMI).

AWS also runs .NET Core on Amazon Linux 2 and Ubuntu, so users can easily deploy and run .NET applications and modernize their .NET and SQL workloads on open-source Linux operating systems. Using open-source software saves organizations the cost of Windows Server licenses. 

Modernize Apps Built on the Microsoft Stack

Many organizations start their cloud journey with a lift-and-shift approach, enabling them to run their .NET applications on Amazon EC2 without any code changes. Beyond the lift-and-shift approach, Amazon offers several avenues to modernize and build high-performing applications on the Microsoft .NET stack. Let’s explore some of these approaches. 

AWS Lambda Functions

Teams already using C# and .NET Framework can leverage their skills to build and deploy serverless applications on the AWS platform. AWS Lambda is one of the most popular options for building serverless applications.

AWS Lambda is a stateless, event-driven, and highly scalable function independent of the developer’s operating system and hardware resources. Amazon manages the infrastructure for running this function.

The developer provides a function—literally just a block of code—to AWS. The cloud provider then executes that code. The developer doesn’t need to provision or manage any infrastructure to run a Lambda function.   

Amazon Elastic Container Service

Gone are the days when containers only supported code and tooling for Linux applications. Docker Windows Containers have now brought container functions to Microsoft Windows Server. Amazon recently added support for running production workloads in Windows containers using Amazon Elastic Container Service (ECS), a container orchestration service.  

Amazon Elastic Kubernetes Service

DevOps and developers can deploy Windows Server applications on Kubernetes instead. So, Windows and Linux containers can run side-by-side in the same Kubernetes environment.

Amazon Elastic Kubernetes Service (EKS) makes this possible. The Amazon EKS container orchestration service provides a managed Kubernetes platform that now supports Windows containers.  

.NET Core Apps on Linux Containers Using AWS Fargate

The ASP .NET Core framework is becoming the platform of choice for companies building microservices applications using .NET. This popularity stems from the framework’s cross-platform support. Developers can build and deploy .NET applications on a variety of platforms, including Linux.

There has been an increasing drive to host microservices-based applications using Amazon ECS, primarily because of AWS Fargate’s benefits. AWS Fargate is a serverless compute engine for containers running on Amazon ECS or Amazon EKS. It removes the need to provision, manage, or scale infrastructure and is the easiest way to get started with containers on AWS.

AWS Fargate supports many programming languages and frameworks, including C# and .NET Core. This support makes AWS Fargate a good starting point for .NET teams to modernize their applications on AWS.

CI/CD Pipelines for .NET Applications in AWS

AWS also provides tools to create continuous integration and continuous delivery (CI/CD) pipelines, which will deploy applications to the AWS infrastructure. These tools also support .NET applications. Most of the focus is on .NET Core, the .NET family’s newer cross-platform framework, but the tools also support the many applications still using .NET Framework. 

The end-to-end CI/CD pipeline covers building, testing, and deploying .NET applications on AWS. DevOps and developers can do all this using source control, AWS CodeBuild, and AWS CodePipeline.

AWS CodePipeline orchestrates the build pipeline by automating the build, test, and deploy stages every time the code pushes to source control. The source control can use tools like AWS CodeCommit, GitHub, or others. Then, AWS CodeBuild compiles the source code, runs tests, and produces deployment artifacts. It can also run Entity Framework (EF) Core migrations.  

Porting Assistant for .NET

In the quest to modernize .NET applications, many organizations are upgrading, or porting, their .NET Framework applications to .NET Core. This shift takes advantage of .NET Core’s cross-platform benefits, allowing the applications to run on Linux.

Porting can be a tedious manual process. Developers and DevOps must identify incompatible dependencies and APIs. AWS’s Porting Assistant for .NET eliminates all of that manual work.

Porting Assistant for .NET scans the target .NET Framework applications to identify incompatibilities with .NET Core. It then produces a compatibility assessment and suggests known replacements. This tool saves organizations a significant amount of valuable time, and it has never been easier to port .NET Framework applications to .NET Core.  

Next Steps 

Companies already running their workloads on AWS don’t have to change cloud providers to run Microsoft workloads. AWS provides numerous tools and platforms to run Microsoft workloads, including .NET applications. The provided tools even help move the workloads to AWS safely and reliably.

Running Microsoft workloads on AWS is even more straightforward when partnered with a managed cloud service provider like Mission. Learn more about how Mission can manage and modernize your Windows workloads on AWS.

Author Spotlight:

Juan Cortes

Keep Up To Date With AWS News

Stay up to date with the latest AWS services, latest architecture, cloud-native solutions and more.