Cost model / customer AWS
Separate the quiet baseline from the work you run.
Gondola does not resell compute. Every infrastructure charge appears in your AWS account: a small persistent controller layer, then EC2, EBS, network, and observability usage driven by your workflows.
Baseline
One or two 0.25 vCPU / 0.5 GiB Fargate tasks
Variable
Runner seconds, root volumes, transfer, and logs
Allocation
Deployment, fleet, capacity, and generation tags
What AWS bills
| Layer | Default footprint | Primary cost driver | Control |
|---|---|---|---|
| ECS Fargate | Two 0.25 vCPU / 0.5 GiB tasks | Task runtime by region and architecture | desired_count = 1 trades away warm failover |
| DynamoDB | Pay-per-request table; one small item | Lease reads and conditional writes | No provisioned capacity to size |
| Secrets Manager | Usually one GitHub App private-key secret | Secret count and API calls | Use one reviewed secret and planned versions |
| CloudWatch Logs | Controller logs; 30-day retention | Ingested volume, retention, and queries | Tune log level and log_retention_days |
| EC2 runners | Zero while no job runs when minimum is zero | Instance type, seconds active, and capacity type | Fleet sizing, Spot policy, concurrency, hard lifetime |
| EBS | Encrypted 50 GiB root volume per active runner | Provisioned GB over the runner lifetime | Set the smallest reviewed volume, at least 30 GiB |
| Network | No NAT gateway created by Gondola | NAT hourly/data, public IPv4, endpoints, transfer | Reuse approved egress and measure actual traffic |
| ECR | Optional customer copy of controller image | Stored image layers and pulls | Lifecycle old unreferenced images deliberately |
A useful estimate
Build the estimate from your region and observed workload instead of a universal dollar figure. AWS prices, Spot markets, data transfer, taxes, and free-tier eligibility vary.
monthly AWS estimate =
controller task-hours
+ runner instance-seconds by fleet and capacity type
+ runner root-volume GB-seconds
+ log ingestion, storage, and queries
+ metrics, alarms, and Container Insights if enabled
+ secret and DynamoDB requests
+ public IPv4, NAT, endpoints, and data transfer- Choose the AWS region, Fargate architecture, and whether one or two controllers will run.
- For each fleet, estimate monthly jobs × typical job duration × the selected instance price. Model Spot and On-Demand fallback separately.
- Add EBS for the configured root volume over each runner’s lifetime, not as if every volume ran for the full month.
- Add the actual egress design. An otherwise-unused NAT gateway can cost more than the controller baseline.
- Add observability choices and a buffer for retries, interrupted Spot jobs, queue bursts, and image pulls.
Use the official AWS Pricing Calculator and current regional pages for Fargate, EC2 On-Demand, EC2 Spot, and CloudWatch.
Controls that change the bill
min_runners = 0preserves scale-to-zero. A positive value deliberately keeps EC2 and EBS capacity warm.max_runnersis both a concurrency and cost guardrail. The default is 10 per fleet; select a lower reviewed value when possible.spot-with-on-demand-fallbackfavors successful starts over a strict discount ceiling. Plainspotfails when all configured subnets have definitive capacity exhaustion.max_runner_lifetimebounds runaway instances; the default is six hours. Set a tighter bound only if legitimate jobs fit inside it.- Custom metrics, alarms, and Container Insights are explicit opt-ins because each can add recurring CloudWatch charges.
Network costs deserve their own review
Gondola attaches to existing subnets and creates no NAT gateway. That is intentional: the right egress path depends on your topology. Private subnets may use an existing NAT gateway, VPC endpoints plus controlled internet egress, or an organizational proxy. Public subnets may add public IPv4 charges. Container pulls, repository clones, dependency downloads, and artifact uploads can dominate data processing and transfer.
Tagging and verification
Gondola applies gondola:* tags to runner resources so cost can be grouped by deployment, fleet, capacity mode, and generation. A payer-account administrator must activate user-defined cost-allocation tags before they appear in Cost Explorer. Tags do not retroactively label earlier usage.
- Set an AWS Budget for the deployment account or cost category.
- Review EC2 hours, EBS GB-hours, Spot fallback rate, NAT processing, and log ingestion after the first representative week.
- Compare tagged active runners with GitHub job history to detect idle or non-terminating capacity.
- Re-estimate after changing fleet images, instance types, minimums, observability, or egress.
Subscription versus infrastructure
Gondola’s software subscription is separate from all AWS and GitHub charges. The subscription sets the permitted GitHub account or organization scope; it does not include compute credits or alter the services billed to your AWS account.