rvn-eks-worker · Latest version: 0.13.0
Dependencies and consumers
Every dependency input can be specified manually to reference existing external infrastructure rather than a Ravion module. Set the dependency input tonull and set its mapped inputs directly; see Use existing infrastructure instead of a module reference.
Readme
Background worker on EKS for running a long-lived private process with no exposed port, and no Kubernetes manifests or Helm charts to write.Overview
EKS Worker runs queue consumers, event processors, and other long-lived background processes on an existing Ravion EKS cluster. Point it at a Git repository or an image you already have, set the start command, resources, and pod count in a form, and Ravion builds the image and keeps the process running on your cluster. There are no Kubernetes manifests to write and no Helm charts to maintain. Under the hood, each deploy installs a Helm chart that Ravion maintains - a packaged template of the Kubernetes resources a worker needs. Thervn-eks-worker chart renders the Deployment that runs your pods, a ServiceAccount, an optional HorizontalPodAutoscaler, and, when the module declares runtime secrets, an ExternalSecret. Each release runs helm upgrade --install --atomic, so a failed deploy rolls back to the previous revision on its own.
The chart deliberately includes no Service, no container port, and no probes. A worker is reached by nothing; it reaches out.
The Terraform stack creates the ECR repository that Dockerfile and Railpack builds push to and, when Fargate is selected, a workload-specific EKS Fargate profile and pod execution role. On the Pull from image registry path with automatic or EC2 compute, the stack creates no AWS resources. Everything else the module needs - cluster endpoint, certificate authority data, private subnet IDs, and the Ravion Runner role - comes from the selected EKS Cluster module.
Chart source: ravionhq/modules/charts/rvn-eks-worker
Terraform source: ravionhq/modules/compute/eks_service
Use cases
Prerequisites
- An EKS Cluster module.
- An EKS Add-ons module attached to that cluster with KEDA enabled, if using Spot burst.
- The External Secrets Operator add-on on that cluster, if the worker uses Runtime secrets.
Build and image options
For Dockerfile and Railpack builds, provide Git repository and optionally Source base path. The stack creates an ECR repository named after the worker, Ravion pushes each build to it, and the chart deploys the resulting digest. Nodes pull from same-account ECR with their own credentials, so no pull secret is involved.
A worker built with Railpack often shares a repository with the web service in front of it. Railpack’s detected start command is rarely the worker’s command, so set the worker’s entrypoint below rather than relying on the image default.
Use Build environment variables for values the build itself needs - a private registry token, a
NODE_ENV that changes what gets compiled. Values can be plain strings or references loaded from Parameter Store or Secrets Manager. For Dockerfile builds, turn on Inject environment variables in Dockerfile to pass them to the build as Docker build arguments; without it they are visible to the builder but not to docker build.
These are separate from Runtime environment variables further down, and deliberately so: a credential needed to install dependencies has no business being in the running pod’s environment. Anything both halves need has to be set in both places.
For Pull from image registry, provide the Image repository without a tag, and use Image pull secret names for a private registry - each entry names a Kubernetes Secret of type kubernetes.io/dockerconfigjson that already exists in the release namespace.
Whichever source you choose, the deploy takes an Image tag or digest. A value beginning with sha256: is used as a digest and everything else as a tag.
Workers usually need a command: use Start command to override the image entrypoint and Start command arguments to override its default arguments. For example, entrypoint bundle with arguments exec sidekiq.
Builder settings
Builder settings apply to Dockerfile and Railpack builds only.
Scan images on push asks ECR to run its basic vulnerability scan on every pushed image. Force delete image repository lets the repository be destroyed while it still holds images; without it, destroying the module fails until the repository is emptied.
Resources and scaling
Kubernetes schedules on requests and enforces on limits. CPU is measured in cores or millicores: 1 is one vCPU and 100m is a tenth of one. Memory uses binary units: 256Mi, 1Gi (1024Mi).
Fargate creates a dedicated profile matching this worker’s namespace and standard app instance label. Fargate pods launch only in the selected cluster’s private subnets and use on-demand capacity; EKS Fargate does not offer Spot pricing. Choose EC2 Spot instead when interruption tolerance and lower compute cost matter more than serverless pod placement.
Autoscaling is off by default, unlike the web module. CPU utilization is a poor proxy for worker demand: a worker blocked on a queue poll uses almost no CPU no matter how deep the backlog. Enable it when the work is genuinely CPU-bound, and prefer a fixed pod count otherwise.
KEDA Spot burst
Spot burst is optional and off by default. Enable it only with Compute target set to EC2 on-demand; configure Baseline pods (default 2, minimum 1), Minimum Spot pods (default 0), Maximum Spot pods (default 8, minimum 1), Polling interval (secs) (default 30), Cooldown period (secs) (default 300), and the required KEDA triggers array. The On-Demand baseline remains fixed while a separate Spot Deployment starts at the configured minimum. If that minimum is zero, CPU- or memory-only triggers cannot wake the pool; choose a signal that reports demand with no Spot application pods running, and set thresholds with baseline capacity in mind. Select KEDA in the EKS add-ons module and apply the add-ons before enabling burst mode. Authentication resources and any referenced Kubernetes Secrets must be provisioned separately in the appropriate namespace or cluster scope. Put references, not credentials, in the trigger configuration; this module does not create trigger IAM permissions. KEDA 2.20.2’s published Kubernetes test matrix covers versions 1.33–1.35; verify compatibility with newer clusters, including 1.36, in staging. The Spot Deployment reuses the same image and pod configuration, so review duplicate job processing and idempotency before enabling it; no application code or configuration is migrated automatically. Each active Spot pod and the KEDA controllers add cost, and Spot capacity may be interrupted or unavailable. A new Spot Deployment starts at the configured minimum. On Helm upgrades, its live replica count is preserved unless below that minimum; counts above the maximum are left for KEDA to reconcile. Offline renders show the configured minimum, and the deployment identity needs permission to read Deployments in the namespace. When the minimum is zero, no Spot image is exercised until KEDA activates it; verify readiness separately in staging. Validate permissions, trigger behavior, and scaling before production. Shutdown grace period (secs) is the window a pod gets after SIGTERM to finish in-flight work before it is killed. The default of 30 seconds suits short tasks. Raise it to at least the length of your longest job, or a rollout will kill work mid-flight.Zone placement
Worker pods are spread across the cluster’s availability zones with a softtopology.kubernetes.io/zone spread constraint, so a small cluster never leaves pods pending. Combined with the zone-local routing the EKS Web Service and EKS Cluster modules apply, a worker’s calls to other services and to DNS stay inside its own zone whenever a destination pod exists there, which keeps AWS cross-AZ data transfer charges off that traffic.
Application configuration
Use Runtime environment variables for plain values, as an array of{name, value} objects.
Use Runtime secrets for sensitive values, as an array of {name, value_from} objects - the same shape as ECS. value_from must be a full Secrets Manager or SSM Parameter Store ARN, including the JSON-key extraction suffix when you want a single key out of a JSON secret.
Ravion never reads these values. The ARNs travel to the chart as references, the chart renders an ExternalSecret, and the External Secrets Operator materializes the Kubernetes Secret in the cluster. No secret value reaches Ravion, the Helm values document, or the Helm release history.
Deployment
Every deploy runshelm upgrade --install --atomic, so a release either lands completely or leaves the cluster on the previous revision. Pods roll with zero unavailable. Maximum rollout surge (%) defaults to 100%, allowing a full replacement set to start together when enough matching capacity is already available. Lower this advanced setting to limit temporary capacity. The disruption budget controls voluntary evictions such as node drains, not Deployment rolling updates; shutdown grace still allows old workers to finish in-flight work.
Deployments collapse: if several are queued, only the newest runs.
Metrics and logs
The Metrics and Logs tabs follow the providers selected on the EKS add-ons module referenced above. You configure observability once, on that module, and every workload attached to it follows; there is nothing to set here. Without an add-ons reference both tabs stay empty. Where several providers can serve the same signal they form a fallback chain, not a merge. The tab reads the first store that can answer right now and moves to the next when it cannot, saying which store it ended up using. Reading two stores at once would draw every line twice.
The practical effect is that the in-cluster store’s one weakness stops being fatal. Loki is reached through the Ravion Operator, so with the agent offline those logs are unavailable - but if CloudWatch Logs is also selected, the tab shows CloudWatch and says so, then switches back when the agent returns.
Charts are the same five golden signals whichever store answers: CPU, memory working set, container restarts, network in, and network out. Two things differ on the CloudWatch link of the chain, and are worth knowing before you read a number off it:
- Container Insights reports per pod, Prometheus reports across pods. A CloudWatch chart is an average over the worker’s pods; the Prometheus charts sum them. Same shape, different magnitude.
- It needs enhanced observability, which the add-ons module turns on with CloudWatch by default. Without it, CPU and memory come back empty.
Configuration
Design decisions
- Terraform owns AWS-side workload infrastructure. The worker itself is Helm-owned; the stack creates an ECR repository when Ravion builds the image and a dedicated EKS Fargate profile when Fargate is selected. With a pulled image and automatic or EC2 compute, it creates nothing.
- No Nixpacks. ECS still carries a Nixpacks build source for services created before Railpack existed. EKS has no such history, so Dockerfile and Railpack are the only builders.
- No Service and no probes. A worker exposes no port, so there is nothing to route to and no HTTP endpoint to check. Liveness for a worker is better expressed by letting the process exit on a fatal error and letting Kubernetes restart it.
- Autoscaling defaults off. CPU utilization rarely tracks worker demand. Turning it on by default would produce autoscaling that looks configured but never fires.
- Name and namespace are fixed after creation. Together they identify the Helm release that rollback and history target.
- Pod Identity, not IRSA. The chart emits a stable ServiceAccount name and no role annotation. With Create IAM role on, the stack creates the role and an
aws_eks_pod_identity_associationbinding it to that ServiceAccount by namespace and name; the trust policy is pinned to this cluster and account. No IAM OIDC provider is involved.
Learn more
- AWS Fargate profile
- Kubernetes Deployments
- Pod termination and graceful shutdown
- HorizontalPodAutoscaler
- External Secrets Operator
Inputs reference
All inputs forrvn-eks-worker version 0.13.0. Use the name shown for each field as the input key in module config.
EKS cluster
$ref:rvn-eks-cluster
required
Cluster.
- Immutable after creation
cluster to null.
Mapped inputs for cluster: set these keys alongside cluster, not inside it, when supplying existing infrastructure instead of a module reference.
section
AWS account & region.
string
AWS account.
- Default:
<< ref.input.aws_account_id >> - Immutable after creation
string
Region. Region of the selected cluster. Must match the region in the cluster ARN, which Ravion cross-checks on every deploy.
- Default:
<< ref.input.aws_region >> - Immutable after creation
string
Terraform execution environment. Terraform execution environment inherited from the selected EKS cluster.
- Default:
<< ref.input.execution_environment_id >>
section
EKS cluster.
string
required
EKS cluster name.
- Default:
<<ref.stack.output.cluster_name>> - Immutable after creation
string
required
Cluster ARN. Ravion resolves the owning AWS account and region from this ARN, and rejects a deploy whose cluster name or region disagrees with it.
- Default:
<<ref.stack.output.cluster_arn>> - Immutable after creation
string
required
Cluster API endpoint. HTTPS endpoint of the Kubernetes API server. May be private-only; the deploy runner executes inside the cluster VPC.
- Default:
<<ref.stack.output.cluster_endpoint>> - Immutable after creation
string
required
Cluster certificate authority data. Base64-encoded CA bundle used to verify the API server’s TLS certificate. Public key material, not a credential.
- Default:
<<ref.stack.output.cluster_certificate_authority_data>> - Immutable after creation
string
required
Ravion Runner role ARN. Stable IAM role the deploy runner assumes to obtain a cluster token. Registered as an EKS access entry by the cluster module.
- Default:
<<ref.stack.output.ravion_runner_role_arn>> - Immutable after creation
string
Ravion Runner security group ID. Security group the deploy runner’s network interface joins so it can reach the cluster API endpoint. Null when the cluster module did not create one, which is only workable if the endpoint is public or the execution environment supplies its own group.
- Default:
<<ref.stack.output.ravion_runner_security_group_id>> - Immutable after creation
string
required
VPC ID. VPC the cluster runs in. Load balancer target groups must live in the same VPC as the pods they register.
- Default:
<<ref.input.vpc_id>> - Immutable after creation
string_array
required
Cluster private subnet IDs. Private subnets from the selected EKS cluster. A workload targeting Fargate launches pod network interfaces in these subnets; EKS Fargate does not support public subnets.
- Default:
<<ref.input.subnet_ids>> - Immutable after creation
- Shown when:
{"compute_target":"fargate"}
$ref:rvn-eks-addons
EKS add-ons. Select this cluster’s Add-ons module for observability or KEDA when using Spot burst.
addons to null.
Mapped inputs for addons: set these keys alongside addons, not inside it, when supplying existing infrastructure instead of a module reference.
string
AMP workspace ID. Amazon Managed Prometheus workspace the cluster’s metrics collector writes to. Inherited from the selected add-ons module; empty until its stack applies with Amazon Managed Prometheus selected.
- Default:
<<ref.stack.output.amp_workspace_id>>
string
AMP region. Region of the Amazon Managed Prometheus workspace. Inherited from the selected add-ons module; empty until its stack applies with Amazon Managed Prometheus selected.
- Default:
<<ref.stack.output.amp_region>>
string_array
Logs rendering providers. Log stores the Logs tab reads from, in fallback order. Inherited from the selected add-ons module; blank means the in-cluster Loki store.
- Default:
<<ref.stack.output.logs_rendering_providers>>
string_array
Metrics rendering providers. Metric stores the Metrics tab reads from, in fallback order. Inherited from the selected add-ons module; blank means Amazon Managed Prometheus.
- Default:
<<ref.stack.output.metrics_rendering_providers>>
string
CloudWatch log group. Log group the cluster’s collector writes to when Amazon CloudWatch Logs is a selected logs provider. One stream per pod, named namespace/pod/container.
- Default:
<<ref.stack.output.logs_cloudwatch_log_group>>
string
In-cluster Prometheus endpoint. URL of the Prometheus running in the cluster, queried through the Ravion Operator when Prometheus is a selected metrics provider.
- Default:
<<ref.stack.output.prometheus_endpoint>>
array
Logs vendor links. One entry per logs provider that ships to a vendor rather than rendering in Ravion, as {provider, name, href_prefix}. The Logs tab turns each into an “Open in …” action pointing at this workload.
- Default:
<<ref.stack.output.logs_external_links>>
array
Metrics vendor links. One entry per metrics provider that ships to a vendor rather than rendering in Ravion, as {provider, name, href_prefix}. The Metrics tab turns each into an “Open in …” action pointing at this workload.
- Default:
<<ref.stack.output.metrics_external_links>>
string
Grafana Cloud logs query URL. Grafana Cloud Loki query endpoint, used when Ravion reads Grafana Cloud logs through the Ravion Operator.
- Default:
<<ref.stack.output.grafana_cloud_logs_query_url>>
string
Grafana Cloud metrics query URL. Grafana Cloud Prometheus query endpoint, used when Ravion reads Grafana Cloud metrics through the Ravion Operator.
- Default:
<<ref.stack.output.grafana_cloud_metrics_query_url>>
string
Observability credentials secret. Name of the Kubernetes Secret in the Ravion Operator namespace holding vendor query credentials. A name only - Ravion never reads the values.
- Default:
<<ref.stack.output.observability_credentials_secret_name>>
boolean
KEDA enabled. Read from the selected EKS Add-ons module’s applied output; missing outputs default to false.
- Default:
<< ref.output.keda_enabled == true >>
Worker service
string
required
Service name. Name for the Helm release and the Kubernetes objects it creates.
- Default:
<<project.given_id>>-<<environment.given_id>>-<<module.given_id>> - Immutable after creation
- Pattern:
^[a-z0-9]([a-z0-9-]{0,51}[a-z0-9])?$— 1-53 lowercase letters, numbers, and hyphens. Start and end with a letter or number.
string
required
Namespace. Kubernetes namespace the release installs into.
- Default:
<<project.given_id>>-<<environment.given_id>> - Immutable after creation
- Pattern:
^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$— 1-63 lowercase letters, numbers, and hyphens. Start and end with a letter or number.
boolean
Create namespace. Create the namespace if it does not already exist. Turn off when the namespace is managed elsewhere.
- Default:
true
Build config
string
required
Build source.
- Default:
dockerfile - Allowed values:
dockerfile(Dockerfile),railpack(Railpack),image_registry(Pull from image registry)
gitrepo
required
Git repository. Repository containing the application source for Dockerfile or Railpack builds.
- Shown when:
{"build_source":["dockerfile","railpack"]}
string
Source base path. Repository-relative source and build root.
- Default:
. - Shown when:
{"build_source":["dockerfile","railpack"]}
object
Build environment variables. Only available during the build, not at runtime. Use environment variables or secrets for runtime values.
- Shown when:
{"build_source":["dockerfile","railpack"]}
Docker
string
Dockerfile path. Path to the Dockerfile to use for the build, relative to the repository root or configured source base path.
- Shown when:
{"build_source":"dockerfile"}
string
Docker build context path. Directory to use as the Docker build context, relative to the repository root or configured source base path.
- Shown when:
{"build_source":"dockerfile"}
boolean
Inject environment variables in Dockerfile. Pass build environment variables into Dockerfile builds as build arguments.
- Default:
false - Shown when:
{"build_source":"dockerfile"}
Railpack
string
Railpack version. Optional Railpack version to use for the build. Leave blank to use the Ravion default.
- Pattern:
^(|latest|v?[0-9]+\.[0-9]+\.[0-9]+(?:[-+][0-9A-Za-z.-]+)?)$— Leave blank, use latest, a semantic version like 0.29.0, or a v-prefixed version like v0.29.0. - Shown when:
{"build_source":"railpack"}
string
Install command. Optional dependency installation command. Leave blank to use Railpack detection.
- Shown when:
{"build_source":"railpack"}
string
Build command. Optional application build command. Leave blank to use Railpack detection.
- Shown when:
{"build_source":"railpack"}
string
Start command.
- Shown when:
{"build_source":"railpack"}
Image
string
required
Image repository. Image repository without a tag, such as 123456789012.dkr.ecr.us-east-1.amazonaws.com/api. The tag or digest is supplied at deploy time.
- Shown when:
{"build_source":"image_registry"}
string_array
Image pull secret names. Names of existing kubernetes.io/dockerconfigjson Secrets in the release namespace, for private registries.
- Shown when:
{"build_source":"image_registry"}
string_array
Start command. Overrides the image entrypoint. Leave empty to use the image default.
string_array
Start command arguments. Overrides the image default arguments. Leave empty to use the image default.
Resources
string
required
Compute target. Choose whether Kubernetes schedules this workload automatically, on a specific EC2 capacity type, or on a dedicated EKS Fargate profile. EKS Fargate capacity is on-demand only.
- Default:
any - Allowed values:
any(Automatic),on_demand(EC2 on-demand),spot(EC2 Spot),fargate(Fargate)
string
required
CPU request. CPU reserved for the pod and its guaranteed share under load. 1 is one vCPU; m is thousandths of a core, so 100m is a tenth. Autoscaling CPU targets are a percentage of this value.
- Default:
100m - Pattern:
^[0-9]+(\.[0-9]+)?m?$— A CPU quantity such as 100m, 0.5, or 2.
string
CPU limit. Optional CPU ceiling, in the same units. Leave blank to let a pod burst into spare node CPU.
- Pattern:
^[0-9]+(\.[0-9]+)?m?$— A CPU quantity such as 100m, 0.5, or 2.
string
required
Memory request. Memory reserved for the pod, in binary units such as 256Mi or 1Gi (1024Mi). Set this close to steady-state usage.
- Default:
256Mi - Pattern:
^[0-9]+(\.[0-9]+)?(Ki|Mi|Gi|Ti|k|M|G|T)?$— A memory quantity such as 256Mi, 1Gi, or 512M.
string
required
Memory limit. Memory ceiling, in the same units. Exceeding it terminates the container with OOMKilled, so set it above the worst legitimate spike.
- Default:
512Mi - Pattern:
^[0-9]+(\.[0-9]+)?(Ki|Mi|Gi|Ti|k|M|G|T)?$— A memory quantity such as 256Mi, 1Gi, or 512M.
Scaling
boolean
Autoscaling. Scale pods with a HorizontalPodAutoscaler. Requires the metrics server or an equivalent metrics API in the cluster.
- Default:
false - Shown when:
{"spot_burst_enabled":{"not":true}}
number
Minimum pods.
- Default:
1 - Min:
1 - Max:
1000 - Shown when:
{"autoscaling_enabled":true,"spot_burst_enabled":{"not":true}}
number
Maximum pods.
- Default:
3 - Min:
1 - Max:
1000 - Shown when:
{"autoscaling_enabled":true,"spot_burst_enabled":{"not":true}}
number
CPU target (%). Average CPU utilization, as a percentage of the CPU request, the autoscaler aims to hold.
- Default:
70 - Min:
1 - Max:
100 - Shown when:
{"autoscaling_enabled":true,"spot_burst_enabled":{"not":true}}
number
Memory target (%). Optional average memory utilization target, as a percentage of the memory request. Leave blank to scale on CPU alone.
- Min:
1 - Max:
100 - Shown when:
{"autoscaling_enabled":true,"spot_burst_enabled":{"not":true}}
number
Pods. Number of worker pods to run when autoscaling is disabled.
- Default:
1 - Min:
0 - Max:
1000 - Shown when:
{"autoscaling_enabled":false,"spot_burst_enabled":{"not":true}}
boolean
Spot burst. Run a fixed On-Demand baseline with a separate KEDA-scaled Spot pool that starts at the configured minimum.
- Default:
false - Shown when:
{"compute_target":"on_demand"}
number
Baseline pods. Fixed number of On-Demand pods kept available while the Spot pool scales independently.
- Default:
2 - Min:
1 - Max:
1000 - Shown when:
{"compute_target":"on_demand","spot_burst_enabled":true}
number
Minimum Spot pods. Lower bound for replicas in the KEDA-managed Spot pool.
- Default:
0 - Min:
0 - Max:
1000 - Shown when:
{"compute_target":"on_demand","spot_burst_enabled":true}
number
Maximum Spot pods. Upper limit for pods in the KEDA-scaled Spot pool.
- Default:
8 - Min:
1 - Max:
1000 - Shown when:
{"compute_target":"on_demand","spot_burst_enabled":true}
array
required
KEDA triggers. At least one trigger must report demand at the configured minimum. If the minimum is zero, CPU or memory alone cannot wake the pool. Reference pre-created authentication resources only.
- Shown when:
{"compute_target":"on_demand","spot_burst_enabled":true}
number
Polling interval (secs). Seconds between KEDA trigger checks.
- Default:
30 - Min:
1 - Shown when:
{"compute_target":"on_demand","spot_burst_enabled":true}
number
Cooldown period (secs). Seconds KEDA waits after the last active trigger before scaling the Spot pool down.
- Default:
300 - Min:
0 - Shown when:
{"compute_target":"on_demand","spot_burst_enabled":true}
number
Spot pods when metrics fail. Minimum Spot pods kept while KEDA cannot read its metrics; running pods are never removed. Empty uses the maximum. Not applied to CPU, memory or Utilization triggers.
- Min:
0 - Max:
1000 - Shown when:
{"compute_target":"on_demand","spot_burst_enabled":true}
number
Maximum rollout surge (%). Extra pods Kubernetes may create during a rolling update, as a percentage of the desired count. Use 100 to create a full replacement set at once when the cluster has enough spare capacity. Zero-unavailable rollout protection remains enabled.
- Default:
100 - Min:
1 - Max:
100
number
Shutdown grace period (secs). Seconds a pod has to finish in-flight work after SIGTERM before it is killed. Raise this for workers with long-running jobs.
- Default:
30 - Min:
0 - Max:
3600
boolean
Disruption budget. Limit how many pods node drains, consolidation and cluster upgrades may evict at once. A worker loses its in-flight work when it is evicted, so draining a fleet all at once loses all of it. Takes effect only while the minimum pod count is above Minimum available pods, since a budget that allows no evictions would block every drain.
- Default:
true
number
Minimum available pods. Pods that must stay running during a node drain or other voluntary disruption.
- Default:
1 - Min:
1 - Max:
1000 - Shown when:
{"pod_disruption_budget_enabled":true}
Environment variables
array
Runtime environment variables. Plain environment variables passed to the container, as an array of {name, value} objects.
array
Runtime secrets. Secret references injected at runtime, as an array of {name, value_from} objects. value_from must be a full Secrets Manager or SSM Parameter Store ARN. Ravion never reads these values; the External Secrets Operator resolves them inside the cluster.
AWS permissions
boolean
Create IAM role. Create an IAM role for this workload and bind it to its pods through EKS Pod Identity, so the AWS SDK obtains short-lived credentials for it without any keys. Leave off for a workload that calls no AWS API as itself. The role ARN is a stack output other modules can pin.
- Default:
false
string
IAM role name. Name of the workload’s IAM role. Leave blank for <service>-task, the ECS task role shape. IAM role names are unique per account, so a service that also runs on ECS, or on another cluster, needs its own name, for example <service>-eks-<environment>.
- Pattern:
^[\w+=,.@-]{1,64}$— 1-64 characters of letters, digits and + = , . @ _ - - Shown when:
{"pod_identity_role_creation_enabled":true}
string_array
IAM policy ARNs. Managed IAM policy ARNs attached to the workload’s role.
- Default:
[] - Shown when:
{"pod_identity_role_creation_enabled":true}
object
IAM inline policies. Inline IAM policy documents attached to the workload’s role, keyed by policy name. The same shape as the ECS task role inline policies, so a service moving from ECS can carry its policies over unchanged.
- Shown when:
{"pod_identity_role_creation_enabled":true}
Builder config
string
required
Builder capacity type. Sandbox starts fastest. EC2 spot costs less but may wait for capacity or be interrupted.
- Default:
sandbox - Allowed values:
sandbox(Sandbox),ec2(EC2),ec2-spot(EC2 spot) - Shown when:
{"build_source":["dockerfile","railpack"]}
string
required
Builder instance type. EC2 instance type for builds. Start with the default value, then increase or decrease it based on the resource usage report at the end of builds.
- Default:
c7a.4xlarge - Shown when:
{"build_capacity_type":["ec2","ec2-spot"],"build_source":["dockerfile","railpack"]}
number
required
Builder vCPUs.
- Default:
14 - Shown when:
{"build_capacity_type":"sandbox","build_source":["dockerfile","railpack"]}
number
required
Builder memory (GiB).
- Default:
28 - Shown when:
{"build_capacity_type":"sandbox","build_source":["dockerfile","railpack"]}
number
Builder disk (GiB). Space the build reserves on the pool host for what it writes. Larger values let fewer builds share a host.
- Default:
30 - Shown when:
{"build_capacity_type":"sandbox","build_source":["dockerfile","railpack"]}
boolean
Interruptible build. Lets the build run on spot hosts and start over if AWS reclaims the host. Turn off if your build commands change anything outside the build, such as running database migrations.
- Default:
true - Shown when:
{"build_capacity_type":"sandbox","build_source":["dockerfile","railpack"]}
string
Builder execution environment. Optional execution environment ID or given ID for builds. Defaults to the module Terraform execution environment.
- Shown when:
{"build_source":["dockerfile","railpack"]}
string
Builder AMI. Optional AMI ID for build runners. Leave empty to use the default runner image.
- Shown when:
{"build_capacity_type":["ec2","ec2-spot"],"build_source":["dockerfile","railpack"]}
boolean
Include default build policies. The step’s built-in policies (ECR/S3 access, CloudWatch agent) stay attached alongside your Builder IAM policies. Turn off to run the build with only the policies listed below.
- Default:
true - Shown when:
{"build_source":["dockerfile","railpack"]}
string_array
Builder IAM policies. IAM managed policy ARNs for the EC2 build runner role, applied for the duration of each build.
- Default:
[] - Shown when:
{"build_source":["dockerfile","railpack"]}
Image registry lifecycle
boolean
Scan images on push. Ask ECR to run its basic vulnerability scan whenever a new image is pushed. Keep this on for early dependency and OS package findings; disable only if another scanner owns image scanning or duplicate findings are noisy.
- Default:
true - Shown when:
{"build_source":["dockerfile","railpack"]}
boolean
Force delete image repository. Allow the ECR repository to be deleted even when it contains images. Use with care.
- Default:
false - Shown when:
{"build_source":["dockerfile","railpack"]}
Misc
keyvalue
Tags. A map of tags to assign to all resources. Default tags are
Owner, ProjectGivenId, EnvironmentGivenId, ModuleGivenId, ModuleIdTerraform settings
string
OpenTofu version override. Override the environment’s default version for this module
string
Ravion Terraform workspace name. Override Terraform state backend workspace name. Defaults to project + environment + module given ids.
- Immutable after creation
boolean
Include default plan policies. Turn off to plan with only the policies below instead of the default read-only policies. Requires at least one policy below.
- Default:
true
string_array
Terraform plan IAM policies. IAM managed policy ARNs for the Terraform plan runner role. Without default policies, allow s3:CreateBucket, s3:PutObject, s3:GetObject, and s3:ListBucket on the ravion-terraform-plans-<AWS account number> bucket in this account.
- Default:
[]
boolean
Include default apply policies. Turn off to apply and destroy with only the policies below instead of AdministratorAccess. Requires at least one policy below.
- Default:
true
string_array
Terraform apply IAM policies. IAM managed policy ARNs for the Terraform apply runner role. Without default policies, allow s3:CreateBucket, s3:PutObject, s3:GetObject, and s3:ListBucket on the ravion-terraform-plans-<AWS account number> bucket in this account.
- Default:
[]
object
Advanced Terraform variables. Optional raw Terraform variable overrides for advanced module inputs or one-off overrides. Values here override the generated variables above.
- Default:
{}