Skip to content
Manual revision 01 · GitHub.com · Linux x64 and ARM64 · AWS

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

LayerDefault footprintPrimary cost driverControl
ECS FargateTwo 0.25 vCPU / 0.5 GiB tasksTask runtime by region and architecturedesired_count = 1 trades away warm failover
DynamoDBPay-per-request table; one small itemLease reads and conditional writesNo provisioned capacity to size
Secrets ManagerUsually one GitHub App private-key secretSecret count and API callsUse one reviewed secret and planned versions
CloudWatch LogsController logs; 30-day retentionIngested volume, retention, and queriesTune log level and log_retention_days
EC2 runnersZero while no job runs when minimum is zeroInstance type, seconds active, and capacity typeFleet sizing, Spot policy, concurrency, hard lifetime
EBSEncrypted 50 GiB root volume per active runnerProvisioned GB over the runner lifetimeSet the smallest reviewed volume, at least 30 GiB
NetworkNo NAT gateway created by GondolaNAT hourly/data, public IPv4, endpoints, transferReuse approved egress and measure actual traffic
ECROptional customer copy of controller imageStored image layers and pullsLifecycle 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
  1. Choose the AWS region, Fargate architecture, and whether one or two controllers will run.
  2. For each fleet, estimate monthly jobs × typical job duration × the selected instance price. Model Spot and On-Demand fallback separately.
  3. Add EBS for the configured root volume over each runner’s lifetime, not as if every volume ran for the full month.
  4. Add the actual egress design. An otherwise-unused NAT gateway can cost more than the controller baseline.
  5. 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 = 0 preserves scale-to-zero. A positive value deliberately keeps EC2 and EBS capacity warm.
  • max_runners is both a concurrency and cost guardrail. The default is 10 per fleet; select a lower reviewed value when possible.
  • spot-with-on-demand-fallback favors successful starts over a strict discount ceiling. Plain spot fails when all configured subnets have definitive capacity exhaustion.
  • max_runner_lifetime bounds 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.

Next

Choose the covered scope

Compare personal, single-organization, and ten-organization plans.