Skip to main content
Version: 5.8.x

workflows

Requirements

NameVersion
terraform>= 1.4.0
aws>= 4.58.0, < 5.0.0

Providers

NameVersion
aws>= 4.58.0, < 5.0.0

Modules

NameSourceVersion
alerting./alertingn/a
bk./bkn/a
cci./ccin/a
core./coren/a
delivery./deliveryn/a
eks./eksn/a
eks_storage_class./eks/storageclassn/a
gha./ghan/a
gl./gln/a
logging./loggingn/a
monitoring./monitoringn/a
remote_cache./remoten/a
services../workflows-servicesn/a
warming./warmingn/a

Resources

NameType
aws_caller_identity.defaultdata source
aws_iam_policy_document.operatordata source
aws_iam_policy_document.supportdata source
aws_region.defaultdata source

Inputs

NameDescriptionTypeDefaultRequired
account_idAccount ID of the AWS Account where CloudWatch alarms residestringnullno
aspect_artifacts_bucketS3 bucket where Aspect delivers workflows assetsstring"aspect-artifacts"no
bk_runner_groupsMapping of Buildkite runner group name to settings for that runner group
map(object({
# Common settings for all CI hosts
agent_idle_timeout_min = number
max_runners = number
min_runners = number
policies = optional(map(string), {})
queue = string
resource_type = string
security_groups = optional(map(string), {})
warming = optional(bool, false)
warming_set = optional(string, "default")
exclude_oncall_alerts = optional(list(string), [])

# Settings specific to Buildkite
artifacts_store = optional(string, "")
}))
{}no
cci_runner_groupsMapping of CircleCI runner group name to settings for that runner group
map(object({
# Common settings for all CI hosts
agent_idle_timeout_min = number
max_runners = number
min_runners = number
policies = optional(map(string), {})
resource_type = string
scaling_polling_frequency = optional(number, 1)
security_groups = optional(map(string), {})
warming = optional(bool, false)
warming_set = optional(string, "default")
exclude_oncall_alerts = optional(list(string), [])

# Settings specific to CircleCI
job_max_run_time_min = number
}))
{}no
cost_allocation_tagThe tag name used for cost taggingstring"CreatedBy"no
cost_allocation_tag_valueThe value of the cost tagstringnullno
customer_idName of the deploymentstringn/ayes
default_cli_versionThe version of the Aspect CLI to fall back to when using an unstamped development Workflows versionstring"5.7.5"no
delivery_enabledIf delivery infrastructure is enabled for Aspect Workflowsbooltrueno
enable_ssm_accessAdd policies that allow access to CI infrastructure instances via SSMboolfalseno
experimental_remoteConfiguration for the remote cache
object({
# Number of storage shards
cache_shards = number
# Amount of disk space allocated to the remote cache across all shards.
cache_size_gb = number
# Replicas of the load balancer service that schedules work on storage pods.
# Will also be used for remote execution pods when supported.
load_balancer_replicas = number
# Whether to create a read replica of cache shards
replicate_cache = bool
})
{
"cache_shards": 3,
"cache_size_gb": 384,
"load_balancer_replicas": 2,
"replicate_cache": false
}
no
experimentsA map of experiment name (as given by Aspect) to its enabled statusmap(bool){}no
gha_runner_groupsMapping of GitHub Actions runner group name to settings for that runner group
map(object({
# Common settings for all CI hosts
agent_idle_timeout_min = number
max_runners = number
min_runners = number
policies = optional(map(string), {})
queue = string
resource_type = string
scaling_polling_frequency = optional(number, 1)
security_groups = optional(map(string), {})
warming = optional(bool, false)
warming_set = optional(string, "default")
exclude_oncall_alerts = optional(list(string), [])

# Settings specific to GitHub Actions
gh_repo = string
gha_workflow_ids = optional(list(string), [])
}))
{}no
gl_runner_groupsMapping of GitLab runner group name to settings for that runner group
map(object({
# Common settings for all CI hosts
agent_idle_timeout_min = number
max_runners = number
min_runners = number
policies = optional(map(string), {})
queue = string
resource_type = string
scaling_polling_frequency = optional(number, 1)
security_groups = optional(map(string), {})
warming = optional(bool, false)
warming_set = optional(string, "default")
exclude_oncall_alerts = optional(list(string), [])

# Settings specific to GitLab
gitlab_url = optional(string, "https://gitlab.com")
project_id = string
}))
{}no
hosts####################################### CI host configuration options #list(string)n/ayes
k8s_clusterEKS cluster configuration
object({
cluster_version = optional(string, "1.27")
min_size = optional(number, 1)
max_size = optional(number, 10)
desired_size = optional(number, 3)
instance_types = optional(list(string), ["t3.large"])
image_id = optional(string, null)
})
{}no
monitoring_configMonitoring configuration
object({
grafana_image_id = optional(string, null) // defaults to default_ami_arm from core module if unset
grafana_instance_type = optional(string, "t4g.micro")
grafana_volume_size_gb = optional(number, 64)
prometheus_image_id = optional(string, null) // defaults to default_ami_arm from core module if unset
prometheus_instance_type = optional(string, "t4g.small")
prometheus_volume_size_gb = optional(number, 64)
})
{}no
monitoring_enabledIf monitoring is enabled for Aspect Workflowsboolfalseno
pagerduty_integration_keyThe integration key for PagerDuty, provided by Aspectstringn/ayes
product_versionProduct version info. Internal use only.string"0.0.0-PLACEHOLDER"no
regionThe default region to setup services instringnullno
remote_cache_enabledIf the remote cache is enabled for Aspect Workflowsbooltrueno
remote_cache_instance_scaleInstance scale to apply to the instance type used for the remote cache.
This string will appear in an expression like i4i.{scale}large, therefore valid values are x, 2x, ... 32x
string""no
resource_typesMapping of resource types name to settings for that type
map(object({
# The ID of the AMI to use for this resource
image_id = string

# A list of instance types that are acceptable in the ASG
instance_types = list(string)

# The size of the root EBS volume in GB
root_volume_size_gb = optional(number, 64)

# Tags to apply to this resource
tags = optional(map(string), {})

# Defines if spot instances should be used for this resource
use_spot = optional(bool, false)

# When using spot instances, allows further customization over the spot vs on-demand allocation
instance_policy = optional(object({
on_demand_base_capacity = optional(number, 0)
on_demand_percentage_above_base_capacity = optional(number, 0)
spot_allocation_strategy = optional(string, "price-capacity-optimized")
spot_max_price = optional(string, "")
spot_instance_pools = optional(number, 2)
}), {})
}))
{}no
vpc_idID of the VPC in which to deploystringn/ayes
vpc_subnetsList of subnet IDs to use for VM infrastructurelist(string)n/ayes
vpc_subnets_publicList of subnet IDs to use for public facing VM infrastructurelist(string)[]no
warming_setsMapping of warming set to settings for that setmap(object({})){}no

Outputs

NameDescription
bk_git_ssh_key_secret_idsMapping of BuildKite runner name to ssh key secret ID
bk_token_secret_idsMapping of BuildKite runner name to BuildKite agent token secret ID
cost_allocation_tagName of the cost allocation tag to use
cost_allocation_tag_valueThe value of the cost allocation tag
gha_lambda_webhook_secret_idsMapping of GitHub Actions runner name and repo key to the ID's of the secrets containing the webhook token that the scaling lambda will use to verify the event came from GitHub
gha_secret_idsMapping of GitHub Actions runner name and repo key to secret ID
github_rebase_token_secret_idSecret ID for the GitHub rebase token
grafana_password_secret_read_policyAn IAM policy document allowing reading of the generated password set for Grafana.
license_secret_idSecret ID for the Aspect Workflows license key
operator_policyAn IAM policy document that provides privileged access to key observability, metrics and configuration for Workflows
runner_secret_idsMapping of CircleCI runner name to secret ID
support_policyAn IAM policy document that provides read only access to key observability, metrics and configuration for Workflows
warming_management_policiesn/a