Layer 04 of 14 · 9 tools

Data

Databases, migrations and the data lake.

My default

2 tools in this layer.

  • The only migration tool I use. It works.

    Pricing: Sydney: replication instances from $0.112 an hour (dms.t3.medium) or $0.25 (r6i.large), double for Multi-AZ, plus $0.138/GB-month of storage. DMS Serverless: $0.1155 per DCU-hour (1 DCU = 2 GB of memory), capped by the maximum you set. DMS Schema Conversion is free. Data into DMS, and between DMS and a database in the same Availability Zone, is free.

  • My go-to Postgres. Scales to zero, branches like git, and talks HTTP so Lambda needs no VPC or proxy.

    Pricing: Launch plan $0.106 per compute-unit hour, Scale $0.222; storage $0.35/GB-month; no minimum. Available in Sydney.

Use when it fits

3 tools in this layer.

  • Use when it fits Aurora PostgreSQL

    Peace of mind and scale, at a price. My choice when the client must stay all-AWS.

    Pricing: Serverless v2 kept at 0.5 ACU always-on ≈ $73 a month. RDS Proxy adds at least about $26 a month (provisioned) or about $146 (Serverless v2, minimum 8 ACU).

  • Use when it fits DuckDB

    SQL over Parquet that runs anywhere, from my laptop to a Lambda. Next to Athena, not instead of it.

    Pricing: Free and MIT-licensed. In Lambda you pay compute and S3 GETs: a query that reads 1 GB costs about $0.002, against $0.005 on Athena, with no 10 MB minimum per query.

  • Use when it fits S3 + Glue + Athena

    The data lake that works. Not amazing. Pair it with DuckDB.

    Pricing: Sydney: Athena $5 per TB scanned, 10 MB minimum per query. S3 Standard $0.025/GB-month. Glue Data Catalog free for the first million objects.

Skip

3 tools in this layer.

  • Overkill for most apps. Postgres full-text plus pgvector covers search.

    Pricing: Sydney, managed domains: $0.213 an hour per r7g.large.search node, so a three-node production domain is about $466 a month before storage ($0.1464/GB-month gp3). Serverless: $0.281 per OCU-hour; a classic collection bills at least 2 OCUs (about $410 a month, half in dev-test mode), while NextGen collections (May 2026) scale to zero after 10 idle minutes.

    Instead: Postgres full-text search plus pgvector, next to the data you already have.

  • The business case is thin, and there's no tooling to migrate thousands of databases. Durable Objects do per-tenant SQLite better.

    Pricing: $5 a month covers 50M reads, 2M writes and 2 GB. Workers Paid includes 25 billion rows read, 50 million rows written and 5 GB a month, then $0.001 per million rows read, $1 per million rows written and $0.75/GB-month. Rows read means rows scanned, not rows returned. No egress charge.

    Instead: Durable Objects for per-tenant SQLite; Neon for a normal database.

  • A Postgres connection pool for Workers only. My business logic isn't on Workers, so I don't need it.

    Pricing: Included in Workers Paid. Unlimited queries, no charge for pooling, caching or egress; you pay for the Workers plan and the database. The Free plan allows 100,000 queries a day.

    Instead: Neon's HTTP driver, which works from Workers and Lambda alike.

Never

One tool in this layer.

  • I've never had a use case it fits better than Postgres with JSONB.

    Pricing: Sydney, on demand: $0.71 per million write request units (1 KB each), $0.1425 per million read request units (4 KB strongly consistent, or two 4 KB eventually consistent reads), storage $0.285/GB-month after 25 GB free. Transactional reads and writes cost double. Point-in-time recovery storage $0.228/GB-month.

    Instead: Postgres on Neon, with JSONB for the document-shaped data.

Where they're used

The jobs that pick or avoid a tool from this layer.

Want this stack in your AWS account?

Cloudless Labs is a Sydney consultancy. We migrate on-premises systems to AWS, build serverless apps on this stack, and coach teams to ship with Claude Code and Codex.

Contact Us

For general inquiries, please contact us at:

For e-learning capabilities, please contact: