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

Outputs Reference

Terraform outputs from evm-cloud. Access any output with terraform output -json <name>.

Output Summary

OutputDescriptionAlways Present
provider_selectionActive provider, deployment target, architectureYes
capability_contractProvider-neutral capability flagsYes
adapter_contextProvider-specific adapter metadataYes
networkingVPC, subnet, and security group IDsAWS only
postgresRDS endpoint, port, database name, secret ARNWhen postgres_enabled = true
rpc_proxyeRPC service name and portWhen rpc_proxy_enabled = true
indexerrindexer service name and log groupWhen indexer_enabled = true
workload_handoffFull deployment contract for external toolsYes (sensitive)

Accessing Outputs

# All outputs (redacts sensitive values)
terraform output
 
# Specific output as JSON
terraform output -json workload_handoff
 
# Extract a nested field
terraform output -json workload_handoff | jq '.runtime.ec2.public_ip'

Note: workload_handoff is marked sensitive = true because it may contain kubeconfig credentials (k3s) or database passwords. Use terraform output -json to access it.

workload_handoff v1 Schema

The workload_handoff is the primary integration point for external deployers. It contains everything needed to deploy workloads outside of Terraform.

Top-Level Fields

FieldTypeDescription
versionstringContract version: "v1"
modestring"terraform" or "external"
compute_enginestring"ec2", "eks", or "k3s"
project_namestringProject identifier
aws_regionstringAWS region (when provider=aws)

identity

IAM identity for workloads.

FieldPresent WhenContents
identity.ec2_instance_profilecompute_engine = "ec2"{ name, role_arn }
identity.eks_irsa_role_arnscompute_engine = "eks"{ rpc_proxy, indexer }

network

VPC and security group information.

FieldTypeDescription
network.vpc_idstringVPC ID
network.public_subnet_idslistPublic subnet IDs
network.private_subnet_idslistPrivate subnet IDs
network.security_groups.rpc_proxystringSG ID for eRPC
network.security_groups.indexerstringSG ID for rindexer

runtime

Compute-engine-specific connection details. Only one of ec2, eks, or k3s is populated.

runtime.ec2

FieldTypeDescription
instance_idstringEC2 instance ID
public_ipstringInstance public IP
ssh_commandstringReady-to-use SSH command
config_dirstringConfig path on instance (/opt/evm-cloud/config)
compose_filestringDocker Compose file path
secret_arnstringSecrets Manager secret ARN
cloudwatch_log_groupstringCloudWatch log group name

runtime.eks

FieldTypeDescription
cluster_namestringEKS cluster name
cluster_endpointstringEKS API endpoint
oidc_provider_arnstringOIDC provider for IRSA

runtime.k3s

FieldTypeDescription
host_ipstringEC2 instance public IP
instance_idstringEC2 instance ID
cluster_endpointstringk3s API endpoint (https://IP:6443)
kubeconfig_base64stringBase64-encoded kubeconfig (sensitive)
node_namestringk3s node name

services

Workload service metadata.

FieldPresent WhenContents
services.rpc_proxyrpc_proxy_enabled{ service_name, port, internal_url }
services.indexerindexer_enabled{ service_name, single_writer_required, storage_backend }

data

Database connection information.

FieldPresent WhenContents
data.backendindexer_enabled"postgres" or "clickhouse"
data.postgresbackend=postgres + postgres_enabled{ host, port, db_name, secret_arn }
data.clickhousebackend=clickhouse{ url, user, db, password }

artifacts

FieldTypeValues
artifacts.config_channelstring"ssh" (EC2), "helm" (k3s), "k8s_config" (EKS)

Example: EC2 Handoff

{
  "version": "v1",
  "mode": "external",
  "compute_engine": "ec2",
  "project_name": "my-indexer",
  "aws_region": "us-east-1",
  "runtime": {
    "ec2": {
      "instance_id": "i-0abc123def456",
      "public_ip": "54.123.45.67",
      "ssh_command": "ssh -i ~/.ssh/key ubuntu@54.123.45.67",
      "config_dir": "/opt/evm-cloud/config",
      "compose_file": "/opt/evm-cloud/docker-compose.yml",
      "secret_arn": "arn:aws:secretsmanager:us-east-1:123456:secret:my-indexer-abc",
      "cloudwatch_log_group": "/evm-cloud/my-indexer"
    },
    "eks": null,
    "k3s": null
  },
  "services": {
    "rpc_proxy": { "service_name": "erpc", "port": 4000, "internal_url": "http://erpc:4000" },
    "indexer": { "service_name": "rindexer", "single_writer_required": true, "storage_backend": "clickhouse" }
  },
  "data": {
    "backend": "clickhouse",
    "postgres": null,
    "clickhouse": { "url": "https://ch.example.com:8443", "user": "default", "db": "default", "password": null }
  },
  "artifacts": { "config_channel": "ssh" }
}

Example: k3s Handoff

{
  "version": "v1",
  "mode": "external",
  "compute_engine": "k3s",
  "project_name": "evm-cloud-k3s",
  "runtime": {
    "ec2": null,
    "eks": null,
    "k3s": {
      "host_ip": "44.213.127.224",
      "instance_id": "i-0def789abc012",
      "cluster_endpoint": "https://44.213.127.224:6443",
      "kubeconfig_base64": "YXBpVmVyc2lvbjogdjEK...",
      "node_name": "evm-cloud-k3s-server-0"
    }
  },
  "data": {
    "backend": "clickhouse",
    "clickhouse": { "url": "https://ch.clickhouse.cloud:8443", "user": "default", "db": "default", "password": "secret" }
  },
  "artifacts": { "config_channel": "helm" }
}