Action runners deployment of Multiple-Runner-Configurations-Together example
This module shows how to create GitHub action runners with multiple runner configuration together in one deployment. This example has the configurations for the following runner types with the relevant labels supported by them as matchers:
- Linux ARM64
["self-hosted", "linux", "arm64", "amazon"]
: Amazon Linux ARM64 non ephemeral runner based on module defaults - Linux Ubuntu
["self-hosted", "linux", "x64", "ubuntu-latest"]
or["self-hosted", "linux", "x64", "ubuntu-2204"]
: Ubuntu runners non ephemeral based on a custom start script. - Linux X64
["self-hosted", "linux", "x64", "amazon"]
: Amazon X64 Linux runners ephemeral with retry enabled. - Windows X64
["self-hosted", "windows", "x64", "servercore-2022"]
: Windows X64 Servercore 2022 runners non ephemeral based on a custom start script.
The module will decide the runner for the workflow job based on the match in the labels defined in the workflow job and runner configuration. Also the runner configuration allows the match to be exact or non-exact match. We recommend to use only exact matches.
For exact match, all the labels defined in the workflow should be present in the runner configuration matchers and for non-exact match, some of the labels in the workflow, when present in runner configuration, shall be enough for the runner configuration to be used for the job. First the exact matchers are applied, next the non exact ones.
Webhook
For the list of provided runner configurations, there will be a single webhook and only a single Github App to receive the notifications for all types of workflow triggers.
Lambda distribution
Per combination of OS and architecture a lambda distribution syncer will be created. For this example there will be three instances (windows X64, linux X64, linux ARM).
Usages
Steps for the full setup, such as creating a GitHub app can be found the docs. First download the Lambda releases from GitHub. Alternatively you can build the lambdas locally with Node or Docker, there is a simple build script in <root>/.ci/build.sh
. In the main.tf
you can simply remove the location of the lambda zip files, the default location will work in this case.
The default example assumes local built lambda's available. Ensure you have built the lambda's. Alternativly you can downlowd the lambda's. The version needs to be set to a GitHub release version, see https://github.com/philips-labs/terraform-aws-github-runner/releases
cd ../lambdas-download
terraform init
terraform apply -var=module_version=<VERSION>
cd -
Before running Terraform, ensure the GitHub app is configured. See the configuration details for more details.
terraform init
terraform apply
The example will try to update the webhook of your GitHub. In case the update fails the apply will not fail. You can receive the webhook details by running:
terraform output -raw webhook_secret
Requirements
Name | Version |
---|---|
terraform | >= 1.3.0 |
aws | ~> 5.27 |
local | ~> 2.0 |
random | ~> 3.0 |
Providers
Name | Version |
---|---|
random | 3.6.3 |
Modules
Name | Source | Version |
---|---|---|
base | ../base | n/a |
runners | ../../modules/multi-runner | n/a |
webhook_github_app | ../../modules/webhook-github-app | n/a |
Resources
Name | Type |
---|---|
random_id.random | resource |
Inputs
Name | Description | Type | Default | Required |
---|---|---|---|---|
aws_region | AWS region to deploy to | string |
"eu-west-1" |
no |
environment | Environment name, used as prefix | string |
null |
no |
github_app | GitHub for API usages. | object({ |
n/a | yes |
Outputs
Name | Description |
---|---|
webhook_endpoint | n/a |
webhook_secret | n/a |