Skip to content

Linux self-hosted runners

If you want to self-host GitHub Actions runners for Linux on AWS, RunsOn supports both native x64 and arm64 runners, irrespective of your GitHub plan (even with free plans).

For instance if you want to use a 2cpu x64 runner, your workflow file would look like this:

jobs:
build:
runs-on: runs-on=${{ github.run_id }}/runner=2cpu-linux-x64
steps:
- run: echo "Hello from x64!"

For an arm64 runner, you would use:

jobs:
build:
runs-on: runs-on=${{ github.run_id }}/runner=2cpu-linux-arm64
steps:
- run: echo "Hello from arm64!"

The list of predefined runner names is available below, although most users will customize their runners to use a specific number of CPUs, memory, disk size, etc. using the Custom runners capabilities.

The table below shows the per-minute prices of various runner types using EC2 instances launched by RunsOn, against comparable official managed GitHub runners. Cost includes compute + storage using the default RunsOn stack parameters. Networking costs can vary depending on your usage but all ingress traffic on AWS is free. Most users can significantly reduce egress traffic by using the Magic Cache feature, as well as ECR for storing docker images.

1cpu-linux-x64 (m7a.medium)
$0.0008
GitHub Not available
-
2cpu-linux-x64 (m7i.large)
$0.0011
GitHub $0.008
7.2x cheaper
4cpu-linux-x64 (m7i.xlarge)
$0.0019
GitHub $0.016
8.6x cheaper
8cpu-linux-x64 (c7i.2xlarge)
$0.0034
GitHub $0.032
9.5x cheaper
16cpu-linux-x64 (c7i.4xlarge)
$0.0068
GitHub $0.064
9.4x cheaper
32cpu-linux-x64 (m7i-flex.8xlarge)
$0.0114
GitHub $0.128
11.3x cheaper
48cpu-linux-x64 (c7i.12xlarge)
$0.0165
GitHub Not available
-
64cpu-linux-x64 (c7a.16xlarge)
$0.0147
GitHub $0.256
17.4x cheaper

$/min, us-east-1 spot prices, for the instance type selected at the time of the calculation. Prices can vary based on time of day, region, and instance type selected. Savings are higher if you include the speed gains (your jobs will consume less minutes) or use previous-generation instance types.

You can opt into a specific image by setting the image label in your workflow.

ImageDescription
ubuntu22-full-x64x64 image compatible with official Ubuntu 22.04 GitHub runner image
ubuntu24-full-x64x64 image compatible with official Ubuntu 24.04 GitHub runner image
ImageDescription
ubuntu22-full-arm64arm64 image compatible with official Ubuntu 22.04 GitHub runner image
ubuntu24-full-arm64arm64 image compatible with official Ubuntu 24.04 GitHub runner image

In case you specify the image label, make sure you have a family label that specifies instance types that support your image architecture. For instance:

jobs:
build:
runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-arm64/family=c7g+m7g

You can also create your own custom runners using inline runs-on: labels in your workflow, or by referencing a custom runner name created in the repository configuration file.

For more details:

Every runner launches from an AMI. Default runners are launched using a public AMI managed by RunsOn, but you can also build and use your own custom AMIs if you’d like better control, or preinstall specific software.

For more details:

Disable spot pricing for critical jobs:

jobs:
build:
runs-on: runs-on=${{ github.run_id }}/runner=2cpu-linux-x64/spot=false

Only allow instances with 4 CPUs from compute-optimized families:

jobs:
build:
runs-on: runs-on=${{ github.run_id }}/runner=4cpu-linux-x64/family=c7

Use ubuntu24 image instead of default ubuntu22:

jobs:
build:
runs-on: runs-on=${{ github.run_id }}/runner=2cpu-linux-x64/image=ubuntu24-full-x64

Fully custom runs-on definition, instance is launched in private subnet with static egress IP:

jobs:
build:
runs-on: runs-on=${{ github.run_id }}/family=m7+c7+r7/image=ubuntu24-full-x64/spot=false/ssh=false/private=true

Note that new AWS accounts have low quotas set by default for standard instances, so you might need to request an increase if you plan on launching many jobs.

How to request an increase
  1. Search for “Quotas” in the AWS console.
  2. Click on “Request quota increase”.
  3. Select “EC2” as the service.
  4. Select “G” as the instance type.
  5. Fill in the form and submit (remember that you request vCPUs, not instance count).
  6. Repeat for both spot and on-demand quotas.
Quota increase