Setting Up a CI/CD Pipeline with Docker and Kubernetes
A well-designed CI/CD pipeline turns deployment into a routine, stress-free operation. Here is how we build one with Docker and Kubernetes, step by step.
· 4 min read
A successful AWS migration is decided before the first instance is created. This article details the approach, the migration strategies and the most expensive mistakes we see in the field.
by Agencei · Published on · Updated on · 5 min read
The usual motivations are the end of life of a host or hardware, the need for elasticity in the face of traffic peaks, access to managed services (databases, queues, object storage) and the desire to reduce manual operations. These are good reasons, provided you write them down.
A migration is not an end in itself. A server moved as-is to the cloud often costs more than before if it is neither right-sized nor automated. The gain comes from using managed services, from automation and from shutting down unnecessary resources, not from a simple change of address.
Set measurable objectives from the start: expected availability, target monthly budget, recovery time in case of incident, regulatory requirements on data location. They will guide every technical decision that follows and allow you to judge the result.
An exhaustive inventory is essential: servers, applications, databases, scheduled jobs, network dependencies, certificates, DNS, third-party integrations. Failed migrations almost always forget a component nobody had documented, such as a script on a backup server or an IP address whitelisted at a partner.
For each application, record its criticality, acceptable maintenance windows, data volume, rate of change and the state of the code. This information determines the migration strategy and the order of migration, and it prevents you from treating every system the same way.
This work leads to an estimate of target costs, using the AWS pricing calculator, and a documented decision per component. AWS provides assessment and tracking tools such as Migration Hub, but the quality of the inventory depends above all on the involvement of the teams that operate the systems.
AWS popularised the "6 Rs" grid to classify migration strategies, now extended to seven with relocate, which moves a virtualisation platform without modifying it. Each application can fall under a different strategy; that is normal and even desirable.
The following table summarises these strategies. In practice, a first pass with rehost or replatform, followed by gradual modernisation once the infrastructure is stable, is the most common path for companies that cannot freeze their activity during the project.
| Strategy | Principle | When to use it |
|---|---|---|
| Rehost (lift and shift) | Move the application as-is onto EC2 instances | Short timeline, stable application, few changes possible |
| Replatform | Move while replacing some components with managed services (RDS, S3, ELB) | Quick operational gain without rewriting |
| Repurchase | Replace with a SaaS solution | Standard application with no differentiating value |
| Refactor / Re-architect | Rewrite to exploit the cloud (containers, serverless, decoupling) | Strategic application, elasticity or resilience needs |
| Retire | Decommission | Unused or redundant application |
| Retain | Keep on premises for now | Regulatory constraints, unjustified migration cost, end of life approaching |
Before migrating anything, set up a clean foundation: a multi-account organisation with at least production and non-production separated, identity management with IAM Identity Center, a VPC network with public and private subnets, centralised logging with CloudTrail, and naming and tagging policies for resources.
This foundation must be described as infrastructure as code (Terraform, OpenTofu or CloudFormation). That is what makes the environment reproducible, auditable and scalable. A foundation built by hand in the console quickly becomes impossible to understand and to evolve safely.
Also define the backup strategy, encryption (KMS) and budget alerts at this stage. It is much harder to add them afterwards to dozens of resources already in production, and that is often where unpleasant surprises come from.
Start with a pilot application, non-critical but representative, to validate the tools and the procedure. Then organise migrations in coherent waves, grouping applications that share dependencies, so that you never cut a link between two systems that talk to each other.
For servers, AWS Application Migration Service replicates disks continuously and allows a cutover with minimal interruption. For databases, AWS Database Migration Service provides continuous replication while the old database stays active, so you can switch once everything has been verified.
Each wave must include functional tests, load tests, a cutover rehearsal and a written rollback plan with a clear trigger criterion. The DNS switch itself must be prepared by lowering the TTL of the records several days in advance.
The first pitfall is cost. Oversized instances, orphaned volumes, test environments never shut down and unanticipated outbound traffic drive the bill up. Systematic tagging, budget alerts and a monthly cost review are essential from the first month.
The second is security: overly broad IAM permissions, exposed S3 buckets, security groups opened to the Internet "temporarily". Adopt least privilege from the start and enable detection services such as GuardDuty, which flag abnormal behaviour.
The third is human. A team used to physical servers must learn new tools, new practices and a new cost logic. Plan for training and support; the success of the migration is also measured by the team's autonomy after the project.
Once applications are stable, right-size resources based on real metrics, use reserved instances or Savings Plans for stable workloads, and automate shutting down non-production environments outside working hours.
This is also the time to start modernising: containerisation, CI/CD, managed databases, observability. The migration created the foundation; the value comes from what you build on top of it in the following months.
We scope the project, build the foundation and run the migration in waves, with a rollback plan tested at every step.
A well-designed CI/CD pipeline turns deployment into a routine, stress-free operation. Here is how we build one with Docker and Kubernetes, step by step.
· 4 min read
Changing engine, schema or host without cutting the service is possible, provided you choose the right strategy and prepare the cutover. Here are the proven approaches and when to use each one.
· 4 min read
A 500 error says only one thing: the server failed. Finding out why takes a method, not luck. Here is the one we apply, whatever the technology.
· 5 min read
Migration of applications and infrastructure to the public cloud, from lift-and-shift to re-architecture.
See this serviceDesign, deployment and optimisation of AWS infrastructure: compute, databases, storage, IAM, costs.
See this serviceSetting up CI/CD, infrastructure as code, monitoring and GitOps practices.
See this serviceFull transfer of a dedicated server or VPS to a new machine, with OS upgrade and a controlled cutover.
See this serviceDescribe your need in a few lines: we come back to you with a first analysis and the next steps.