Skip to content
Business Template5 columns · 8 sample rows· Updated

Cloud Infrastructure & AWS Monthly Cost Estimate Markdown Table Template

Before an architecture proposal is approved, someone asks what it will cost per month. This table answers that line by line so reviewers can challenge each assumption instead of a single number. Engineering leads read it during RFC review, finance reads it when setting budgets, and whoever does FinOps reads it a month after launch to compare the estimate with the invoice.

Edit This Template

Edit cells, add rows, or sort — the Markdown updates live
Row
1
2 vCPU, 4GB RAM per task
2
db.r6g.large (Multi-AZ)
3
cache.t4g.medium
4
5
6
7
8
Total Monthly Cloud Spend
$868.47 / mo
Output
| Cloud Service                    | Resource Tier / Instance   |                        Provisioned Capacity |                      Unit Billing Rate | Est. Monthly Cost |
| :------------------------------- | :------------------------- | ------------------------------------------: | -------------------------------------: | ----------------: |
| AWS ECS / Fargate (API)          | `2 vCPU, 4GB RAM` per task | 3 tasks × 730 h (4,380 vCPU-h + 8,760 GB-h) | $0.04048 / vCPU-hr + $0.004445 / GB-hr |           $216.24 |
| AWS Aurora PostgreSQL            | `db.r6g.large` (Multi-AZ)  |     2 instances (primary + replica) × 730 h |                            $0.260 / hr |           $379.60 |
| AWS ElastiCache Redis            | `cache.t4g.medium`         |                             2 nodes × 730 h |                            $0.065 / hr |            $94.90 |
| Amazon S3 Standard Storage       | Encrypted bucket storage   |                           2.5 TB (2,560 GB) |                         $0.023 / GB-mo |            $58.88 |
| Cloudflare Workers               | Workers Paid               |                          100M requests / mo |     $5 base incl. 10M; $0.30 / M after |            $32.00 |
| AWS NAT Gateway (hours)          | 1 gateway                  |                           1 gateway × 730 h |                            $0.045 / hr |            $32.85 |
| AWS NAT Gateway (data processed) | VPC outbound traffic       |                           1.2 TB (1,200 GB) |                  $0.045 / GB processed |            $54.00 |
| **Total Monthly Cloud Spend**    | —                          |                                           — |                                      — |  **$868.47 / mo** |
8 rows × 5 columns
Rendered Preview
Cloud ServiceResource Tier / InstanceProvisioned CapacityUnit Billing RateEst. Monthly Cost
AWS ECS / Fargate (API)2 vCPU, 4GB RAM per task3 tasks × 730 h (4,380 vCPU-h + 8,760 GB-h)$0.04048 / vCPU-hr + $0.004445 / GB-hr$216.24
AWS Aurora PostgreSQLdb.r6g.large (Multi-AZ)2 instances (primary + replica) × 730 h$0.260 / hr$379.60
AWS ElastiCache Rediscache.t4g.medium2 nodes × 730 h$0.065 / hr$94.90
Amazon S3 Standard StorageEncrypted bucket storage2.5 TB (2,560 GB)$0.023 / GB-mo$58.88
Cloudflare WorkersWorkers Paid100M requests / mo$5 base incl. 10M; $0.30 / M after$32.00
AWS NAT Gateway (hours)1 gateway1 gateway × 730 h$0.045 / hr$32.85
AWS NAT Gateway (data processed)VPC outbound traffic1.2 TB (1,200 GB)$0.045 / GB processed$54.00
Total Monthly Cloud Spend———$868.47 / mo

When to Use This Table

Its value lies in exposing assumptions. Every figure depends on region, pricing model (on-demand, Savings Plans, reserved or committed use), the number of hours in a month (the AWS Pricing Calculator uses 730), and the date the rates were checked. Cloud list prices change and vary by region, so an estimate without a date and a region cannot be reproduced. Treat every rate in a table like this as a snapshot, never as a current fact.

A weak estimate lists compute and the database and stops. Real invoices surprise people with the lines that are missing: internet egress, cross-AZ traffic, NAT gateway hourly and per-GB processing charges, storage requests and I/O, log ingestion, snapshots, and support plans. A good estimate has one row per billing dimension, links to a saved calculator estimate, and shows its arithmetic so anyone can recompute it.

Formatting This Table in Markdown

A cloud infrastructure & aws monthly cost estimate table puts a few things in cells that Markdown treats as syntax. These are the ones to watch so it renders correctly on GitHub, GitLab, Obsidian and docs sites.

  • Two dollar amounts in one cell can trigger math

    The Unit Billing Rate cells hold two prices, such as $0.04048 / vCPU-hr + $0.004445 / GB-hr. On GitHub $…$ is math, so text between two dollar signs may render as a formula; escape each sign as \$, or put USD in the header and keep cells numeric.

  • Move the unit out of the total cell

    A total like **$868.47 / mo** does not right-align with the digits above it. Put USD / mo in the header, keep every cost to two decimals, and let bold be the only difference in the total row; see column alignment.

  • GFM has no total row: bold label plus placeholders

    There is no footer row, formula or colspan, so the total is an ordinary last row: a bold label in the first cell, — in unused cells, and a bold amount. Recompute it by hand or in a spreadsheet whenever a line changes, because nothing in Markdown sums a column.

  • Write multiplication as × or in a code span

    In capacity cells like 3 tasks × 730 h, the × is plain Unicode. Typing 3*730*2 instead italicizes the 730, because a pair of asterisks is emphasis; use × or a code span for formulas.

What Goes in Each Column

ColumnAlignmentWhat to put here
Cloud Serviceleft :---Provider and service name, grouped by category (compute, database, storage, network, edge). When a service bills on several dimensions, such as Fargate vCPU and memory or a NAT gateway’s hours and data processed, give each dimension its own row so none of them gets forgotten.
Resource Tier / Instanceleft :---The exact SKU in backticks (db.r6g.large, cache.t4g.medium), plus the deployment option and pricing model: Multi-AZ, on-demand or committed. The g suffix on AWS instance families indicates Graviton (Arm), which is priced differently from the x86 equivalent, so copy the name exactly.
Provisioned Capacityright ---:Quantity with units and, for hourly resources, the hours assumed: 3 tasks × 730 h. For usage-based lines, write the forecast and its source, such as “1.2 TB/mo, 90-day average from CDN logs”. Right-aligned so quantities line up.
Unit Billing Rateright ---:The rate with its unit (/ vCPU-hr, / GB-mo, / million requests) as shown in the calculator on the date you checked. Note tiered pricing explicitly, because the first tier’s rate does not apply to the whole volume once usage crosses a tier boundary.
Est. Monthly Costright ---:Capacity times rate, right-aligned, in one stated currency and excluding tax. Rounding to whole dollars is honest for an estimate; cents imply a precision you do not have. End with a bold total row so the figure people quote is visibly the sum of the lines above it.

How to Fill It In

  1. 1Write the assumptions down before any numbers: region, currency, pricing model, hours per month, and the date. Put them in a short block above the table (see the first variation) so nobody has to guess later.
  2. 2Build the inventory from infrastructure code, not from the architecture diagram. A terraform plan or CDK synth output lists every billable resource, including the NAT gateways, load balancers, and log groups that diagrams leave out. For an existing system, use Cost Explorer (or your provider’s billing export) grouped by service and usage type for the last full month.
  3. 3Price each line in the provider’s own calculator, save the estimate, and paste its shareable link under the table. The calculator handles tiers and regional rates that are easy to get wrong by hand.
  4. 4Estimate usage-driven lines from real metrics: egress from load balancer or CDN logs, request counts from access logs, storage growth from the last few months of bucket metrics. If there is no history yet, write down the traffic assumption and the headroom you added, so both can be challenged.
  5. 5After the first full billing month, add an Actual column and explain every line that moved by more than a threshold your team agrees on. Tag resources by project from day one, otherwise the comparison will not be possible.

Ready-to-Paste Variations

Assumptions block

Paste this directly above the cost table. It is what makes the estimate reproducible when someone reopens it months later.

| Assumption | Value |
| :--- | :--- |
| Region | `us-east-1` |
| Pricing model | On-demand list prices; no Savings Plans or reservations |
| Hours per month | 730 |
| Rates checked | YYYY-MM-DD in the provider’s pricing calculator (link) |
| Currency | USD, excluding tax and support plan |
| Traffic forecast | 1.2 TB/mo egress, 90-day average from CDN logs |

One row per billing dimension

Quantities only, split by how the provider meters them. Fill in rates and costs from your saved calculator estimate; the split is what stops NAT and I/O charges from going missing.

| Service | Billing dimension | Unit | Monthly quantity |
| :--- | :--- | :--- | ---: |
| Fargate | vCPU | vCPU-hour | 4,380 (6 vCPU × 730 h) |
| Fargate | Memory | GB-hour | 8,760 (12 GB × 730 h) |
| NAT Gateway | Gateway hours | hour | 1,460 (2 gateways × 730 h) |
| NAT Gateway | Data processed | GB | 1,200 |
| Data transfer | Out to internet | GB | 1,200 |
| Aurora | Storage | GB-month | 200 |
| Aurora | I/O requests (Standard config only) | million requests | 150 |

Monthly FinOps review: estimate vs actual

For the review after launch. The Driver column matters more than the numbers, because it says what to change.

| Category | Estimate | Actual | Variance | Driver |
| :--- | ---: | ---: | ---: | :--- |
| Compute | $216 | $231 | +$15 (+6.9%) | One extra task during the load test |
| Database | $380 | $380 | $0 (0.0%) | As planned |
| NAT and data transfer | $87 | $142 | +$55 (+63.2%) | Container image pulls routed through NAT |
| Storage | $59 | $61 | +$2 (+3.4%) | Log retention longer than assumed |
| **Total** | **$742** | **$814** | **+$72 (+9.7%)** | |

Common Mistakes

  • Leaving out the NAT gateway hourly charge and internet egress.

    A NAT gateway bills per hour per gateway and per GB processed, and traffic leaving for the internet is billed again as data transfer out. Give each of these its own row, and consider VPC endpoints for traffic to S3 or ECR that would otherwise go through NAT.

  • Multiplying hourly rates by 720 hours.

    A 30-day month is 720 hours, but the AWS calculator averages to 730 (8,760 hours a year divided by 12). Use 730 so your figures match the calculator and the average invoice.

  • Presenting rates without a date, region, or pricing model.

    Add the assumptions block and a link to the saved calculator estimate. When someone reuses the table a year later, they will know which rates to refresh instead of trusting stale numbers.

  • Costing only the primary database instance.

    Count every replica or standby, storage and I/O (on Aurora Standard), backup storage beyond the free retention allowance, and manual snapshots. Managed databases bill on several dimensions besides instance hours.

  • Mixing list prices with committed-use discounts in one column.

    Show on-demand cost first and put discounts in a separate column or row. Reviewers need to see what happens if the commitment lapses or the workload moves.

Browse all 50 templates
FAQ

Cloud Infrastructure & AWS Monthly Cost Estimate: Frequently Asked Questions

Why does AWS assume 730 hours in a month?

It is the yearly average: 365 days × 24 hours = 8,760 hours, divided by 12 months = 730. Actual months range from 672 to 744 hours, so individual invoices for always-on resources vary slightly around the estimate.

How precise should a monthly cloud estimate be?

Precise in method, modest in claims. Compute and reserved capacity are predictable; egress, requests, and logs depend on traffic you are forecasting. State a range or a headroom percentage for usage-based lines rather than quoting a total to the cent.

Should the estimate include the free tier?

Not for production budgeting. Free-tier allowances are small, often expire after the first year, and apply per account, so they rarely survive contact with a real workload. Mention them in a note if they matter for a prototype.

How do I estimate data transfer without any traffic history?

Multiply expected monthly page views or API calls by the average response size, then add asset and media weight. Write the formula into the Provisioned Capacity cell so the forecast can be corrected once real logs exist.