All posts
AWS Amplify

What an Amplify Gen 2 App Actually Deploys, and the Same App Without Amplify

By

November 4, 2026

6 min read

Behind a few TypeScript files, an Amplify Gen 2 backend is Cognito, AppSync, a DynamoDB table per model, Lambda functions, S3 and nested CloudFormation stacks. Two diagrams: what Amplify creates, and the same app built directly, with a table of each piece, what replaces it, and how hard the move is.

Amplify Exit
AWS Amplify
AWS AppSync
Architecture

Amplify's pitch is that you never have to see the AWS underneath. That is also the problem when something breaks, a bill surprises you, or a requirement falls outside what Amplify generates. Underneath are Cognito, AppSync, DynamoDB, Lambda, S3 and CloudFormation.

Frontend

Amplify Hosting (CloudFront and S3, managed)
aws-amplify client library
Generated data client

Auth

Cognito user pool
Cognito identity pool
IAM roles for signed-in and guest users

Every data and storage rule resolves to these.

API

AppSync GraphQL API
Generated resolvers per model and relationship
Subscriptions over WebSockets

Data

One DynamoDB table per model
A secondary index per relationship
No joins; related records fetched per parent

Other

Lambda functions
S3 bucket with path-based access
Nested CloudFormation stacks via CDK

Each sandbox and branch deploys its own copy.

A typical Amplify Gen 2 app: auth, data, storage and a function

Frontend

CloudFront and S3, or Vercel
Your own API client

Auth

Cognito kept as is (users and passwords move with it)
JWT checked by the API

API

REST on API Gateway or Lambda function URLs
Or AppSync kept, with hand-written resolvers

Data

Postgres (Aurora Serverless v2 or RDS) for relational data
DynamoDB kept where access is by key

Infrastructure

CDK app you own
Same stacks, readable, testable

The same app built directly, the shape we usually move teams to

Piece by piece

Amplify piece

Usual replacement

How hard

Amplify Hosting

CloudFront and S3, or Vercel

Easy; often worth keeping for a while

Cognito (via Amplify Auth)

The same Cognito pool, used directly

Easy: users don't move

AppSync and generated resolvers

REST endpoints, or AppSync with resolvers you own

Medium: every screen's data calls change

DynamoDB table per model

Postgres tables, or a deliberate DynamoDB design

Hard: the data moves and the queries are rewritten

Authorization rules in the schema

Checks in the API layer, or Postgres row-level security

Medium: easy to get subtly wrong, so it gets tests

Storage (S3)

The same bucket, with your own presigned URLs

Easy

Functions

Plain Lambda in CDK

Easy

Want this mapped for your app?

Send us your amplify/ folder (or describe it) and we'll tell you which pieces to keep, which to move, and in what order.

hoolco Monthly Review

Once a month: what changed in tech that month and what it means for you, from cloud and AI to security and the tools you build with. Every item links to its source. No sales pitch, unsubscribe in one click.

As of November 4, 2026. Provided as is, for general information, and accurate to the best of our knowledge on the date shown. Not legal, compliance, tax, financial or other professional advice. Prices, limits and vendor services change; check current vendor documentation before relying on anything here. Terms of use.