Skip to content

Zoomies and the AWS Terraform module

terraform-aws-github-runner is a Terraform module that builds event-driven, auto-scaling GitHub Actions runners on EC2 in your own AWS account. It is the maintained successor to the Philips Labs repository, which is archived. If your infrastructure is AWS and Terraform, it is a strong choice, and this page is about when it is and when Zoomies is.

Written from the module's public documentation, reviewed in September 2026.

Side by side

AWS Terraform module Zoomies
Model and licence Terraform module you apply and operate; MIT One Go binary you run; AGPL-3.0
Runs on EC2, including spot, in your AWS account Linux hosts anywhere an agent can dial out from
Scaling Lambda functions react to webhooks and scale to zero A controller reconciles pools against queued jobs, and scales to zero by default
Images Your own AMIs and subnets Runner images for Ubuntu, Debian, Fedora and Rocky Linux
Architectures Linux x64 and arm64, and Windows Linux x64 and arm64; Windows not yet qualified
State Your AWS account and Terraform state One SQLite file
Seeing the fleet Your AWS tooling A live web UI, metrics and an audit log

When the AWS module is the better choice

  • Everything you run is on AWS. CI sits in the same account, network, IAM and bill as the rest, and the module is infrastructure as code like the rest.
  • You want a fresh machine for a job, and spot pricing for it. Zoomies gives each job a fresh container on a shared host instead.
  • You need Windows runners today. The module documents them.

When Zoomies is the better choice

  • You are not all on one cloud, or not in one at all. Hosts can be a rack, an office, a home lab, a Proxmox cluster and a rented server in one fleet.
  • You do not want a Terraform pipeline to run CI. One command installs the controller; a host joins with one more. See the quick start.
  • You are moving repositories off hosted runners. The migration wizard rewrites runs-on across them.

Moving between them

The two use different labels, so they run side by side. Move one repository at a time, then destroy the module's stack when nothing targets it.

Where to go next