Technology · Cloud & data

AWS, built as code and run like a product.

AI-native AWS engineers for landing zones, migrations, serverless and container platforms, data pipelines and cost control — Terraform-managed, observable, and handed over with the runbook.

AWSWhat we build with it
01Landing zones and account structure
02Container platforms on EKS and ECS
03Serverless and event-driven back ends
04Data platforms
05Migrations from data centres
06AI workloads
Usually runs with
  1. Terraform
  2. EKS
  3. Lambda
  4. Aurora PostgreSQL
  5. S3
  6. SQS
Why we use it

AWS is often the cloud a client already has.

AWS is often the cloud a client already has an account on, and the one with the deepest catalogue: a managed service for almost every component we would otherwise run ourselves. That breadth is the point and the danger. Used well, an AWS estate is a handful of well-chosen services — EKS or ECS, RDS for PostgreSQL, S3, SQS, a queue-driven Lambda or two — described entirely in Terraform. Used badly, it is two hundred resources nobody can name, a bill nobody can explain, and an IAM policy with a star in it.

We build the first kind. Our own products run on cloud infrastructure managed as code, and the same discipline goes into client accounts: a landing zone with organisations and SCPs, workloads in private subnets, identity through IAM Identity Center, everything observable, everything reproducible from a repository. The service we run under it is DevOps & Cloud; the move onto it is Cloud Migration.

When we don’t: an organisation with a Microsoft 365 estate, Entra ID and an existing enterprise agreement usually gets more from Azure; analytics-heavy teams who live in BigQuery are often better served on Google Cloud; and a small web product with no compliance burden can ship on Vercel and a managed Postgres without a cloud account at all. We are experienced across all three majors and financially neutral, so the recommendation follows your constraints, not ours.

What we build with it

Six things we ship on AWS.

01

Landing zones and account structure

AWS Organizations with separate accounts per environment and workload, service control policies, centralised logging, IAM Identity Center for people and roles for machines — the foundation every later decision rests on.

02

Container platforms on EKS and ECS

Managed Kubernetes with Karpenter for node provisioning, ArgoCD for deployments and IRSA so pods get exactly the permissions they need. ECS Fargate where a cluster is more platform than the team wants.

03

Serverless and event-driven back ends

Lambda, SQS, EventBridge and Step Functions for workloads that are spiky or asynchronous by nature — webhook ingestion, document processing, scheduled settlement runs — with idempotent handlers and dead-letter queues from the first commit.

04

Data platforms

RDS and Aurora for PostgreSQL, S3 as the lake, Glue and Athena or Redshift for the warehouse, MSK when Kafka is the backbone — the Data Engineering stack, managed.

05

Migrations from data centres

Database Migration Service for the schema and the ongoing replication, Application Migration Service for the servers that must move as they are, and a cutover plan rehearsed before the weekend it happens on.

06

AI workloads

Bedrock for managed model access inside your account boundary, SageMaker for training and hosting, and the retrieval, evaluation and guardrail layers from our AI & Machine Learning practice around them.

Fit

When to choose it.

Right fit

Choose AWS when you need the widest set of managed services behind one identity and billing boundary, when your engineers already know it, or when a partner, marketplace or regulator expects it. It fits event-driven systems particularly well — SQS, EventBridge, Lambda and Kinesis are mature, cheap at low volume and predictable at high volume. It also fits organisations planning to run many workloads, because the account-per-workload model isolates blast radius and cost in a way a single subscription rarely does.

Look elsewhere

Look elsewhere when your identity, licensing and collaboration estate is Microsoft end to end — Azure’s integration with Entra ID and the Windows workloads you already own can save money and friction. Look elsewhere too when the product is a single web application with modest scale: a cloud account brings a landing zone, IAM and a networking layer that a small team does not need yet. We will say so before you sign anything.

In practice

A Postgres instance that is private, encrypted and backed up by default.

rds.tfhcl
module "orders_db" {
  source          = "./modules/rds-postgres"
  identifier      = "orders-${var.env}"
  engine_version  = "16.3"
  instance_class  = var.env == "prod" ? "db.r7g.large" : "db.t4g.medium"
  # Private subnets only; the app reaches it through a security-group rule, never the internet
  subnet_ids      = module.vpc.private_subnet_ids
  kms_key_arn     = aws_kms_key.data.arn
  multi_az        = var.env == "prod"
+ backup_retention_days = 35
+ deletion_protection   = var.env == "prod"
  tags            = local.tags
}
Reference architecture

A typical Odeontech workload account on AWS.

Edge
Route 53CloudFront & WAFApplication Load BalancerAPI Gateway
Compute
EKS (Karpenter, ArgoCD)Lambda & Step FunctionsECS FargateSQS & EventBridge
Data
Aurora / RDS PostgreSQLS3ElastiCache (Redis)MSK (Kafka)
Platform
Organizations & SCPsIAM Identity CenterTerraform & GitHub ActionsCloudWatch, OpenTelemetry & Grafana
Our standards

What the AWS estates we hand over have.

  • Everything in Terraform. No resource created in the console survives the next apply. Plans are reviewed in pull requests and applied by a pipeline, not a laptop.
  • Least-privilege IAM as code. Roles per workload, permission boundaries, no long-lived access keys, and IAM Access Analyzer findings treated as build failures.
  • Private by default. Databases, caches and clusters in private subnets; VPC endpoints for S3 and the AWS APIs; one deliberate ingress path through the load balancer and WAF.
  • Encryption with keys you control. KMS customer-managed keys for data stores and backups, with rotation on and key policies reviewed like any other access rule.
  • Observability wired in. CloudWatch and OpenTelemetry feeding Grafana dashboards, SLO-based alerts for the symptoms users feel, and CloudTrail plus Config in a log-archive account nobody can edit.
  • Backups that have been restored. Retention set per data class, cross-region copies for the systems that need them, and a restore rehearsed and timed before go-live.
  • Cost as a design input. Tagging enforced by policy, budgets with alerts per account, Graviton and Savings Plans where the workload is steady, spot where it is safe.
  • Residency decided early. Region choice, replication scope and access paths documented for KVKK and GDPR before the first resource exists, not after the audit.
Typical pairings

What usually ships alongside the infrastructure.

  • A Terraform repository per landing zone and per workload, with modules, environments and a documented promotion path
  • An account map: which account holds what, who can assume which role, and where the logs go
  • CI/CD pipelines that plan, scan, apply and deploy — with rollback tested, not assumed
  • Grafana dashboards and alert policies for the four golden signals, exported as code
  • A cost baseline with tags, budgets and a rightsizing register reviewed regularly, at a rhythm agreed with you
  • Runbooks for deploy, rollback, failover, restore and the incidents we rehearsed together
Usually runs with
TerraformEKSLambdaAurora PostgreSQLS3SQSEventBridgeMSKGitHub ActionsArgoCDOpenTelemetryGrafana
FAQ

Frequently asked questions

The one your data-residency obligations and latency budget allow — usually an EU region such as Frankfurt, with the region choice, replication scope and access controls documented in the landing-zone design for KVKK and GDPR. Where the law or a regulator requires data to stay in Türkiye, we design a hybrid split rather than pretend the problem away.
Often serverless or ECS Fargate is enough, and we will say so. EKS earns its keep when you run many services, need portability, or have a platform team to operate it. The decision is made per workload in writing, not by default.
Yes. We start with a posture and cost review — IAM, networking, encryption, backups, tagging — and import what exists into Terraform before changing anything. You get the findings ranked by risk and a plan designed to keep production up while we fix them.
Tagging enforced by policy, budgets and anomaly alerts per account, Savings Plans for steady load, Graviton where the runtime supports it, and a regular rightsizing pass, at a rhythm agreed with you.
Set in the contract for each engagement.
Related

Neighbouring stacks and the services that use them.

An AWS estate to build, move or tidy.

Tell us what runs where and what keeps you up at night. An AWS engineer reads it and replies in writing with how we would approach it.

✓ No pitch deck✓ Reply from an AI-native engineer✓ Written follow-up