What the photo tagger costs
The photo tagger only does work when a photo lands. There’s no daily tick, no always-on server, nothing humming in the background. A photo arrives, it gets resized and checked, one vision call drafts the details, and the draft waits for a human. The one line that actually moves with volume is that vision call — one per photo. At typical SMB volume the bill is a couple of dollars a month, fixed cost essentially zero.
Key takeaways
- Around $2.40/month at typical SMB volume (around 200 photos a month).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- The one Bedrock vision call per photo is the dominant cost — everything else is pennies.
- The resize-and-check step is plain code; rejected photos never reach the paid model call.
- At 1,000 photos a month the bill is around $8. At 2,000 it’s around $15.
Cost at three volumes
Where the dollars actually go
Bedrock vision (the bulk). One Claude Haiku 4.5 vision call per photo: the small resized image plus a short prompt going in, and five short fields with confidence scores coming back. That’s a fraction of a cent per photo. At 200 photos a month it’s a couple of dollars; at 2,000 it’s the biggest single line on the bill but still in the low teens. Because the photo is resized first, the model reads a small image rather than a multi-megabyte original, which keeps each call cheap. And because the quality gate rejects bad photos before this call, you never pay to read a photo that was never going to be usable.
Lambda + the resize step. Every photo runs through a few small Lambdas: the resize-and-check intake, the reader, the approve handler. The resize step does real work (shrinking an image) so it’s the heaviest, but it’s still milliseconds and a small memory size. The Lambda total lands well under a dollar even at 2,000 photos.
DynamoDB on-demand. Three small tables hold draft state, acknowledgments, and the audit trail. A handful of reads and writes per photo. Pennies a month at any of these volumes.
S3 + Storage. The original photos, the small resized copies, and the flagged folder. Images add up faster than text, but at SMB volume it’s still a few dollars at most, and a lifecycle rule moves older originals to cheaper storage.
SQS + SES. The queue that smooths out batch uploads costs almost nothing. SES outbound for the review email is $0.10 per thousand sent — negligible.
AWS Budgets + Secrets Manager (fixed). A couple of secrets and a budget alarm. A small flat amount that doesn’t change with how many photos you tag.
What doesn’t cost money
- API Gateway. Replaced by Lambda Function URLs for the approve and edit buttons.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. The system only runs when a photo lands.
- A second model. One vision call does the whole draft; nothing double-checks it but a human.
- A vector store. The tagger reads a photo and writes fields — there’s nothing to search, so no embeddings, no Knowledge Base, no S3 Vectors.
How the cost scales
The bill grows almost entirely with the vision call, which fires once per photo — so cost tracks photo volume in a straight line. Lambda and DynamoDB grow with it but stay small. The fixed pieces don’t move at all. So a shop tagging 5,000 photos a month lands around $35; at 10,000 it’s around $70. Past those volumes you’d look at batching photos into fewer, larger calls or pre-filtering duplicates, but those are tunings for a high-volume catalog — not redesigns.
Set an AWS Budgets alarm at $25/month so anything unusual — a runaway upload loop, a misconfigured retry — pages you before the bill matters. The tagger’s normal-volume bill stays well under that ceiling.
Last post in the series: the engineering reference. Same system, drawn for engineers — service names, Lambda inventory, IAM scopes, DynamoDB schemas, the S3 and SQS event wiring, and the Bedrock model IDs.
All posts