Migrate your Applications to Containers at Scale
AWS Architecture BlogMigrate your Applications to Containers at Scaleby John O'Donnell, Matt Aylward, and Bill Magee | on05 NOV 2021| inAmazon EC2,Amazon Elastic Container Registry,Amazon Elastic Container Service,Amazon Elastic Kubernetes Service,Amazon Simple Storage Service (S3),Architecture,AWS App2Container,AWS Identity and Access Management (IAM),Containers|Permalink|ShareAWS App2Containeris a command line tool that you can install on a server to automate the containerization of applications. This simplifies the process of migrating a single server to containers. But if you have a fleet of servers, the process of migrating all of them could be quite time-consuming. In this situation, you can automate the process using App2Container. You’ll then be able to leverage configuration management tools such as Chef, Ansible, orAWS Systems Manager. In this blog, we will illustrate an architecture to scale out App2Container, using AWS Systems Manager.Why migrate to containers?Organizations can move to secure, low-touch services withContainers on AWS. Acontaineris a lightweight, standalone collection of software that includes everything needed to run an application. This can include code, runtime, system tools, system libraries, and settings. Containers provide logical isolation and will always run the same, regardless of the host environment.If you are running a.NET applicationhosted onWindows Internet Information Server (IIS), when it reaches end of life (EOL) you have two options. Either migrate entire server platforms, or re-host websites on other hosting platforms. Both options require manual effort and are often too complex to implement for legacy workloads. Once workloads have been migrated, you must still perform costly ongoing patching and maintenance.Modernize with AWS App2ContainerContainers can be used for these legacy workloads viaAWS App2Container. AWS App2Container is a command line interface (CLI) tool for modernizing .NET and Java applications into containerized applications. App2Container analyzes and builds an inventory of all applications running in virtual machines, on-premises, or in the cloud. App2Container reduces the need to migrate the entire server OS, and moves only the specific workloads needed.After you select the application you want to containerize, App2Container does the following:Packages the application artifact and identified dependencies into container imagesConfigures the network portsGenerates the infrastructure,Amazon Elastic Container Service (ECS)tasks, and Kubernetes pod definitionsApp2Container has a specific set of steps and requirements you must follow to create container images:Create anAmazon Simple Storage Service (S3)bucket to store your artifacts generated from each server.Create anAWS Identity and Access Management (IAM)user that has access to the Amazon S3 buckets and a designatedAmazon Elastic Container Registry (ECR).Deploy a worker node as anAmazon Elastic Compute Cloud (Amazon EC2)instance. This will include a compatible operating system, which will take the artifacts and convert them into containers.Install the App2Container agent on each server that you want to migrate.Run a set of commands on each server for each application that you want to convert into a container.Run the commands on your worker node to perform the containerization and deployment.Following, we will introduce a way to automate App2Container to reduce the time needed to deploy and scale this functionality throughout your environment.Scaling App2ContainerAWS App2Container streamlines the process of containerizing applications on a single server. For each server you must install the App2Container agent, initialize it, run an inventory, and run an analysis. But you can save time when containerizing afleetof machines by automation, using AWS Systems Manager. AWS Systems Manager enables you to create documents with a set of command line steps that can be applied to one or more servers.App2Container also supports setting up a worker node that can consume the output of the App2Container analysis step. This can be deployed to the new containerized version of the applications. This allows you to follow the security best practice ofleast privilege. Only the worker node will have permissions to deploy containerized applications. The migrating servers will need permissions to write the analysis output into an S3 bucket.Separate the App2Container process into two parts to use the worker node.Analysis.This runs on the target server we are migrating. The results are output into S3.Deployment.This runs on the worker node. It pushes the container image to Amazon ECR. It can deploy a running container to either Amazon ECS orAmazon Elastic Kubernetes Service (EKS).Figure 1. App2Container scaling architecture overviewArchitectural walkthroughAs you can see in Figure 1, we need to set up an Amazon EC2 instance as the worker node, an S3 bucket for the analysis output, and two AWS Systems Manager documents. The first document is run on the target server. It will install App2Container and run the analysis steps. The second document is run on the worker node and handles the deployment of the container image.The AWS Systems Manager targets one or many hosts, enabling you to run the analysis step in parallel for multiple servers. Results and artifacts such as files or .Net assembly code, are sent to the preconfigured Amazon S3 bucket for processing as shown in Figure 2.Figure 2. Container migration target serversAfter the artifacts have been generated, a second document can be run against the worker node. This scans all files in the Amazon S3 bucket, and workloads are automatically containerized. The resulting images are pushed to Amazon ECR, as shown in Figure 3.Figure 3. Container migration conversionWhen this process is completed, you can then choose how to deploy these images, using Amazon ECS and/or Amazon EKS. Once the images and deployments are tested and the migration is completed, target servers and migration factory resources can be safely decommissioned.This architecture demonstrates an automated approach to containerizing .NET web applications. AWS Systems Manager is used for discovery, package creation, and posting to an Amazon S3 bucket. An EC2 instance converts the package into a container so it is ready to use. The final step is to push the converted container to a scalable container repository (Amazon ECR). This way it can easily be integrated into our container platforms (ECS and EKS).SummaryThis solution offers many benefits to migrating legacy .Net based websites directly to containers. This proposed architecture is powered by AWS App2Container and automates the tooling on many targets in a secure manner. It is important to keep in mind that every customer portfolio and application requirements are unique. Therefore, it’s essential to validate and review any migration plans with business and application owners. With the right planning, engagement, and implementation, you should have a smooth and rapid journey to AWS Containers.If you have any questions, post your thoughts in the comments section.For further reading:Accelerating your Migration to AWSGenerating CI/CD Pipelines for Containerized ASP.NET Applications using AWS App2ContainerAccelerating large-scale migrations to AWS with CloudEndure Migration FactoryApp2Container FAQsJohn O'DonnellJohn O’Donnell is a Senior Solution Architect and is the Northeast Migration Ambassador as well as the HCLS Industry SA Region SME. John spent the previous three years in AWS Professional Services (ProServe), where he had the opportunity to guide the cloud journey at Vanguard (Malvern, PA).Matt AylwardMatt Aylward is a Solutions Architect at Amazon Web Services (AWS) who is dedicated to creating simple solutions to solve complex business challenges. Prior to joining AWS, Matt worked on automating infrastructure deployments, orchestrating disaster recovery testing, and managing virtual application delivery. In his free time, he enjoys spending time with his family, watching movies, and going hiking with his adventurous dog.Bill MageeBill is a Solutions Architect at AWS supporting customers in the Education vertical. He loves all things Serverless and Devops. Both allow software engineers to focus on delivering value for their customers. In his free time, he likes traveling and trying new restaurants.
AWS App2Container is a command line tool that you can install on a server to automate the containerization of applications. This simplifies the process of migrating a single server to containers. But if you have a fleet of servers, the process of migrating all of them could be quite time-consuming. In this situation, you can […]
John O'Donnell
Amazon EC2 Amazon Elastic Container Registry Amazon Elastic Container Service Amazon Elastic Kubernetes Service Amazon Simple Storage Service (S3) Architecture AWS App2Container AWS Identity and Access Management (IAM) Containers