What the gift card ledger costs
A ledger that holds other people’s money should not cost much to run, and this one does not. This post breaks the bill down line by line at a realistic small-business volume — around 300 cards issued and 800 redemptions a month — and shows where every cent of the roughly $2.10 monthly total goes. The headline is that the centrepiece, the atomic redemption, costs a fraction of a cent each; the bill is dominated by one Secrets Manager secret and keeping a continuous backup of the ledger. We finish with the bill at ten times the volume.
Key takeaways
- About $2.10/month at a realistic volume of roughly 300 cards issued and 800 redemptions.
- The centrepiece, the atomic redemption, is a single conditional write — a fraction of a cent each, a few cents for the whole month.
- The bill is dominated by fixed costs: one Secrets Manager secret and a continuous backup of the ledger.
- EventBridge Scheduler, SQS, and AWS Budgets all sit inside their free tiers and add nothing.
- At ten times the volume the bill lands around $9/month, because most of it scales with writes and email, not with a server.
The volume we’re pricing
Costs only mean something against a volume, so here is the one we’re pricing: a small business that issues about 300 gift cards a month and takes about 800 redemptions against the live pool. The nightly expiry sweep runs once a day; the reconciliation report runs once a month. Receipts go out on issue and on redemption, so SES sends on the order of 1,100 emails a month plus the one report. Everything lives in a single region, eu-west-2, with no always-on compute anywhere.
The line-by-line bill
| Service | What it does here | Monthly |
|---|---|---|
| Secrets Manager | One secret — the SES / config credentials | $0.40 |
| DynamoDB (on-demand) | Writes & reads: ~300 issues, ~800 redemptions, sweep + report scans | $0.45 |
| DynamoDB backup (PITR) | Continuous point-in-time recovery on the cards & ledger tables | $0.30 |
| CloudWatch Logs | Function logs at 7-day retention | $0.25 |
| SES | ~1,100 issue & redemption receipts + the monthly report | $0.20 |
| Data transfer & misc | Small request and egress overheads | $0.20 |
| S3 (versioned) | Monthly reports, CSV exports, ledger snapshots | $0.15 |
| Lambda (Python 3.14, arm64) | Issue, redeem, expiry, report invocations | $0.10 |
| Bedrock (Claude Haiku 4.5) | One report-narrative call a month | $0.05 |
| EventBridge Scheduler | Nightly sweep + monthly report (free tier) | $0.00 |
| SQS + dead-letter queue | Receipt / alert buffering (free tier) | $0.00 |
| AWS Budgets | Two budgets and an alert (free tier) | $0.00 |
| Total | $2.10 |
Where the money actually goes
The striking thing about this bill is that the part everyone worries about — getting redemptions right under load — is the cheapest line on it. Each redemption is one DynamoDB conditional write; 800 of them, plus the issues and the scheduled scans, come to well under half a dollar for the month. The expensive lines are fixed and have nothing to do with how busy the shop is: one Secrets Manager secret at $0.40, and continuous backup of the cards and ledger tables at $0.30. For a system holding other people’s money, paying $0.30 a month to be able to rewind the ledger to any second is the easiest line item to justify on the whole list.
- Compute
- Storage
- Database
- Outside AWS
- Compute
- Storage
- Database
- Outside AWS
- Compute
- Storage
- Database
- Outside AWS
- Compute
- Storage
- Database
- Outside AWS
- Compute
- Storage
- Database
- Outside AWS
- Compute
- Storage
- Database
- Outside AWS
What ten times the volume costs
Now run the same shape at ten times the traffic: about 3,000 cards issued and 8,000 redemptions a month. The fixed lines do not move — the secret is still $0.40, the report still fires one Bedrock call — while the usage-based lines scale roughly with the work. DynamoDB writes and reads grow toward $3.50–$4.00, SES toward $1.50, logs and data transfer up in step, and continuous backup edges up with the ledger’s size. The total lands around $9 a month. Even at ten times the customers, there is no server to grow, no cluster to size, and no idle capacity billed overnight — the bill tracks the number of cards and emails, and almost nothing else.
Why the bill stays small
- No always-on compute. Lambda bills per invocation; between sales the system costs nothing to run.
- The atomic redemption — the hard part — is one conditional write, the cheapest line on the bill.
- On-demand DynamoDB means you pay per request, not for provisioned throughput sitting idle.
- The fixed floor is small and honest: one secret and a continuous ledger backup.
- Scheduler, SQS, and Budgets stay inside the free tier at this volume and add nothing.