Running .NET Applications in the AWS Cloud
The AWS Cloud provides a number of benefits, including elasticity, scalability, and flexibility, but many legacy applications were designed with the server hardware and infrastructure as critical aspects of the application’s design.
Architects and software engineers had little choice but to shape .NET applications into existing deployment environments, which generally involved a fixed set of resources that often needed to be shared across a number of applications or services.
For the many legacy .NET applications, the most suitable compute choice for running
applications in AWS is using virtual machines, using either AWS Elastic Beanstalk
In contrast, with the advent of .NET Core, modern .NET Core applications can be designed to take advantage of all the cloud benefits. Modern applications can use the traditional set of compute choices, and also target various types of serverless environment, including AWS Fargate or AWS Lambda.
.NET 5 now also allows performant hosting of workloads on ARM64
AWS deployment targets for compute workloads
For new applications, consider serverless options for innovative and highly-elastic workloads, and then consider the various container options or virtual machines when there are specific dependencies on the environment or when more precise control over the infrastructure is needed.
For legacy .NET applications, virtual machines are often considered the natural choice,
although the integration of Docker with Windows
Subsequent sections cover each of these compute choices in more detail. However, prior to choosing a compute environment, you must choose an operating system for hosting an application, and choose a suitable architectural style.