Skip to content
Spinbox is experimental: APIs change and data may be lost. Status lists what is built and what proves it.

modules/runners

View Markdown

Source: github.com/spin-stack/spin-terraform-aws//modules/runners?ref=<tag>. Generated from its variables.tf and outputs.tf.

VariableTypeDefault
controlplaneobject({ name = string iam_name = string vpc_id = string subnet_ids = list(string) security_group_id = string runner_document_arn = string runner_user_data = string images = map(object({ id = string, root_device = string })) boot_log_policy_arn = string standard_vcpus = number boundary_arn = string })required
instance_typeslist(string)["m8id.8xlarge","c8id.8xlarge","r8id.8xlarge","m8id.12xlarge","c8id.12xlarge"]
nested_virtualizationbooltrue
spotbooltrue
request_quotabooltrue
max_hostsnumber1
rolloutstring"idle"
drain_secondsnumber150
data_volume_gbnumber0
root_volume_gbnumber30
tagsmap(string){}

The control plane module’s outputs, as they are: its name, where the runners go, their document, and what a runner’s machine runs at its first boot.

  • Type: object({ name = string iam_name = string vpc_id = string subnet_ids = list(string) security_group_id = string runner_document_arn = string runner_user_data = string images = map(object({ id = string, root_device = string })) boot_log_policy_arn = string standard_vcpus = number boundary_arn = string })
  • Required

What the group may start. Keep them one CPU generation: a checkpoint records the processor and its flags as -cpu host showed them (MachineIdentity in spin’s internal/runner/vmm), and resumes only onto a host that shows the same - a workspace suspended at night on one family and brought back on another cold-boots. Nested virtualization is offered on C8i, M8i, R8i (and their d variants), C7i, M7i, R7i and I7i; a d variant brings the local NVMe the runner’s data goes on.

For spot, name several: AWS gives a spot machine from the pools a request can draw on, and one type is one pool per zone. m8id.8xlarge alone scored 3 of 10 in us-west-2 and was reclaimed within minutes; the five below score 9. How a list scores in a region, before installing: aws ec2 get-spot-placement-scores —target-capacity 1 —region-names <region>
—instance-types <the types>

  • Type: list(string)
  • Default: ["m8id.8xlarge","c8id.8xlarge","r8id.8xlarge","m8id.12xlarge","c8id.12xlarge"]

Enable KVM inside the instance. False for .metal types, which have it by being metal and refuse the option.

  • Type: bool
  • Default: true

Every host a spot instance. The policy a runner joins under (the control plane module’s runner_policy) is what tells each one a stop is a reclaim.

  • Type: bool
  • Default: true

Ask AWS for the vCPU quota max_hosts runners need, when the account’s is lower (quota.tf). A request costs nothing and lowers nothing when it is removed.

  • Type: bool
  • Default: true

The most runners the group may have. How many it has is the control plane’s to decide: none until a workspace waits for a host, and none again once nothing has run for the control plane module’s runner_idle_minutes.

  • Type: number
  • Default: 1

How a new release reaches the runners. idle: when the fleet next empties - no workspace running, starting or being saved - the next host boots it, and no workspace is moved for it; a host keeps the old release until then, which its control plane allows for 90 days. rolling: the hosts are replaced at once, one at a time, each old one’s workspaces suspended to the bucket and resumed on the new one - for a fleet that never empties.

  • Type: string
  • Default: "idle"

How long a host the group is taking away is held while it empties itself: the termination hook’s timeout. At least the pool token’s —shutdown-grace; the hook is left to expire, so this is also how long each scale-in takes.

  • Type: number
  • Default: 150

An EBS volume for the runner’s data, for an instance type with no local NVMe. Zero uses the instance store, which is the right disk for volumes’ cache and costs nothing more. A machine’s boot takes an empty EBS volume where it has one, and the instance store otherwise.

  • Type: number
  • Default: 0

The runner’s root disk: the OS and the machine’s files; its data is on the instance store or data_volume_gb.

  • Type: number
  • Default: 30

Tags on everything this module creates.

  • Type: map(string)
  • Default: {}
OutputWhat it is
autoscaling_groupThe runners’ group, which the control plane sizes: empty until a workspace waits for a host.
security_group_idThe runners’ security group: nothing in, everything out - a workspace’s egress is filtered on the host by spin.

Generated by task reference from spin-terraform-aws/modules/runners/variables.tf at 1557e9668.

Documents Spinbox v20261019.02. This page as Markdown, for a model or a terminal.