Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Terraform module for scalable GitHub action runners on AWS

License

NotificationsYou must be signed in to change notification settings

github-aws-runners/terraform-aws-github-runner

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

docsawesome-runnersTerraform registryTerraform checksLambdasOpenSSF ScorecardOpenSSF Best Practices

📢 We're movingterraform-aws-github-runner to a new organizationhttps://github.com/github-aws-runners in January to foster growth and community ownership! 🎉 Join us on our newDiscord server for discussions and updates. Please see #4298 for more details.

📄 Extensive documentation is available via ourGitHub Pages Docs site.

📢 We maintain the project as a truly open-source project. We maintain the project on a best effort basis. We welcome contributions from the community. Feel free to help us answering issues, reviewing PRs, or maintaining and improving the project.

ThisTerraform module creates the required infrastructure needed to hostGitHub Actions self-hosted, auto-scaling runners onAWS spot instances. It provides the required logic to handle the life cycle for scaling up and down using a set of AWS Lambda functions. Runners are scaled down to zero to avoid costs when no workflows are active.

Runners overview

Features

  • Scaling: Scale up and down based on GitHub events
  • Sustainability: Scale down to zero when no jobs are running
  • Security: Runners are created on-demand and terminated after use (ephemeral runners)
  • Cost optimization: Runners are created on spot instances
  • Tailored software, hardware and network configuration: Bring your own AMI, define the instance types and subnets to use.
  • OS support: Linux (x64/arm64) and Windows
  • Multi-Runner: Create multiple runner configurations with a single deployment
  • GitHub cloud, Github Cloud with Data Residency and GitHub Enterprise Server (GHES) support.
  • Org and repo level runners. enterprise level runners are not supported (yet).

Getting started

Check out the detailed instructions in theGetting Started section of the docs. On a high level, the following steps are required to get started:

  • Setup your AWS account
  • Create and configure a GitHub App
  • Download or build the required lambdas
  • Deploy the module using Terraform
  • Install the GitHub App to your organization or repositories and add your repositories to the runner group(s).

Check out the provided Terraform examples in theexamples directory for different scenarios.

Configuration

Please check theconfiguration section of the docs for major configuration options. See the Terraform module documentation for all available options.

Acknowledgements

This repository was originally founded and maintained by Philips Labs. We gratefully acknowledge their initial contributions and stewardship of this project. You can find the original repository here:https://github.com/philips-labs/terraform-aws-github-runner

License

This project is licensed under the MIT License - see theLICENSE file for details.

Contributing

We welcome contributions, please check out thecontribution guide. Be aware we usepre commit hooks to update the docs.

Join the community

Join our discord community viathis invite link.

Terraform root module documention

Requirements

NameVersion
terraform>= 1.3.0
aws>= 5.77
random~> 3.0

Providers

NameVersion
aws>= 5.77
random~> 3.0

Modules

NameSourceVersion
ami_housekeeper./modules/ami-housekeepern/a
instance_termination_watcher./modules/termination-watchern/a
runner_binaries./modules/runner-binaries-syncern/a
runners./modules/runnersn/a
ssm./modules/ssmn/a
webhook./modules/webhookn/a

Resources

NameType
aws_sqs_queue.queued_buildsresource
aws_sqs_queue.queued_builds_dlqresource
aws_sqs_queue_policy.build_queue_dlq_policyresource
aws_sqs_queue_policy.build_queue_policyresource
random_string.randomresource
aws_iam_policy_document.deny_unsecure_transportdata source

Inputs

NameDescriptionTypeDefaultRequired
amiAMI configuration for the action runner instances. This object allows you to specify all AMI-related settings in one place.

Parameters:
-filter: Map of lists to filter AMIs by various criteria (e.g., { name = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-*"], state = ["available"] })
-owners: List of AMI owners to limit the search. Common values: ["amazon"], ["self"], or specific AWS account IDs
-id_ssm_parameter_name: Name of an SSM parameter containing the AMI ID. If specified, this overrides the AMI filter
-id_ssm_parameter_arn: ARN of an SSM parameter containing the AMI ID. If specified, this overrides both AMI filter and parameter name
-kms_key_arn: Optional KMS key ARN if the AMI is encrypted with a customer managed key

Defaults to null, in which case the module falls back to individual AMI variables (deprecated).
object({
filter = optional(map(list(string)), { state = ["available"] })
owners = optional(list(string), ["amazon"])
id_ssm_parameter_arn = optional(string, null)
kms_key_arn = optional(string, null)
})
nullno
ami_filter[DEPRECATED: Use ami.filter] Map of lists used to create the AMI filter for the action runner AMI.map(list(string))
{
"state": [
"available"
]
}
no
ami_housekeeper_cleanup_configConfiguration for AMI cleanup.

amiFilters - Filters to use when searching for AMIs to cleanup. Default filter for images owned by the account and that are available.
dryRun - If true, no AMIs will be deregistered. Default false.
launchTemplateNames - Launch template names to use when searching for AMIs to cleanup. Default no launch templates.
maxItems - The maximum numer of AMI's tha will be queried for cleanup. Default no maximum.
minimumDaysOld - Minimum number of days old an AMI must be to be considered for cleanup. Default 30.
ssmParameterNames - SSM parameter names to use when searching for AMIs to cleanup. This parameter should be set when using SSM to configure the AMI to use. Default no SSM parameters.
object({
amiFilters = optional(list(object({
Name = string
Values = list(string)
})),
[{
Name : "state",
Values : ["available"],
},
{
Name : "image-type",
Values : ["machine"],
}]
)
dryRun = optional(bool, false)
launchTemplateNames = optional(list(string))
maxItems = optional(number)
minimumDaysOld = optional(number, 30)
ssmParameterNames = optional(list(string))
})
{}no
ami_housekeeper_lambda_s3_keyS3 key for syncer lambda function. Required if using S3 bucket to specify lambdas.stringnullno
ami_housekeeper_lambda_s3_object_versionS3 object version for syncer lambda function. Useful if S3 versioning is enabled on source bucket.stringnullno
ami_housekeeper_lambda_schedule_expressionScheduler expression for action runner binary syncer.string"rate(1 day)"no
ami_housekeeper_lambda_timeoutTime out of the lambda in seconds.number300no
ami_housekeeper_lambda_zipFile location of the lambda zip file.stringnullno
ami_id_ssm_parameter_name[DEPRECATED: Use ami.id_ssm_parameter_name] String used to construct the SSM parameter name used to resolve the latest AMI ID for the runner instances. The SSM parameter should be of type String and contain a valid AMI ID. The default behavior is to use the latest Ubuntu 22.04 AMI.stringnullno
ami_kms_key_arn[DEPRECATED: Use ami.kms_key_arn] Optional CMK Key ARN to be used to launch an instance from a shared encrypted AMIstringnullno
ami_owners[DEPRECATED: Use ami.owners] The list of owners that should be used to find the AMI.list(string)
[
"amazon"
]
no
associate_public_ipv4_addressAssociate public IPv4 with the runner. Only tested with IPv4boolfalseno
aws_partition(optiona) partition in the arn namespace to use if not 'aws'string"aws"no
aws_regionAWS region.stringn/ayes
block_device_mappingsThe EC2 instance block device configuration. Takes the following keys:device_name,delete_on_termination,volume_type,volume_size,encrypted,iops,throughput,kms_key_id,snapshot_id.
list(object({
delete_on_termination = optional(bool, true)
device_name = optional(string, "/dev/xvda")
encrypted = optional(bool, true)
iops = optional(number)
kms_key_id = optional(string)
snapshot_id = optional(string)
throughput = optional(number)
volume_size = number
volume_type = optional(string, "gp3")
}))
[
{
"volume_size": 30
}
]
no
cloudwatch_config(optional) Replaces the module's default cloudwatch log config. Seehttps://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html for details.stringnullno
create_service_linked_role_spot(optional) create the service linked role for spot instances that is required by the scale-up lambda.boolfalseno
delay_webhook_eventThe number of seconds the event accepted by the webhook is invisible on the queue before the scale up lambda will receive the event.number30no
disable_runner_autoupdateDisable the auto update of the github runner agent. Be aware there is a grace period of 30 days, see also theGitHub articleboolfalseno
enable_ami_housekeeperOption to disable the lambda to clean up old AMIs.boolfalseno
enable_cloudwatch_agentEnables the cloudwatch agent on the ec2 runner instances. The runner uses a default config that can be overridden viacloudwatch_config.booltrueno
enable_ephemeral_runnersEnable ephemeral runners, runners will only be used once.boolfalseno
enable_jit_configOverwrite the default behavior for JIT configuration. By default JIT configuration is enabled for ephemeral runners and disabled for non-ephemeral runners. In case of GHES check first if the JIT config API is avaialbe. In case you upgradeing from 3.x to 4.x you can setenable_jit_config tofalse to avoid a breaking change when having your own AMI.boolnullno
enable_job_queued_checkOnly scale if the job event received by the scale up lambda is in the queued state. By default enabled for non ephemeral runners and disabled for ephemeral. Set this variable to overwrite the default behavior.boolnullno
enable_managed_runner_security_groupEnables creation of the default managed security group. Unmanaged security groups can be specified viarunner_additional_security_group_ids.booltrueno
enable_organization_runnersRegister runners to organization, instead of repo levelboolfalseno
enable_runner_binaries_syncerOption to disable the lambda to sync GitHub runner distribution, useful when using a pre-build AMI.booltrueno
enable_runner_detailed_monitoringShould detailed monitoring be enabled for the runner. Set this to true if you want to use detailed monitoring. Seehttps://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html for details.boolfalseno
enable_runner_on_demand_failover_for_errorsEnable on-demand failover. For example to fall back to on demand when no spot capacity is available the variable can be set toInsufficientInstanceCapacity. When not defined the default behavior is to retry later.list(string)[]no
enable_runner_workflow_job_labels_check_allIf set to true all labels in the workflow job must match the GitHub labels (os, architecture andself-hosted). When false ifany label matches it will trigger the webhook.booltrueno
enable_ssm_on_runnersEnable to allow access to the runner instances for debugging purposes via SSM. Note that this adds additional permissions to the runner instances.boolfalseno
enable_user_data_debug_logging_runnerOption to enable debug logging for user-data, this logs all secrets as well.boolfalseno
enable_userdataShould the userdata script be enabled for the runner. Set this to false if you are using your own prebuilt AMI.booltrueno
eventbridgeEnable the use of EventBridge by the module. By enabling this feature events will be put on the EventBridge by the webhook instead of directly dispatching to queues for scaling.

enable: Enable the EventBridge feature.
accept_events: List can be used to only allow specific events to be putted on the EventBridge. By default all events, empty list will be be interpreted as all events.
object({
enable = optional(bool, true)
accept_events = optional(list(string), null)
})
{}no
ghes_ssl_verifyGitHub Enterprise SSL verification. Set to 'false' when custom certificate (chains) is used for GitHub Enterprise Server (insecure).booltrueno
ghes_urlGitHub Enterprise Server URL. Example:https://github.internal.co - DO NOT SET IF USING PUBLIC GITHUB. However if you are using Github Enterprise Cloud with data-residency (ghe.com), set the endpoint here. Example -https://companyname.ghe.comstringnullno
github_appGitHub app parameters, see your github app.
You can optionally create the SSM parameters yourself and provide the ARN and name here, through the*_ssm attributes.
If you chose to provide the configuration values directly here,
please ensure the key is the base64-encoded.pem file (the output ofbase64 app.private-key.pem, not the content ofprivate-key.pem).
Note: the provided SSM parameters arn and name have a precedence over the actual value (i.ekey_base64_ssm has a precedence overkey_base64 etc).
object({
key_base64 = optional(string)
key_base64_ssm = optional(object({
arn = string
name = string
}))
id = optional(string)
id_ssm = optional(object({
arn = string
name = string
}))
webhook_secret = optional(string)
webhook_secret_ssm = optional(object({
arn = string
name = string
}))
})
n/ayes
idle_configList of time periods, defined as a cron expression, to keep a minimum amount of runners active instead of scaling down to 0. By defining this list you can ensure that in time periods that match the cron expression within 5 seconds a runner is kept idle.
list(object({
cron = string
timeZone = string
idleCount = number
evictionStrategy = optional(string, "oldest_first")
}))
[]no
instance_allocation_strategyThe allocation strategy for spot instances. AWS recommends usingprice-capacity-optimized however the AWS default islowest-price.string"lowest-price"no
instance_max_spot_priceMax price price for spot instances per hour. This variable will be passed to the create fleet as max spot price for the fleet.stringnullno
instance_profile_pathThe path that will be added to the instance_profile, if not set the environment name will be used.stringnullno
instance_target_capacity_typeDefault lifecycle used for runner instances, can be eitherspot oron-demand.string"spot"no
instance_termination_watcherConfiguration for the instance termination watcher. This feature is Beta, changes will not trigger a major release as long in beta.

enable: Enable or disable the spot termination watcher.
'features': Enable or disable features of the termination watcher.
memory_size: Memory size linit in MB of the lambda.
s3_key: S3 key for syncer lambda function. Required if using S3 bucket to specify lambdas.
s3_object_version: S3 object version for syncer lambda function. Useful if S3 versioning is enabled on source bucket.
timeout: Time out of the lambda in seconds.
zip: File location of the lambda zip file.
object({
enable = optional(bool, false)
features = optional(object({
enable_spot_termination_handler = optional(bool, true)
enable_spot_termination_notification_watcher = optional(bool, true)
}), {})
memory_size = optional(number, null)
s3_key = optional(string, null)
s3_object_version = optional(string, null)
timeout = optional(number, null)
zip = optional(string, null)
})
{}no
instance_typesList of instance types for the action runner. Defaults are based on runner_os (al2023 for linux and Windows Server Core for win).list(string)
[
"m5.large",
"c5.large"
]
no
job_queue_retention_in_secondsThe number of seconds the job is held in the queue before it is purged.number86400no
job_retryExperimental! Can be removed / changed without trigger a major release.Configure job retries. The configuration enables job retries (for ephemeral runners). After creating the insances a message will be published to a job retry queue. The job retry check lambda is checking after a delay if the job is queued. If not the message will be published again on the scale-up (build queue). Using this feature can impact the reate limit of the GitHub app.

enable: Enable or disable the job retry feature.
delay_in_seconds: The delay in seconds before the job retry check lambda will check the job status.
delay_backoff: The backoff factor for the delay.
lambda_memory_size: Memory size limit in MB for the job retry check lambda.
lambda_timeout: Time out of the job retry check lambda in seconds.
max_attempts: The maximum number of attempts to retry the job.
object({
enable = optional(bool, false)
delay_in_seconds = optional(number, 300)
delay_backoff = optional(number, 2)
lambda_memory_size = optional(number, 256)
lambda_timeout = optional(number, 30)
max_attempts = optional(number, 1)
})
{}no
key_nameKey pair namestringnullno
kms_key_arnOptional CMK Key ARN to be used for Parameter Store. This key must be in the current account.stringnullno
lambda_architectureAWS Lambda architecture. Lambda functions using Graviton processors ('arm64') tend to have better price/performance than 'x86_64' functions.string"arm64"no
lambda_principals(Optional) add extra principals to the role created for execution of the lambda, e.g. for local testing.
list(object({
type = string
identifiers = list(string)
}))
[]no
lambda_runtimeAWS Lambda runtime.string"nodejs22.x"no
lambda_s3_bucketS3 bucket from which to specify lambda functions. This is an alternative to providing local files directly.stringnullno
lambda_security_group_idsList of security group IDs associated with the Lambda function.list(string)[]no
lambda_subnet_idsList of subnets in which the action runners will be launched, the subnets needs to be subnets in thevpc_id.list(string)[]no
lambda_tagsMap of tags that will be added to all the lambda function resources. Note these are additional tags to the default tags.map(string){}no
log_levelLogging level for lambda logging. Valid values are 'silly', 'trace', 'debug', 'info', 'warn', 'error', 'fatal'.string"info"no
logging_kms_key_idSpecifies the kms key id to encrypt the logs with.stringnullno
logging_retention_in_daysSpecifies the number of days you want to retain log events for the lambda log group. Possible values are: 0, 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, and 3653.number180no
matcher_config_parameter_store_tierThe tier of the parameter store for the matcher configuration. Valid values areStandard, andAdvanced.string"Standard"no
metricsConfiguration for metrics created by the module, by default disabled to avoid additional costs. When metrics are enable all metrics are created unless explicit configured otherwise.
object({
enable = optional(bool, false)
namespace = optional(string, "GitHub Runners")
metric = optional(object({
enable_github_app_rate_limit = optional(bool, true)
enable_job_retry = optional(bool, true)
enable_spot_termination_warning = optional(bool, true)
}), {})
})
{}no
minimum_running_time_in_minutesThe time an ec2 action runner should be running at minimum before terminated, if not busy.numbernullno
pool_configThe configuration for updating the pool. Thepool_size to adjust to by the events triggered by theschedule_expression. For example you can configure a cron expression for weekdays to adjust the pool to 10 and another expression for the weekend to adjust the pool to 1. Useschedule_expression_timezone to override the schedule time zone (defaults to UTC).
list(object({
schedule_expression = string
schedule_expression_timezone = optional(string)
size = number
}))
[]no
pool_lambda_memory_sizeMemory size limit for scale-up lambda.number512no
pool_lambda_reserved_concurrent_executionsAmount of reserved concurrent executions for the scale-up lambda function. A value of 0 disables lambda from being triggered and -1 removes any concurrency limitations.number1no
pool_lambda_timeoutTime out for the pool lambda in seconds.number60no
pool_runner_ownerThe pool will deploy runners to the GitHub org ID, set this value to the org to which you want the runners deployed. Repo level is not supported.stringnullno
prefixThe prefix used for naming resourcesstring"github-actions"no
queue_encryptionConfigure how data on queues managed by the modules in ecrypted at REST. Options are encryped via SSE, non encrypted and via KMSS. By default encryptes via SSE is enabled. See for more details the Terraformaws_sqs_queue resourcehttps://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue.
object({
kms_data_key_reuse_period_seconds = number
kms_master_key_id = string
sqs_managed_sse_enabled = bool
})
{
"kms_data_key_reuse_period_seconds": null,
"kms_master_key_id": null,
"sqs_managed_sse_enabled": true
}
no
redrive_build_queueSet options to attach (optional) a dead letter queue to the build queue, the queue between the webhook and the scale up lambda. You have the following options. 1. Disable by settingenabled to false. 2. Enable by settingenabled totrue,maxReceiveCount to a number of max retries.
object({
enabled = bool
maxReceiveCount = number
})
{
"enabled": false,
"maxReceiveCount": null
}
no
repository_white_listList of github repository full names (owner/repo_name) that will be allowed to use the github app. Leave empty for no filtering.list(string)[]no
role_pathThe path that will be added to role path for created roles, if not set the environment name will be used.stringnullno
role_permissions_boundaryPermissions boundary that will be added to the created roles.stringnullno
runner_additional_security_group_ids(optional) List of additional security groups IDs to apply to the runner.list(string)[]no
runner_architectureThe platform architecture of the runner instance_type.string"x64"no
runner_as_rootRun the action runner under the root user. Variablerunner_run_as will be ignored.boolfalseno
runner_binaries_s3_logging_bucketBucket for action runner distribution bucket access logging.stringnullno
runner_binaries_s3_logging_bucket_prefixBucket prefix for action runner distribution bucket access logging.stringnullno
runner_binaries_s3_sse_configurationMap containing server-side encryption configuration for runner-binaries S3 bucket.any
{
"rule": {
"apply_server_side_encryption_by_default": {
"sse_algorithm": "AES256"
}
}
}
no
runner_binaries_s3_versioningStatus of S3 versioning for runner-binaries S3 bucket. Once set to Enabled the change cannot be reverted via Terraform!string"Disabled"no
runner_binaries_syncer_lambda_memory_sizeMemory size limit in MB for binary syncer lambda.number256no
runner_binaries_syncer_lambda_timeoutTime out of the binaries sync lambda in seconds.number300no
runner_binaries_syncer_lambda_zipFile location of the binaries sync lambda zip file.stringnullno
runner_boot_time_in_minutesThe minimum time for an EC2 runner to boot and register as a runner.number5no
runner_cpu_optionsTThe CPU options for the instance. Seehttps://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/launch_template#cpu-options for details. Note that not all instance types support CPU options, seehttps://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html#instance-cpu-options
object({
core_count = number
threads_per_core = number
})
nullno
runner_credit_specificationThe credit option for CPU usage of a T instance. Can be unset, "standard" or "unlimited".stringnullno
runner_disable_default_labelsDisable default labels for the runners (os, architecture andself-hosted). If enabled, the runner will only have the extra labels provided inrunner_extra_labels. In case you on own start script is used, this configuration parameter needs to be parsed via SSM.boolfalseno
runner_ec2_tagsMap of tags that will be added to the launch template instance tag specifications.map(string){}no
runner_egress_rulesList of egress rules for the GitHub runner instances.
list(object({
cidr_blocks = list(string)
ipv6_cidr_blocks = list(string)
prefix_list_ids = list(string)
from_port = number
protocol = string
security_groups = list(string)
self = bool
to_port = number
description = string
}))
[
{
"cidr_blocks": [
"0.0.0.0/0"
],
"description": null,
"from_port": 0,
"ipv6_cidr_blocks": [
"::/0"
],
"prefix_list_ids": null,
"protocol": "-1",
"security_groups": null,
"self": null,
"to_port": 0
}
]
no
runner_extra_labelsExtra (custom) labels for the runners (GitHub). Separate each label by a comma. Labels checks on the webhook can be enforced by settingenable_workflow_job_labels_check. GitHub read-only labels should not be provided.list(string)[]no
runner_group_nameName of the runner group.string"Default"no
runner_hook_job_completedScript to be ran in the runner environment at the end of every jobstring""no
runner_hook_job_startedScript to be ran in the runner environment at the beginning of every jobstring""no
runner_iam_role_managed_policy_arnsAttach AWS or customer-managed IAM policies (by ARN) to the runner IAM rolelist(string)[]no
runner_log_files(optional) Replaces the module default cloudwatch log config. Seehttps://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html for details.
list(object({
log_group_name = string
prefix_log_group = bool
file_path = string
log_stream_name = string
}))
nullno
runner_metadata_optionsMetadata options for the ec2 runner instances. By default, the module uses metadata tags for bootstrapping the runner, only disableinstance_metadata_tags when using custom scripts for starting the runner.map(any)
{
"http_endpoint": "enabled",
"http_put_response_hop_limit": 1,
"http_tokens": "required",
"instance_metadata_tags": "enabled"
}
no
runner_name_prefixThe prefix used for the GitHub runner name. The prefix will be used in the default start script to prefix the instance name when register the runner in GitHub. The value is availabe via an EC2 tag 'ghr:runner_name_prefix'.string""no
runner_osThe EC2 Operating System type to use for action runner instances (linux,windows).string"linux"no
runner_run_asRun the GitHub actions agent as user.string"ec2-user"no
runners_ebs_optimizedEnable EBS optimization for the runner instances.boolfalseno
runners_lambda_s3_keyS3 key for runners lambda function. Required if using S3 bucket to specify lambdas.stringnullno
runners_lambda_s3_object_versionS3 object version for runners lambda function. Useful if S3 versioning is enabled on source bucket.stringnullno
runners_lambda_zipFile location of the lambda zip file for scaling runners.stringnullno
runners_maximum_countThe maximum number of runners that will be created.number3no
runners_scale_down_lambda_memory_sizeMemory size limit in MB for scale-down lambda.number512no
runners_scale_down_lambda_timeoutTime out for the scale down lambda in seconds.number60no
runners_scale_up_lambda_memory_sizeMemory size limit in MB for scale-up lambda.number512no
runners_scale_up_lambda_timeoutTime out for the scale up lambda in seconds.number30no
runners_ssm_housekeeperConfiguration for the SSM housekeeper lambda. This lambda deletes token / JIT config from SSM.

schedule_expression: is used to configure the schedule for the lambda.
enabled: enable or disable the lambda trigger via the EventBridge.
lambda_memory_size: lambda memery size limit.
lambda_timeout: timeout for the lambda in seconds.
config: configuration for the lambda function. Token path will be read by default from the module.
object({
schedule_expression = optional(string, "rate(1 day)")
enabled = optional(bool, true)
lambda_memory_size = optional(number, 512)
lambda_timeout = optional(number, 60)
config = object({
tokenPath = optional(string)
minimumDaysOld = optional(number, 1)
dryRun = optional(bool, false)
})
})
{
"config": {}
}
no
scale_down_schedule_expressionScheduler expression to check every x for scale down.string"cron(*/5 * * * ? *)"no
scale_up_reserved_concurrent_executionsAmount of reserved concurrent executions for the scale-up lambda function. A value of 0 disables lambda from being triggered and -1 removes any concurrency limitations.number1no
ssm_pathsThe root path used in SSM to store configuration and secrets.
object({
root = optional(string, "github-action-runners")
app = optional(string, "app")
runners = optional(string, "runners")
webhook = optional(string, "webhook")
use_prefix = optional(bool, true)
})
{}no
state_event_rule_binaries_syncerOption to disable EventBridge Lambda trigger for the binary syncer, useful to stop automatic updates of binary distributionstring"ENABLED"no
subnet_idsList of subnets in which the action runner instances will be launched. The subnets need to exist in the configured VPC (vpc_id), and must reside in different availability zones (see#2904)list(string)n/ayes
syncer_lambda_s3_keyS3 key for syncer lambda function. Required if using an S3 bucket to specify lambdas.stringnullno
syncer_lambda_s3_object_versionS3 object version for syncer lambda function. Useful if S3 versioning is enabled on source bucket.stringnullno
tagsMap of tags that will be added to created resources. By default resources will be tagged with name and environment.map(string){}no
tracing_configConfiguration for lambda tracing.
object({
mode = optional(string, null)
capture_http_requests = optional(bool, false)
capture_error = optional(bool, false)
})
{}no
user_agentUser agent used for API calls by lambda functions.string"github-aws-runners"no
userdata_contentAlternative user-data content, replacing the templated one. By providing your own user_data you have to take care of installing all required software, including the action runner and registering the runner. Be-aware configuration paramaters in SSM as well as tags are treated as internals. Changes will not trigger a breaking release.stringnullno
userdata_post_installScript to be ran after the GitHub Actions runner is installed on the EC2 instancesstring""no
userdata_pre_installScript to be ran before the GitHub Actions runner is installed on the EC2 instancesstring""no
userdata_templateAlternative user-data template file path, replacing the default template. By providing your own user_data you have to take care of installing all required software, including the action runner. Variables userdata_pre/post_install are ignored.stringnullno
vpc_idThe VPC for security groups of the action runners.stringn/ayes
webhook_lambda_apigateway_access_log_settingsAccess log settings for webhook API gateway.
object({
destination_arn = string
format = string
})
nullno
webhook_lambda_memory_sizeMemory size limit in MB for webhook lambda in.number256no
webhook_lambda_s3_keyS3 key for webhook lambda function. Required if using S3 bucket to specify lambdas.stringnullno
webhook_lambda_s3_object_versionS3 object version for webhook lambda function. Useful if S3 versioning is enabled on source bucket.stringnullno
webhook_lambda_timeoutTime out of the webhook lambda in seconds.number10no
webhook_lambda_zipFile location of the webhook lambda zip file.stringnullno

Outputs

NameDescription
binaries_syncern/a
deprecated_variables_warningWarning for deprecated variables usage. These variables will be removed in a future release. Please migrate to using the consolidated 'ami' object.
instance_termination_handlern/a
instance_termination_watchern/a
queuesSQS queues.
runnersn/a
ssm_parametersn/a
webhookn/a

[8]ページ先頭

©2009-2025 Movatter.jp