Choice 10. By Nicolas Dao

Neon or Aurora?

I need Postgres for an app on AWS. When is Neon the right call, and when does it have to be Aurora?

Neon by default: it scales to zero, branches like git, and talks HTTP so a Lambda needs no VPC or proxy. Aurora when the client must stay all-AWS, wants Bedrock Knowledge Bases on SQL, or runs heavy, constant or global load. Both across a portfolio, not inside one app: Neon for new products and previews, Aurora for the all-AWS client's production, and a Postgres-to-Postgres move between them when one outgrows its home.

When to pick which

Pick Neon when

  • A new app on Lambda, Workers or anything else, especially a small or spiky one.
  • Preview environments: a database branch per pull request, in seconds.
  • A Lambda that should reach the database over HTTP, with no VPC, no NAT and no RDS Proxy.
  • Relational data plus JSONB documents, and pgvector next to the data.

Pick Aurora when

  • The client is AWS-only, or needs IAM, VPC-only networking and AWS compliance.
  • Bedrock Knowledge Bases with SQL access to the same chunks: Aurora is the only Postgres they support.
  • Heavy, constant or global load: high throughput, high availability, geo-replication. At that scale it can also be cheaper than Neon.
  • Joining live tables with the data lake in one SQL query (aurora_analytics).

Both, when

  • Across a portfolio, yes: Neon for new products, prototypes and most clients; Aurora for the client who must stay all-AWS.
  • Not as dev and prod of one app: the reasons that put production on Aurora (inside AWS, Bedrock Knowledge Bases, aurora_analytics) are the ones a Neon branch can't reproduce.
  • Over time, yes: both are Postgres, so an app that outgrows Neon moves to Aurora with a dump and restore, or with DMS replication when it can't go offline.

Questions that change the answer

  • Must the data stay inside the client's AWS accounts for compliance? Then it's Aurora, whatever the size.

  • Will you use Bedrock Knowledge Bases over SQL? Only Aurora is supported.

  • Is the load small and spiky, or heavy and constant? Spiky favours Neon's scale to zero; heavy and steady is where Aurora, with a commitment, can cost less.

  • Do you want a database per pull request? Neon's branches do it in seconds.

The short version

Neon Aurora PostgreSQL
My verdict My default Use when it fits
Where it runs Neon's platform, available in Sydney Inside the client's AWS account
Lowest monthly cost No minimum: scales to zero About $73 for Serverless v2 kept at 0.5 ACU
Compute price $0.106 per CU-hour (Launch), $0.222 (Scale) Serverless v2 or provisioned; Reserved Instances on provisioned
Storage $0.35 per GB-month $0.11 per GB-month
Idle Scales to zero after 5 minutes; wakes in a few hundred ms Can pause at 0 ACU; resumes in about 15 s, 30+ after a day
Lambda connections HTTP driver: no VPC, no proxy RDS Proxy: at least about $26 a month (provisioned), about $146 (Serverless v2)
Branch per pull request Yes, in seconds No
Bedrock Knowledge Bases on SQL No Yes, the only Postgres they support
Query the data lake from SQL No: DuckDB in a Lambda Yes: aurora_analytics, read-only
Pulumi Through the Terraform provider, pinned Official (@pulumi/aws)

Why Neon is my default

Most of what I build is a new app on Lambda or Workers, with load that comes and goes. Neon fits that shape. It scales to zero when nobody is using it, so a quiet app costs storage and nothing else. Branches are my favourite feature: a full copy of the database per preview environment, in seconds, thrown away with the pull request.

The connection story is the other half. With Neon's HTTP driver, a Lambda talks to Postgres with no VPC, no NAT and no RDS Proxy. On Aurora that same Lambda goes through RDS Proxy, which is extra config and the part of Aurora I like least. One Postgres with JSONB and pgvector also replaces a separate NoSQL store and a vector database at my clients' scale.

Two things to size properly. The pooled endpoint accepts 10,000 clients, but real concurrent transactions are about 90% of max_connections: roughly 94 at 0.25 CU, 377 at 1 CU. Size compute for transactions, not clients. And the HTTP driver has no interactive transactions: use the serverless driver's WebSocket mode when you need a session.

Watch item: Databricks bought Neon in 2025. Prices went down since, and it still runs as its own product.

When it has to be Aurora

  • The client must stay all-AWS. IAM, VPC-only networking and AWS compliance. Aurora is my choice here, and size doesn't change it.
  • Bedrock Knowledge Bases on SQL. Aurora is the only Postgres they support, so the chunks are queryable with SQL next to the app's data. If you only need the knowledge base, S3 Vectors is the cheapest store behind it.
  • Heavy, constant or global load. High throughput, high availability, geo-replication. Aurora gives me peace of mind and scales well, and at that scale it can be cheaper than Neon.
  • Live tables joined with the lake. Since 30 September 2026, aurora_analytics (DuckDB inside) reads Parquet and Iceberg in S3 as foreign tables, at no extra charge. Read-only, PostgreSQL 17.11+ or 18.6+. Athena or DuckDB? covers the lake.

Serverless v2 or provisioned. Serverless v2 is cheaper for low or bursty traffic and scales on its own; provisioned is cheaper for large steady load. One cluster can mix them: a provisioned writer and Serverless v2 readers. Don't pause a production database that serves users: the resume takes about 15 seconds.

Bring the price down with commitments. Aurora is the most expensive way to run Postgres I know, and Savings Plans and Reserved Instances are how I make it reasonable. In Sydney, a db.r7g.large goes from $0.333 an hour on demand to $0.256 (1-year Reserved Instance, no upfront) or about $0.176 (3-year, all upfront). Aurora Serverless isn't an instance: cover it with a Database Savings Plan (1-year, up to 35%).

When both

Across clients, all the time. Neon for new products, prototypes and most client apps; Aurora for the client who must stay inside AWS. Data residency doesn't split them: Neon is available in Sydney, and Aurora runs in the client's own Sydney account. Better Auth keeps users in Australia on either, since they sit wherever the database is.

Not as dev and prod of one app. It's tempting to run previews on Neon branches and production on Aurora. I wouldn't. A compliance client's data shouldn't leave AWS for a preview, and Bedrock Knowledge Bases and aurora_analytics exist only on Aurora, so the previews would test a different database.

Over the life of an app. Both are Postgres, so starting on Neon doesn't trap you. If an app grows into Aurora territory (a client that now requires all-AWS, or steady heavy load), the move is Postgres to Postgres:

  • It can take an hour offline and it's small: a native dump and restore. Simpler, fewer moving parts.
  • It can't: AWS DMS, full load then change data capture until you switch the app, so the cut-over takes minutes. Create the target schema first: DMS creates tables and primary keys only.

The reverse also happens: when the database is the biggest line on the AWS bill and the app doesn't need Aurora, Neon is often cheaper than any commitment on it.

Traps

  • DMS truncates large JSON. It treats Postgres JSON as a LOB, and limited LOB mode stops at 32 KB by default. A Neon app that leans on JSONB documents must measure its largest values and raise Max LOB size first.
  • Tables without a primary key drift. DMS ignores their updates and deletes during change capture. Add keys before migrating.
  • A Postgres source keeps WAL until DMS reads it. An idle task fills the source disk. Turn on HeartbeatEnable, alarm on slot lag, drop the slot when done.
  • RDS Proxy pins sessions on SET, prepared statements, temporary tables, advisory locks or statements over 16 KB, and pinned sessions exhaust the pool. Watch DatabaseConnectionsCurrentlySessionPinned.
  • Neon's storage bites on write-heavy history. At three times Aurora's price per GB, a database that keeps every raw reading forever is where Neon stops being the cheap option. Keep a retention window and move the rest to the lake, as the IoT guide does.
  • Neon's Terraform provider is in transition. kislerdm/neon was archived on 11 September 2026 at 0.18.0, and Neon will publish it as neondatabase/neon. Pin the version, and switch with terraform state replace-provider when it lands.

Sources, checked on 24 October 2026: Neon pricing, Aurora pricing, Aurora PostgreSQL direct querying of Iceberg and Parquet, Database Savings Plans pricing, AWS DMS pricing, PostgreSQL as a DMS source.

More choices

  1. 01 Lambda, Web Functions or Workers? Where should this piece of logic run?
  2. 02 Lambda, Fargate or EC2? My Lambda is busy all day, or its reserved concurrency keeps going up. When is it time to move to a container, and where is the line?
  3. 03 SQS, EventBridge or SNS? Something happens in my app and other code must act on it. Do I put it in a queue, on an event bus, or on a topic?
  4. 04 SQS retries or Durable Functions? A job calls something flaky (a third-party API, an LLM, a slow Postgres). How do I retry it reliably, and when do I reach for Lambda durable functions instead of tuning SQS?
  5. 05 pgvector or S3 Vectors? Where should my embeddings live?
  6. 06 Pulumi or Terraform? We're putting our infrastructure in code. Pulumi or Terraform, and what if we already run one of them?
  7. 07 Cloudflare or S3 and CloudFront for a website? Where should a website, SPA or PWA live, Cloudflare static hosting or S3 behind CloudFront, and where do its heavy files go?
  8. 08 CloudWatch and Firehose, side by side How do I keep chatty logs without a CloudWatch-sized bill?
  9. 09 Athena or DuckDB? How should I query my data lake, and what changed when AWS bought DuckDB's company?
  10. 11 Better Auth or Cognito? Which sign-in should my app use, and what do I actually get for free?
  11. 12 Why I ended up on AWS Which cloud should my company run on, and is AWS just the one you know?
  12. 13 Better Auth, run yourself or managed by Neon? My app is on Neon. Should I run Better Auth myself, or switch on Neon Auth, which is Better Auth managed by Neon?
  13. 14 Stripe or PayPal Should we take payments with Stripe or PayPal, and when is PayPal worth the pain?
  14. 15 Tailscale or Cloudflare Tunnel? I need to reach a private box or VPC, or put a service from it online. Is that Tailscale or Cloudflare Tunnel?
  15. 16 Resend or SES? Our app sends email, and maybe a newsletter. Resend, or Amazon SES in our own AWS account?
  16. 17 WhatsApp or Telegram Our bot should reach users in a messaging app. WhatsApp or Telegram, and why did yours get blocked?
  17. 18 Which model, at what price Claude, GPT or an open model? Which is the cheapest model that's good enough, tier by tier?
  18. 19 Function URL or API Gateway? My Lambda needs an HTTPS endpoint. When is a function URL enough, and when do I start on API Gateway from day one?

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: