Part 6 of 7 · Photo tagger series ~3 min read

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

Monthly cost at three photo volumes, broken out by component A vertical stacked-bar chart showing monthly cost in US dollars at three photo volumes. The leftmost bar represents 200 photos a month and shows a total around $2.40, dominated by the Bedrock vision slice (one call per photo) with a smaller slice for Lambda and the resize step, a thin slice for S3 and DynamoDB, and a tiny fixed slice. The middle bar represents 1,000 photos a month and shows a total around $8, with the same shape — Bedrock vision grows roughly linearly with photo count because it fires once per photo. The rightmost bar represents 2,000 photos a month and shows a total around $15, with Bedrock vision still the dominant slice; the fixed slice stays tiny because Budgets and Secrets Manager cost the same at any volume. Below the chart is a legend explaining the four sections of each bar: Bedrock vision (one call per photo), Lambda and the resize step, S3 and DynamoDB, and AWS Budgets and Secrets Manager as a small fixed amount. A note at the bottom: the vision call is the dominant cost, and even that is a fraction of a cent per photo. $0 $5 $10 $15 $20 200 photos ~$2.40 1,000 photos ~$8 2,000 photos ~$15 Bedrock vision (one call per photo) Lambda + the resize step S3 + DynamoDB (drafts, audit, photos) AWS Budgets + Secrets Manager (fixed) The vision call is the dominant cost — and even that is a fraction of a cent per photo.
Fig 6. Monthly cost at three photo volumes. The Bedrock vision call is the dominant slice because it fires once per photo and grows with volume. Lambda, the resize step, S3, and DynamoDB stay small; the fixed slice barely moves.

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