Application migration into containers is a broad topic that encompasses a plethora of considerations and steps, depending on the type and scale of the application.
AWS has prepared a special white paper titled Container Migration Methodology that outlines a Strategy for Container Migration, introduces the Container Migration Maturity Model, and discusses Mobilization. These resources serve as foundational guides for migrating applications into containers on AWS. While its content is primarily based on Kubernetes and the Amazon EKS service, the knowledge gained can be transferable to migrations to other containerization platforms like Docker and ECS
The article focuses on the theoretical aspects of migration without specific implementation.
Strategy for Container Migration
Architects need to understand the technical details of the customer’s system to select the appropriate migration methods.
Key areas to assess include:
Business Capabilities
Determine the customer's business goals for container migration, like faster business system launch or cost savings. Involved roles typically include business and financial managers, budget owners, and strategic decision makers.
Understand the composition and skills of the customer's IT team to decide on involvement in the migration project and whether additional staffing or training is needed.
Evaluate project management structures, decision-making processes, and effectiveness of management tools. Key roles here include CIOs, project managers, and enterprise architects.
Technical Capabilities
Assess the customer's familiarity with AWS Cloud and container platforms, focusing on basic service concepts and skills.
Utilize tools like Immersion Day and Proof of Concept (PoC) to gauge the customer's understanding of AWS container services and to test migration feasibility.
Evaluate the customer's requirements for AWS infrastructure security, including network and encryption measures, authority management, and service account security needs.
Assess the customer's needs in monitoring, alarms, analysis, release management, and disaster tolerance to determine suitable solutions and optimizations.
The Container Migration Maturity Model
Evaluates a customer's container migration project's difficulty along two dimensions: platform operations capability and the technology stack of the source cluster. The operations technology's robustness impacts how the customer adapts to the new container platform during and after migration, while the technology stack influences the migration's difficulty and workload.
Key technical challenges in container and orchestration tool operations include:
Monitoring
Shifts from server to container and service status monitoring, requiring changes in monitoring methods and tools.
Logging
Necessitates pinpointing the specific container and host for application logs, with container dynamics impacting log collection.
Troubleshooting
Container environments require different approaches, as direct application modifications are not feasible.
Security
Rapid community version developments and permission management pose new operational challenges.
Network
Network plug-ins, crucial to container ecology, complicate network planning and design.
Operations platform functionality and the operations team's capabilities significantly influence container migration success. The platform's automation level and the team's skills determine the feasibility and efficiency of automatic deployment during migration.
The migration source cluster's technology stack is categorized into four scenarios:
Compatible Kubernetes
Easier migration to Amazon EKS for clusters built on AWS, while those on other cloud providers need network plugins, Ingress, and image repository considerations.
Variant of Kubernetes
Examples like OpenShift, which, despite being Kubernetes-based, have unique features like Ingress and specific CI/CD tools, posing migration challenges.
Heterogeneous Container Orchestration Engines
Systems like Apache Mesos and Docker Swarm, with differing design concepts and technologies, complicate migration.
Containerization
The most technically challenging, involving transitioning from server to containerized deployment, with risks like lack of developer support and micro-service requirements impacting migration progress.
Mobilization
In the mobilization phase of container migration, the focus is on understanding migration goals, forming a team, assigning roles, evaluating methods, and developing a project plan.
Discovery Phase
Conduct questionnaires and interviews to understand the customer's business and technical goals.
Gather information on the application system, migration timeline, expectations, personnel involved, and costs.
Technical Discovery
Determine the source cluster's platform, resource usage, application state, dependencies, and technology stack.
Report and Method Selection
Compile a research report detailing cluster information, image repository, logging, monitoring, CI/CD information, and business impact.
Choose a migration method based on container migration maturity model analysis, considering scenarios like Compatible Kubernetes, Variant Kubernetes, Heterogeneous container orchestration engines, and Containerization.
Planning
Develop a comprehensive migration plan covering project scope, timeline, resources, risks, team roles, project management, and communication.
Include technical planning for application migration sequence and dependencies.
AWS Landing Zone
Set up an initial AWS account and network structure, including security baselines and user access management, tailored for container projects.
Skills and Operations Model
Train a team experienced in AWS and Amazon EKS to lead the migration.
Design an operations model covering environment management, cluster operations, monitoring, logging, release management, and change management.
Security and Compliance
Develop a security plan based on customer-specific requirements, including cluster design, network isolation, image security, and runtime security.
Migration Execution
Implement the migration plan, starting with simple applications to gain experience.
Use automated processes or tools for efficient migration, and follow a checklist to ensure completion.
Validation and Cutover
Validate each application through functional, performance, and disaster recovery tests.
Execute the cutover plan, monitor for abnormalities, and be prepared to initiate a rollback plan if necessary.
What services are available for migrating applications into containers on AWS
To migrate applications into containers on AWS, several services are available, each offering unique capabilities:
Amazon Elastic Container Service (ECS)
This fully managed service facilitates the running and scaling of containerized applications. ECS automates the management of the underlying infrastructure.
Amazon Elastic Kubernetes Service (EKS)
EKS simplifies running Kubernetes on AWS by managing the Kubernetes control plane and nodes for you.
AWS Fargate
Fargate allows you to run containers without managing servers or clusters. It automates the provisioning and scaling of virtual machines, focusing solely on the containers.
AWS App Runner
This service automates the process of building container images from source code, deploying them to managed infrastructure, and auto-scaling based on demand, eliminating the need for infrastructure management.
AWS Elastic Beanstalk
Beanstalk simplifies deploying and managing containerized applications. It provides a managed environment for easy deployment and scaling.
Amazon Elastic Container Registry (ECR)
ECR is a managed Docker container registry, assisting in the storage, management, sharing, and deployment of container images.
AWS App2Container (A2C)
A2C is a tool for converting .NET and Java applications into containerized applications. It analyzes applications running in virtual machines or on-premises and assists in containerization.
AWS Copilot
Copilot is a CLI tool designed to help quickly launch and manage containerized applications on ECS, streamlining the deployment process.