Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Variable Reference

All configuration variables for evm-cloud, organized by category. Variables marked sensitive are redacted in Terraform plan/apply output.

Most Impactful Variables

These are the variables that most affect your deployment's cost, performance, and architecture:

VariableImpactDefaultWhat It Controls
compute_engineArchitectureec2Entire deployment model: EC2+Docker, EKS, k3s, or bare metal
ec2_instance_type / k3s_instance_typeCost + Performancet3.mediumInstance size — biggest cost driver
ec2_indexer_mem_limitPerformance2gHow much RAM rindexer can use (increase for large indexing jobs)
workload_modeWorkflowterraformWhether Terraform or external tools manage workloads
postgres_instance_classCostdb.t4g.microRDS instance size (when using managed Postgres)
network_enable_nat_gatewayCostfalseNAT gateway adds ~$35/mo — skip for dev

Core

VariableTypeDefaultDescription
project_namestring(required)Resource naming prefix. Must be non-empty.
infrastructure_providerstring"aws"Provider adapter: aws or bare_metal.
compute_enginestring"ec2"Compute engine: ec2, eks, k3s, or docker_compose. See Concepts for details.
workload_modestring"terraform"terraform (manage workloads) or external (output handoff only).
deployment_targetstring"managed"Deployment mode: managed, hybrid, or self_hosted.
runtime_archstring"multi"Architecture intent: amd64, arm64, or multi.
database_modestring"managed"Database mode: managed or self_hosted.
streaming_modestring"disabled"Streaming: managed, self_hosted, or disabled.
ingress_modestring"managed_lb"Ingress: managed_lb or self_hosted.

Valid Compute Engine Combinations

ProviderAllowed Engines
awsec2, eks, k3s
bare_metaldocker_compose, k3s

Note: k3s requires workload_mode = "external" (two-phase deployment).


Networking (AWS)

VariableTypeDefaultDescription
networking_enabledboolfalseEnable VPC provisioning. Required for most AWS deployments.
network_environmentstring"dev"Profile: dev (minimal SGs), production (multi-AZ, NAT), platform (full).
network_vpc_cidrstring"10.42.0.0/16"VPC CIDR block.
network_availability_zoneslist(string)["us-east-1a", "us-east-1b"]AZs for subnet placement.
network_enable_nat_gatewayboolfalseNAT gateway for private subnet egress. Adds ~$35/mo. Skip for dev.
network_enable_vpc_endpointsboolfalseS3 gateway + interface endpoints (ECR, CloudWatch, SSM).
aws_regionstring"us-east-1"AWS region.
aws_skip_credentials_validationboolfalseSkip credential checks (for LocalStack testing).

EC2 Compute

Required when compute_engine = "ec2".

VariableTypeDefaultSensitiveDescription
ssh_public_keystring""YesSSH public key content for the EC2 key pair. Required for EC2 and k3s.
ec2_instance_typestring"t3.medium"NoEC2 instance type. See sizing guide below.
ec2_rpc_proxy_mem_limitstring"1g"NoDocker memory limit for eRPC container.
ec2_indexer_mem_limitstring"2g"NoDocker memory limit for rindexer container.
ec2_secret_recovery_window_in_daysnumber7NoSecrets Manager deletion window. Set to 0 for dev (immediate delete).

k3s Compute

Required when compute_engine = "k3s".

VariableTypeDefaultSensitiveDescription
k3s_instance_typestring"t3.medium"NoEC2 instance type for the k3s host.
k3s_versionstring"v1.30.4+k3s1"NoPinned k3s version.
k3s_ssh_private_key_pathstring""YesPath to SSH private key for host provisioning.
k3s_api_allowed_cidrslist(string)[]NoCIDRs allowed to access k3s API (port 6443). Defaults to VPC CIDR. Add your IP for Terraform provisioning.
ssh_public_keystring""YesSSH public key for the k3s EC2 key pair.

Important: k3s_api_allowed_cidrs must include your local IP (or 0.0.0.0/0 for dev) so Terraform can SSH into the instance during provisioning.


PostgreSQL (Managed RDS)

Enable with postgres_enabled = true and indexer_storage_backend = "postgres".

VariableTypeDefaultDescription
postgres_enabledboolfalseEnable managed PostgreSQL (RDS).
postgres_instance_classstring"db.t4g.micro"RDS instance class. See sizing guide.
postgres_engine_versionstring"16.4"PostgreSQL version.
postgres_db_namestring"rindexer"Database name.
postgres_db_usernamestring"rindexer"Master username.
postgres_backup_retentionnumber7Backup retention in days.

ClickHouse (BYODB)

Required when indexer_storage_backend = "clickhouse". You provide the external ClickHouse endpoint.

VariableTypeDefaultSensitiveDescription
indexer_clickhouse_urlstring""YesHTTP(S) endpoint, e.g. https://your-instance.clickhouse.cloud:8443.
indexer_clickhouse_userstring"default"NoClickHouse username.
indexer_clickhouse_passwordstring""YesClickHouse password.
indexer_clickhouse_dbstring"default"NoDatabase name.

RPC Proxy (eRPC)

VariableTypeDefaultDescription
rpc_proxy_enabledboolfalseEnable eRPC proxy deployment.
rpc_proxy_imagestring"ghcr.io/erpc/erpc:latest"Container image. Override for pinned versions or private registries.
erpc_config_yamlstring""Full eRPC config YAML content. Required when rpc_proxy_enabled = true.

eRPC aggregates multiple upstream RPC endpoints with automatic failover, caching, and hedged requests. See eRPC documentation for config syntax.


Indexer (rindexer)

VariableTypeDefaultDescription
indexer_enabledboolfalseEnable rindexer deployment.
indexer_imagestring"ghcr.io/joshstevens19/rindexer:latest"Container image.
indexer_rpc_urlstring""RPC endpoint URL. Auto-resolves to eRPC internal URL when both are enabled.
indexer_storage_backendstring"postgres"Storage: postgres (managed RDS) or clickhouse (BYODB).
rindexer_config_yamlstring""Full rindexer.yaml content. Use ${RPC_URL} and ${DATABASE_URL} for runtime interpolation.
rindexer_abismap(string){}ABI files: { "ERC20.json" = file("abis/ERC20.json") }.

Tip: When both rpc_proxy_enabled and indexer_enabled are true, the indexer's RPC URL automatically points to the eRPC internal service — no manual wiring needed.


Bare Metal

Required when infrastructure_provider = "bare_metal".

VariableTypeDefaultDescription
bare_metal_hoststring""IP or hostname of your VPS.
bare_metal_ssh_userstring"ubuntu"SSH user.
bare_metal_ssh_private_key_pathstring""Path to SSH private key.
bare_metal_ssh_portnumber22SSH port.
bare_metal_rpc_proxy_mem_limitstring"1g"Docker memory limit for eRPC.
bare_metal_indexer_mem_limitstring"2g"Docker memory limit for rindexer.

Instance Sizing

EC2 / k3s Host

InstancevCPURAMMonthly CostUse Case
t3.micro21 GB~$8Testing only (eRPC barely fits)
t3.small22 GB~$16Light dev (1 small indexer)
t3.medium24 GB~$33Default. Fits eRPC (1G) + rindexer (2G) + OS
t3.large28 GB~$67Heavy indexing, multiple contracts
t3.xlarge416 GB~$133Large-scale backfills

Rule of thumb: ec2_indexer_mem_limit + ec2_rpc_proxy_mem_limit + 1 GB (OS) should not exceed instance RAM.

RDS PostgreSQL

InstancevCPURAMMonthly CostUse Case
db.t4g.micro21 GB~$13Default. Dev/staging
db.t4g.small22 GB~$26Small production
db.t4g.medium24 GB~$52Medium production
db.r6g.large216 GB~$175Heavy read workloads

Memory Limits (Docker)

ComponentDefaultRecommended MinimumHeavy Use
eRPC1g512m2g
rindexer2g1g4g

Increase ec2_indexer_mem_limit if rindexer is OOM-killed during large backfills. Check with docker stats on the instance.