Cost estimate¶
The Cost tab estimates monthly cost from the public AWS Price List (on-demand list prices). It is deterministic code, never a model's arithmetic, and every number can be traced to a rate, a quantity and an assumption.

What the tab shows¶
- Totals per month and per year, how many components were priced, and how many were not.
- By category (compute, data and storage, AI and agents, …) and by component, with every line item expanded as
quantity × rate = costand the price-list SKU. - Assumptions — every input is tagged from spec (you stated it) or assumed (a default). Any defaulted input makes the estimate indicative.
- Sensitivity at 1×, 3× and 10× traffic, and what-ifs (Lambda on arm64, RDS Multi-AZ cost, Bedrock batch inference, S3 Infrequent Access) where they apply.
- Provenance: the price-list publication date for each service and the retrieval date.
- A checkbox that overlays
$/moon the diagram.
Giving it real numbers¶
Put a usage object on each node. Anything you leave out falls back to a documented default and is flagged as assumed.
{ "id": "fm", "icon": "bedrock", "label": "Amazon Bedrock",
"usage": { "model": "Claude Sonnet 5.5", "inputTokensPerMonth": 150000000, "outputTokensPerMonth": 15000000 } }
Describe the scenario once in meta.cost.note so readers know the basis:
"meta": { "title": "…", "cost": { "region": "us-east-1", "note": "Illustrative: 200,000 questions/month, ~750 input and 75 output tokens each" } }
Usage keys by service¶
| Service | Keys (default) |
|---|---|
| AWS Lambda | requestsPerMonth (1e6), avgDurationMs (200), memoryMb (512), arch (x86 or arm64) |
| Amazon API Gateway | type (rest or http), requestsPerMonth (1e6) |
| Amazon DynamoDB | readRequestsPerMonth (5e6), writeRequestsPerMonth (1e6), storageGb (10) |
| Amazon S3 | storageClass (standard), storageGb (100), putRequestsPerMonth (1e5), getRequestsPerMonth (1e6) |
| Amazon SQS | requestsPerMonth (3e6), fifo (false) |
| Amazon SNS | publishesPerMonth (1e6) |
| AWS Step Functions | stateTransitionsPerMonth (1e6) |
| Amazon EventBridge | eventsPerMonth (1e6) |
| Amazon CloudWatch | logIngestGbPerMonth (10), logStorageGb (10), customMetrics (20), alarms (10) |
| AWS KMS | keys (1), requestsPerMonth (1e5) |
| AWS WAF | webAcls (1), rules (5), requestsPerMonth (1e6) |
| Amazon Cognito | tier (essentials), mau (1000) |
| AWS Secrets Manager | secrets (5), apiCallsPerMonth (1e5) |
| Amazon Textract | feature (text, tables, forms…), pagesPerMonth (10000) |
| Amazon Comprehend / Comprehend Medical | feature (DetectEntities), unitsPerMonth (1e6) |
| Amazon OpenSearch Service | mode (provisioned or serverless), instanceType (r6g.large.search), instanceCount (2), storageGbPerNode (100); serverless: indexingOcu, searchOcu, storageGb |
| AWS Fargate | tasks (2), vcpu (1), memoryGb (2), hoursPerMonth (730), arch |
| Amazon EC2 | instanceType (m5.large), count (2), hoursPerMonth (730), ebsGbPerInstance (50) |
| Amazon RDS | instanceClass (db.r6g.large), engine (PostgreSQL), multiAz (true), storageGb (100) |
| Amazon Aurora | instanceClass, engine (Aurora PostgreSQL), instances (2), storageGb (100) |
| Elastic Load Balancing | type (application), avgLcu (5) |
| NAT gateway | count (2), gbProcessedPerMonth (100) |
| Bedrock Guardrails | textUnitsPerMonth (2e5), policies (["content","pii"], also grounding) |
| Amazon Bedrock (models) | model is required (for example Claude Sonnet 5.5, Nova 2.0 Lite, Titan Embedding V2), mode (standard, batch, global), inputTokensPerMonth (5e6), outputTokensPerMonth (1e6), cacheReadTokensPerMonth |
| Bedrock AgentCore | component (runtime, gateway, memory, codeinterpreter, browser, evaluations; detected from the label when omitted) plus per-component volumes such as sessionsPerMonth, avgSessionMinutes, vcpu, memoryGb, cpuActiveFraction, invocationsPerMonth |
Two keys work on any node:
usage.monthlyUsd— supply the monthly cost yourself (status override). Use it for services without a cost model, and say where the number came from.usage.egressGbPerMonth— adds internet data-transfer-out.
Honest statuses¶
| Status | Meaning |
|---|---|
estimated |
Priced from the price list with the stated and assumed inputs. |
override |
You supplied usage.monthlyUsd. |
no-charge |
The service has no direct charge (IAM Identity Center, Organizations, CloudFormation…). |
not-billable |
A general icon (users, internet), not an AWS resource. |
not-itemized |
AWS lists no separate price for it (some AgentCore components bill through CloudWatch or the runtime). |
needs-input |
A required input is missing (for example the Bedrock model). |
not-estimated |
No cost model for this service yet. Supply usage.monthlyUsd to include it. |
error |
The price book could not resolve an unambiguous rate; the reason is shown. |
The total only includes priced components, and the tab says how many were left out.
What is and is not included¶
Included: public on-demand rates; 730 hours per month; binary storage units. Excluded: free tier, taxes, support plans, Savings Plans, Reserved Instances, Spot, enterprise discounts, credits, and data transfer unless you set egressGbPerMonth. Treat the result as a planning number and confirm it in the AWS Pricing Calculator.
From the command line¶
archify-aws cost spec.json # table in the terminal
archify-aws cost spec.json --scale 1,3,10 # sensitivity points
archify-aws cost spec.json --region us-east-1 # needs data/prices/<region>.json
archify-aws cost spec.json --usage usage.json # {"<nodeId>": {…usage keys…}} overrides the spec's usage
archify-aws cost spec.json --json # full machine-readable result
Turn the tab off with render --no-cost / finalize --no-cost.
The price snapshot is committed (data/prices/us-east-1.json, 26 services). Developers refresh it with npm run prices:fetch; see Data refresh.