aws-price-csv
by @crazylion
Generate AWS cost CSVs from a user-provided service list. Use when someone supplies an item list + AWS region and needs per-item pricing plus totals via AWS...
clawhub install aws-price-csvπ About This Skill
name: aws-price-csv description: Generate AWS cost CSVs from a user-provided service list. Use when someone supplies an item list + AWS region and needs per-item pricing plus totals via AWS Price List API or bulk pricing JSON.
AWS Price CSV Skill
Overview
Transforms a user-provided AWS service list (instances, volumes, S3 buckets, etc.) into a pricing CSV. The script can query the AWS Price List API (viaaws-cli) or reuse cached bulk JSON files. It supports On-Demand and Reserved terms and automatically adds up per-item and total costs.Quick Start
1. Prepare a YAML/JSON file withname, service_code, filters, term, and usage fields (see sample in references/api_reference.md).
2. Pick the data source:
- API mode β requires aws pricing get-products permission and an internet connection.
- Bulk mode β no IAM access required; the script downloads/caches public bulk JSON files.
3. Run the script with the region and desired options:
python3 scripts/generate_pricing_csv.py \
--input inputs/sample.yml \
--region ap-northeast-1 \
--source bulk \
--cache-dir ~/.cache/aws-price-csv \
--output quotes/apac_quote.csv
4. Inspect the CSV (each line item + TOTAL) and deliver alongside the original request if needed.Workflow
1. Prepare the input list
references/api_reference.md.filters must map to AWS pricing attributes (instanceType, regionCode, volumeApiName, usagetype, termType, etc.).term.type: OnDemand or Reserved (RI).term.attributes (optional) filter Reserved prices (LeaseContractLength, PurchaseOption, OfferingClass, ...).usage.quantity represents the amount to multiply (hours, GB-Mo, requests, ...).2. Choose the data source
| Mode | When to use | Notes | |------|-------------|-------| | API (--source api) | You already have IAM creds and want real-time data | Uses aws pricing get-products in us-east-1 |
| Bulk (--source bulk) | Offline, no IAM, or you want caching | The script checks --cache-dir (default ~/.cache/aws-price-csv); cached files newer than 30 days are reused, otherwise they are re-downloaded |> You can still override with --bulk-files ServiceCode=/path/to/file.json; those files win over the cache.
3. Generate the CSV
scripts/generate_pricing_csv.py--input: YAML/JSON list
- --region: AWS region code (location name is auto-added to filters)
- --output: CSV path (default aws_pricing.csv)
- --source: api (default) or bulk
- --cache-dir: bulk cache directory (default ~/.cache/aws-price-csv)
- --force-refresh: ignore cached bulk files and re-download
- --bulk-files: ServiceCode=/path/to/file.json overrides the cache
item_name, service_code, term_type, region, location, quantity, usage_unit, price_unit, price_per_unit_usd, cost_usd, description, plus a TOTAL row.4. Validate & deliver
TOTAL matches expectations.Troubleshooting
| Issue | Fix | |-------|-----| |aws pricing returns empty results | Double-check filters (location, regionCode, termType, etc.) or fall back to bulk mode |
| aws CLI missing | Install aws-cli v2, configure credentials, or rely on bulk mode |
| Need to refresh cached data | Use --force-refresh or delete the cached JSON so it gets re-downloaded |
| PyYAML missing | pip install pyyaml or convert input to JSON |
| Reserved price not found | Add LeaseContractLength, PurchaseOption, OfferingClass inside term.attributes |Resources
scripts/generate_pricing_csv.py β main script with API/bulk support, caching logic, and On-Demand/Reserved handling.references/api_reference.md β Price List API examples, bulk download pointers, region/location table, and sample input templates (including gp3 and RI cases).π‘ Examples
1. Prepare a YAML/JSON file with name, service_code, filters, term, and usage fields (see sample in references/api_reference.md).
2. Pick the data source:
- API mode β requires aws pricing get-products permission and an internet connection.
- Bulk mode β no IAM access required; the script downloads/caches public bulk JSON files.
3. Run the script with the region and desired options:
python3 scripts/generate_pricing_csv.py \
--input inputs/sample.yml \
--region ap-northeast-1 \
--source bulk \
--cache-dir ~/.cache/aws-price-csv \
--output quotes/apac_quote.csv
4. Inspect the CSV (each line item + TOTAL) and deliver alongside the original request if needed.π Tips & Best Practices
| Issue | Fix |
|-------|-----|
| aws pricing returns empty results | Double-check filters (location, regionCode, termType, etc.) or fall back to bulk mode |
| aws CLI missing | Install aws-cli v2, configure credentials, or rely on bulk mode |
| Need to refresh cached data | Use --force-refresh or delete the cached JSON so it gets re-downloaded |
| PyYAML missing | pip install pyyaml or convert input to JSON |
| Reserved price not found | Add LeaseContractLength, PurchaseOption, OfferingClass inside term.attributes |