Optimizing Bedrock Costs
Generate prioritized, actionable Bedrock cost optimization recommendations backed by real Cost Explorer data.
Quick Start
Run the full optimization analysis:
bash ./_skills/custom/optimizing-bedrock-costs/scripts/optimize.sh [--days N]
Default: 90 days. Outputs TSV sections for each optimization area.
Optimization Areas
1. Model Tiering (Opus to Sonnet/Haiku Downgrade)
Opus models cost 5x more than Sonnet per token. Many workloads can run on Sonnet with equivalent quality.
Detection: Compare Opus vs Sonnet spend per region. If Opus > 30% of total model spend, flag for review.
Savings estimate:
Potential savings = Opus_cost * 0.80 (assuming 80% of Opus tasks can move to Sonnet)
Conservative savings = Opus_cost * 0.50
Pricing reference (USD per 1M tokens):
| Model | Input | Cache Write | Cache Read | Output |
|---|---|---|---|---|
| Opus 4.5/4.6 | $15.00 | $18.75 | $1.50 | $75.00 |
| Sonnet 4.5/4.6 | $3.00 | $3.75 | $0.30 | $15.00 |
| Haiku 4.5 | $0.80 | $1.00 | $0.08 | $4.00 |
2. Cache Efficiency
Target: >60% hit ratio, >4x reuse ratio.
Detection: Pull token-level usage types, compute hit ratio and reuse ratio per month.
Recommendations by finding:
| Finding | Action | Priority |
|---|---|---|
| Hit ratio < 40% | Restructure prompts: static prefix first, dynamic content last | P0 |
| Hit ratio 40-60% | Add cachePoint blocks at instruction boundaries | P1 |
| Reuse ratio < 2x | Prompts changing too frequently — stabilize system prompts | P0 |
| CacheWrite > 40% of input cost | Increase cache TTL, reduce prompt variation | P1 |
Savings estimate:
If hit_ratio improves from X% to 70%:
Additional cached tokens = total_input_qty * (0.70 - X/100)
Savings = additional_cached_tokens * (regular_rate - cache_read_rate)
3. Batch Inference Opportunities
Batch inference costs 50% less than on-demand for supported models.
Detection: Identify high-volume, non-real-time workloads by looking at:
- Cohere Embed/Rerank usage (typically batch-friendly)
- High token volumes in off-peak hours (requires CloudWatch if available)
Savings estimate: batch_eligible_cost * 0.50
4. Cross-Region Cost Arbitrage
Bedrock pricing varies by region. Compare per-model costs across active regions.
Detection: Group costs by REGION + SERVICE. Flag if same model is used in a more expensive region when a cheaper region is available.
5. Output Token Efficiency
Output tokens cost 5x input tokens. Reducing verbose outputs saves significantly.
Detection: Compare output token cost as % of total. If output > 40% of total token cost, flag for review.
Recommendations:
- Set
max_tokenslimits on API calls - Use structured JSON output instead of verbose prose
- Implement response compression for downstream consumers
6. Unused/Low-Value Model Spend
Detect models with minimal usage that may be experimental or abandoned.
Detection: Any model with < $5/month spend across all regions.
Output Format
The script outputs 6 sections. Section 6 ("UNIFIED SAVINGS SUMMARY") is the single source of truth for all savings figures.
Section 6 Output Contract
area priority conservative aggressive
Model Tiering P0 {opus*0.50} {opus*0.80}
Cache to 80% P1 {cache_savings} {cache_savings}
Batch Inference P2 {search*0.50} {search*0.50}
Output Tokens P2 {output*0.10} {output*0.20}
TOTAL - {sum of above} {sum of above}
TOTAL_PCT - {conservative/total*100}% {aggressive/total*100}%
TOTAL_SPEND - {total_spend} {total_spend}
Dashboard mapping:
- KPI value:
$TOTAL_conservative - $TOTAL_aggressive USD - KPI trend:
+TOTAL_PCT_conservative-TOTAL_PCT_aggressive% of spend - Table rows: one per area line
- Table summaryRow: TOTAL line
Present as a dashboard artifact with:
- KPI row: Total spend, estimated savings (from TOTAL), savings % (from TOTAL_PCT), top opportunity
- Optimization opportunities table (rows from Section 6 areas)
- Model tiering analysis (Opus vs Sonnet vs Haiku spend breakdown)
- Cache efficiency gauges (hit ratio, reuse ratio vs targets)
- Monthly savings projection chart
- Prioritized recommendations callout
Integration with analyzing-bedrock-costs
This skill builds on data from analyzing-bedrock-costs. The workflow:
- Run
analyzing-bedrock-costsfor raw cost/cache data - Run this skill's
optimize.shfor optimization-specific analysis - Use Section 6 output as the single source for all savings in dashboards