Keel

How do small SaaS teams ship on AWS without breaking production?

By the Keel team · Last checked · 4 min read

Short answer

Small SaaS teams ship safely on AWS by making every release go through the same automated path: code in Git, tests in CI, a deploy that checks real health, and automatic rollback when those checks fail. Add backward-compatible database migrations and alerts that reach a person, and releases become routine instead of risky, even without a DevOps engineer.

What makes releases risky for small SaaS teams?

Releases are risky for small teams when they depend on a person rather than a process: someone deploys by hand, watches the logs, and decides whether to roll back.

That works until that person is busy, on holiday, or deploying at 5pm on a Friday. The fix is not more caution. It is a pipeline that makes the safe path the default.

This matters more now that teams ship more code. Google's 2025 DORA report found AI adoption has a positive relationship with delivery throughput but still a negative relationship with delivery stability, and that strong automated testing and fast feedback loops are what stop more change from becoming more instability.

What does a safe release pipeline look like on AWS?

A safe AWS release pipeline keeps everything in Git, checks every pull request, builds once, deploys with health checks, rolls back automatically, fails loudly in CI and alerts a person.

  1. Everything in Git. Application code and infrastructure, as Terraform or OpenTofu, both change through pull requests.
  2. Checks on every pull request. Tests, linting, a build, and a plan of infrastructure changes for review.
  3. One build, many environments. Build the container image once, then promote the same image from staging to production.
  4. Deploy with health checks. The load balancer and container health checks decide whether new tasks are healthy.
  5. Automatic rollback. The ECS deployment circuit breaker, and optionally CloudWatch alarms, roll back failed deployments.
  6. A pipeline that tells the truth. The CI job fails when ECS rolls back, so nobody believes a failed release worked.
  7. Alerts to a person. Errors and failed deploys reach someone, in Slack or by page.

How should a small team set up CI/CD for ECS?

A small team should keep ECS CI/CD simple: GitHub Actions builds and pushes an image to Amazon ECR, renders a new task definition with that image, and deploys it to the ECS service with the circuit breaker and rollback turned on.

Use OpenID Connect so GitHub assumes an AWS role, instead of storing long-lived access keys.

A minimal ECS pipeline
StageToolWhat it checks
Pull requestGitHub ActionsTests, lint, build, Terraform plan
Merge to mainGitHub ActionsBuild image once, push to ECR
Deploy stagingamazon-ecs-deploy-task-definitionService becomes stable on the new task definition
Smoke testA short script or synthetic checkKey pages and APIs respond
Deploy productionSame action, same imageCircuit breaker and alarms armed
VerifyA step that reads the ECS deployment stateFails the job if ECS rolled back

The step-by-step setup is in automatic rollback on ECS with GitHub Actions.

Is full CI/CD overkill for a small project?

No, as long as full means automated rather than elaborate. A pipeline with tests, one deploy step and automatic rollback takes a day or two to set up and removes most release risk.

What is overkill for a small project is complex release orchestration, many environments and approval chains nobody follows. Start with the minimal pipeline above and add steps only when a real incident shows the need.

Where does infrastructure as code fit in CI/CD?

Infrastructure as code belongs in the same review flow as application code.

Terraform or OpenTofu changes go in a pull request, CI posts the plan so a reviewer sees exactly what will change, and the apply runs from the pipeline after approval, not from someone's laptop. Destructive changes, such as deleting a database, should need a person and explicit approval every time.

How do database migrations stay safe during deploys?

Rolling back code does not roll back a database migration, so migrations must be safe to run before the new code is live and compatible with the old code if you roll back.

The common pattern is expand, then contract: first add new columns or tables without removing anything, ship code that uses them, and only remove the old structure in a later release once nothing needs it.

More on this in what a deployment health check should test, which also covers the checks that decide whether a release is healthy.

What should a small team set up first for safe releases on AWS?

Set up automatic rollback first, then a real health check, a CI job that fails on rollback, infrastructure as code, deploy alerts and an expand-and-contract rule for migrations.

  1. Turn on the ECS deployment circuit breaker with rollback for every service.
  2. Add a real health check endpoint and wire it to the load balancer.
  3. Make the CI job fail when ECS rolls back.
  4. Move manual infrastructure into Terraform or OpenTofu, one resource group at a time.
  5. Send failed deployments and error spikes to a Slack channel people read.
  6. Write down the expand and contract rule for migrations and follow it.

Once those are in place, a Friday release stops being a gamble, as covered in is it safe to deploy on a Friday.

How safe are your AWS releases today?

Tick each item that is true for every production service.

  • Application and infrastructure changes both go through pull requests.
  • CI runs tests on every pull request.
  • The same image is promoted from staging to production.
  • A real health check decides whether new tasks are healthy.
  • Failed deployments roll back automatically.
  • CI goes red when ECS rolls back.
  • Failed deploys alert a person.

Decision point: Six or seven ticks: releases are routine, any day of the week. Four or fewer: start with automatic rollback and a real health check this week.

Sources

  1. AWS docs, How the Amazon ECS deployment circuit breaker detects failures (checked October 2026)
  2. AWS docs, How CloudWatch alarms detect Amazon ECS deployment failures (checked October 2026)
  3. GitHub, aws-actions/amazon-ecs-deploy-task-definition (checked October 2026)
  4. Google Cloud, Announcing the 2025 DORA Report (September 2025)

Keep reading

Keel is an AWS release and recovery operations service for SaaS teams of 3 to 15 developers, provided by Bargainn Services Ltd, a UK company registered at Companies House (16497746). Registered office: 3rd Floor, 86-90 Paul Street, London, EC2A 4NE, United Kingdom.