VeUP
← All case studies
DevOps · Multi-environment IaC delivery
Tenderd wordmark

Tenderd: a Control Tower-governed, region-locked AWS landing zone in the UAE

Sovereign in-country landing zonePolicy-enforced region lockData residencyMulti-account segmentationPreventive controlsCentralized immutable audit loggingCentralized workforce identityIdentity federation & MFA enforcementEncryption-at-rest enforcementPrivate connectivity & network isolationInfrastructure-as-code foundationCI/CD delivery pipeline automationDay-2 runbooks & team enablementCloud-to-cloud migrationPhased cutover with parity validationContainer platform modernizationConnected device telemetry & alertingInfrastructure observabilitySecrets management & credential eliminationMigration TCO & business case modellingTarget-state architecture design & costed POC
Eligible
UAE public-sector contracts unlocked by in-country residency
2 → 5
governance and security maturity, five-point CAF scale
0
standing console access — every change through reviewed Terraform
Amazon ECS (Fargate)Amazon EventBridgeAWS LambdaAWS DataSync

The engineering discipline inside Tenderd’s GCP-to-AWS migration is the story here: VeUP built the estate as Terraform infrastructure-as-code spanning four delivery environments — dev, test, pre-prod, and production — with per-environment infrastructure unit testing, an Amazon ECS Fargate compute plane whose task scheduling is driven by Amazon EventBridge and AWS Lambda, and GitHub Actions pipelines doing the provisioning, so the AWS estate is built and rebuilt by commit, not by console.

The challenge

A platform migrating clouds while serving live enterprise fleets cannot afford environment drift: what works in staging must be exactly what production gets, across four environments and a full replatform of compute, data, streaming, and identity. On the source cloud, environments had accumulated by hand. The migration’s success — and its deliberately region-sequenced production cutover — depended on infrastructure that could be stamped out identically, validated automatically before promotion, and evolved through review rather than heroics.

The solution

VeUP authored the entire target estate as Terraform: VPCs, the ECS Fargate services, the EventBridge rules and Lambda functions that drive task scheduling, the data tier (Amazon RDS, ElastiCache, Amazon Redshift as the log warehouse), Amazon MSK streaming, and the Cognito + API Gateway identity front. Each of the four delivery environments is an instantiation of the same modules — pipeline stages, running inside the landing zone’s governed account boundaries — and each carries per-environment infrastructure unit tests, so promotion to the next environment happens only when the infrastructure itself passes. GitHub Actions pipelines execute the whole lifecycle (build / commit / pipeline / provision), making the AWS environment a reproducible build artifact. Data migration runs in the same discipline: AWS DataSync moves GCP Cloud Storage into Amazon S3, and MongoDB Atlas production data syncs continuously ahead of cutover. The production migration itself was sequenced to Middle East region availability — a customer-driven ordering the IaC model makes cheap, because standing up the production environment is a pipeline run, not a project.

Production outcomes

KPIResult
Environment parityFour delivery environments (dev / test / pre-prod / prod) instantiated from one Terraform codebase — drift structurally impossible, promotion gated by per-environment infrastructure unit tests.
Pipeline-provisioned estateGitHub Actions pipelines provision and update the AWS infrastructure end to end — the estate rebuildable from source, with every change reviewed as code.
Event-driven operationsECS Fargate task scheduling driven by EventBridge + Lambda — recurring platform work expressed as rules, not cron boxes, with no instances to patch anywhere in the compute plane.
Lessons & continuationTesting infrastructure per environment is what makes multi-environment IaC honest — a plan that applies isn’t proof it works; and when production must wait on an external gate (region availability), IaC turns the eventual cutover into a rehearsed pipeline run.
AWS services in production
Amazon ECS (Fargate)Amazon EventBridgeAWS LambdaAmazon RDSAmazon ElastiCacheAmazon RedshiftAmazon MSKAWS DataSyncAmazon S3Amazon CognitoAmazon API Gateway
TerraformGitHub Actions