All work
7th Computing clients, Southeast Asia · 2025 to 2026

AWS operations for a multi-client Odoo fleet

Day-to-day ownership of a dozen production Odoo workloads on AWS: EC2 sizing and migrations, load balancer routing, EBS recovery, fleet-wide S3 backups, and IAM clean-up, each change scripted and verified.

ROLECloud and systems engineer
AWSEC2EBSS3ALBIAMRoute 53
12+
Production AWS instances
Twice daily
Databases backed up to S3
20 min
Root-disk recovery

Summary

Most of the ERP systems I look after run on AWS in ap-southeast-1, one account per client. The work is not greenfield architecture; it is keeping live businesses running and making every change repeatable. These are the service areas I work in most and representative examples of each.

EC2

  • Resized a retailer’s instance to m6a.xlarge and built Python 3.12 and PostgreSQL 16 beside the existing stack so two Odoo versions could run on one machine during a cutover.
  • Moved workloads between instances and generations, including a case where an old distribution’s kernel would not boot on a newer instance type, which was traced and documented before the move.
  • Elastic IPs and routing checks before any cutover, because a VPC with no NAT gateway silently drops outbound traffic when an address is detached.

EBS

  • Recovered a production Odoo portal whose 550 GiB gp3 root volume went read-only after a storage stall and hung at boot on an orphan-inode list. Detached the volume, repaired it from a helper instance with e2fsck, reattached and booted in about twenty minutes, then wrote the recipe down.
  • Snapshot discipline before upgrades and migrations, and a separate data volume recommended where databases still live on root.

S3

  • A shared backup kit deployed across the fleet: pg_dump plus filestore sync to a versioned bucket, twice daily under cron with locking, with noncurrent versions expiring after 14 days. Each rollout is verified by downloading and inspecting the dump, not by trusting the exit code.
  • Found and fixed a case where the backup cron had kept dumping a frozen pre-upgrade database for five days after a cutover, leaving the live system without an off-site copy.
  • pgBackRest to S3 for a PostgreSQL primary and standby pair, with an IAM role scoped to that bucket only.

Application Load Balancer

  • Fixed an Odoo 17 cluster where every websocket request hit the HTTP workers and failed: added a target group for the evented port, path rules for the websocket routes on both listeners, and raised idle timeouts. Result: roughly 150 live connections and no more errors.
  • Decommissioned load balancers that were only fronting single instances, moving the hostnames to Cloudflare or direct records and deleting unused target groups.

IAM, VPC and DNS

  • Replaced static root access keys with scoped IAM users and instance profiles, and closed a default security group that exposed an internal port to the internet.
  • Route 53 zone changes and DNS-validated Let’s Encrypt certificates issued through the Route 53 plugin where a client’s certificate had lapsed.
  • CloudWatch for host metrics and the AWS CLI from a workstation profile per account, because the instances themselves deliberately carry no credentials.