Subchapter 23.17
references/cost-tracking.mdMarkdown4 KBView on GitHub
Track, allocate, and manage Bedrock inference costs across teams, products, and models. Bedrock charges per input/output token with model-specific rates.
Assets
Kb Shim Py| Approach | Best For | Setup Effort |
|---|---|---|
| Application inference profiles + cost allocation tags | Per-product or per-team cost tracking in Cost Explorer | Medium — create profiles, tag, activate in Billing |
| IAM principal-based (CUR 2.0) | Per-developer or per-role attribution | Low — automatic in CUR 2.0, no Bedrock config needed |
| Model invocation logging + custom analytics | Fine-grained per-request analysis (token counts, latency, model) | High — enable logging, build queries |
For most teams, application inference profiles with cost allocation tags is the recommended approach. It provides clean cost breakdowns in Cost Explorer without custom analytics.
aws bedrock create-inference-profile \
--inference-profile-name "<TEAM_OR_PRODUCT_NAME>" \
--model-source "copyFrom=arn:aws:bedrock:<REGION>::foundation-model/<MODEL_ID>" \
--region <REGION> --profile <PROFILE>Note the returned inferenceProfileArn.
aws bedrock tag-resource \
--resource-arn <INFERENCE_PROFILE_ARN> \
--tags key=CostCenter,value=<COST_CENTER> key=Project,value=<PROJECT> \
--region <REGION> --profile <PROFILE>In the AWS Billing console (or via API), activate the tags as cost allocation tags. Tags take ~24 hours to appear in Cost Explorer after activation.
Replace the base model ID with the inference profile ARN in application code:
response = bedrock_runtime.converse(
modelId="<INFERENCE_PROFILE_ARN>",
messages=[...],
inferenceConfig={"maxTokens": 1024}
)After 24–48 hours, filter Cost Explorer by the tag keys. Bedrock costs appear under Amazon Bedrock service, grouped by tag values.
CUR 2.0 automatically records the IAM caller identity for every Bedrock API call. No Bedrock-specific setup required.
To use: tag IAM roles/users with keys like department, costCenter, or project, then filter CUR 2.0 data by those tags. Works for per-developer tracking when each developer assumes a distinct IAM role.
Limitation: only tracks who made the call, not which product or feature triggered it. Use inference profiles for product-level attribution.
Key metrics for cost monitoring (namespace AWS/Bedrock, dimension ModelId):
| Metric | Cost Signal |
|---|---|
InputTokenCount | Input token spend (charged per token) |
OutputTokenCount | Output token spend (higher per-token rate) |
InvocationCount | Request volume |
CacheReadInputTokens | Tokens served from cache (90% cheaper than standard input) |
CacheWriteInputTokens | Cache write tokens (25% surcharge over standard input) |
python3 scripts/analyze-bedrock-costs.py --days <DAYS> --region <REGION> --profile <PROFILE>The script queries Cost Explorer for Bedrock spend grouped by usage type (model + token direction) over the specified period.
Set up AWS Budgets to alert when Bedrock spend approaches a threshold:
aws budgets create-budget --account-id <ACCOUNT_ID> \
--budget '{"BudgetName":"bedrock-monthly","BudgetLimit":{"Amount":"<AMOUNT>","Unit":"USD"},"TimeUnit":"MONTHLY","BudgetType":"COST","CostFilters":{"Service":["Amazon Bedrock"]}}' \
--notifications-with-subscribers '[{"Notification":{"NotificationType":"ACTUAL","ComparisonOperator":"GREATER_THAN","Threshold":80},"Subscribers":[{"SubscriptionType":"EMAIL","Address":"<EMAIL>"}]}]' \
--profile <PROFILE>This alerts at 80% of the monthly budget. Adjust threshold and notification targets as needed.