Environment Variables Complete reference for all environment variables used in TradAI services.
Overview TradAI uses a hierarchical configuration system:
Root .env : Shared variables used across all services Service .env : Service-specific variables (e.g., services/backend/.env) Environment variables : Runtime overrides Priority order: Environment variables > Service .env > Root .env
Security
Never commit .env files to git. Use .env.example files as templates.
Shared Configuration These variables are defined in the root .env file and shared across services.
Required Variable Default Description AWS_REGION eu-central-1 AWS region for all services (also accepts AWS_DEFAULT_REGION) MLFLOW_TRACKING_URI http://localhost:5001 MLflow tracking server URL (http://mlflow:5000 inside Docker network)
Optional Variable Default Description TRADAI_RUNTIME auto-detect Runtime environment: local, localstack, aws. Auto-detects from AWS signals if unset TRADAI_STAGE dev Deployment stage: dev, staging, prod. Also accepts alias ENVIRONMENT COMPOSE_PROJECT_NAME tradai Docker Compose project name TAG latest Docker image tag MLFLOW_TRACKING_USERNAME - MLflow basic auth username MLFLOW_TRACKING_PASSWORD - MLflow basic auth password S3_CONFIG - S3 URI for remote config (e.g., s3://bucket/config.yaml)
Development-Only Variable Default Description AWS_ACCESS_KEY_ID - AWS access key (use IAM roles in production) AWS_SECRET_ACCESS_KEY - AWS secret key (use IAM roles in production) AWS_ENDPOINT_URL - LocalStack endpoint override (e.g., http://localhost:4566). Routes AWS SDK calls to LocalStack for local development
CLI Configuration The CLI resolves service URLs from ~/.tradai/config.yaml (recommended) with environment variable overrides.
Resolution priority: CLI flag > environment variable > config file > localhost default.
See CLI Reference > Configuration File for the config file format.
Variable Required Default Description TRADAI_ENV No local Environment to use from ~/.tradai/config.yaml BACKEND_URL No http://localhost:8000 Backend service URL for CLI (overrides config) DATA_COLLECTION_URL No http://localhost:8002 Data collection URL (overrides config) MLFLOW_TRACKING_URI No http://localhost:5001 MLflow tracking URI (overrides config) TRADAI_UI_URL No http://localhost:3000 TradAI UI URL for deep links (overrides config) ARCTIC_S3_BUCKET No - ArcticDB S3 bucket (overrides config) ARCTIC_LIBRARY No ohlcv ArcticDB library name (overrides config)
Backend Service Environment prefix: BACKEND_
Server Settings Variable Required Default Description BACKEND_HOST No 0.0.0.0 Server bind host BACKEND_PORT No 8000 Server bind port BACKEND_DEBUG No false Enable debug mode BACKEND_LOG_LEVEL No INFO Logging level (DEBUG, INFO, WARNING, ERROR) BACKEND_CORS_ORIGINS No [] CORS origins (JSON array or comma-separated)
External Services Variable Required Default Description BACKEND_DATA_COLLECTION_URL No http://localhost:8002 Data collection service URL BACKEND_STRATEGY_SERVICE_URL No http://localhost:8003 Strategy service URL BACKEND_MLFLOW_TRACKING_URI No http://localhost:5001 MLflow tracking URI
AWS Resources Variable Required Default Description BACKEND_AWS_REGION No eu-central-1 AWS region (also accepts AWS_REGION, AWS_DEFAULT_REGION) BACKEND_BACKTEST_QUEUE_URL No - SQS queue URL for backtest jobs BACKEND_S3_CONFIG_BUCKET No - S3 bucket for configurations BACKEND_S3_RESULTS_BUCKET No - S3 bucket for backtest results BACKEND_DYNAMODB_TABLE_NAME No - DynamoDB table for workflow state (also accepts WORKFLOW_STATE_TABLE, DYNAMODB_TABLE_NAME)
Executor Configuration Variable Required Default Description BACKEND_EXECUTOR_MODE No sqs Executor mode: sqs, ecs, local, stepfunctions BACKEND_LOCAL_EXECUTION_MODE No docker Local mode: subprocess or docker BACKEND_USER_DATA_DIR No user_data Freqtrade user_data directory path BACKEND_USER_DATA_HOST_PATH No - Host path for Docker-in-Docker scenarios
ECS Executor Variable Required Default Description BACKEND_ECS_CLUSTER ECS mode - ECS cluster name BACKEND_ECS_TASK_DEFINITION_PREFIX No strategy- Task definition prefix BACKEND_ECS_SUBNETS ECS mode - VPC subnet IDs (comma-separated) BACKEND_ECS_SECURITY_GROUPS ECS mode - Security group IDs (comma-separated)
Step Functions Executor Variable Required Default Description BACKEND_STEPFUNCTIONS_STATE_MACHINE_ARN SF mode - State machine ARN
Cognito Authentication Variable Required Default Description BACKEND_COGNITO_USER_POOL_ID No - Cognito User Pool ID (None = auth disabled) BACKEND_COGNITO_CLIENT_ID No - Cognito App Client ID BACKEND_COGNITO_REGION No eu-central-1 Cognito AWS region
Strategy Service Environment prefix: STRATEGY_SERVICE_
Server Settings Variable Required Default Description STRATEGY_SERVICE_HOST No 0.0.0.0 Server bind host STRATEGY_SERVICE_PORT No 8003 Server bind port STRATEGY_SERVICE_DEBUG No false Enable debug mode STRATEGY_SERVICE_LOG_LEVEL No INFO Logging level
S3 Configuration Variable Required Default Description STRATEGY_SERVICE_S3_CONFIG_BUCKET Yes - S3 bucket for strategy configs STRATEGY_SERVICE_RESULTS_BUCKET No - S3 bucket for results STRATEGY_SERVICE_MODELS_BUCKET No - S3 bucket for ML models
MLflow Configuration Variable Required Default Description STRATEGY_SERVICE_MLFLOW_TRACKING_URI No http://mlflow.tradai-{env}.local:5000/mlflow MLflow tracking URI STRATEGY_SERVICE_MLFLOW_USERNAME No - MLflow basic auth username STRATEGY_SERVICE_MLFLOW_PASSWORD No - MLflow basic auth password STRATEGY_SERVICE_MLFLOW_VERIFY_SSL No true Verify SSL certificates
Data Configuration Variable Required Default Description STRATEGY_SERVICE_ARCTIC_S3_BUCKET No - ArcticDB S3 bucket (empty = in-memory) STRATEGY_SERVICE_ARCTIC_LIBRARY No ohlcv ArcticDB library name STRATEGY_SERVICE_EXCHANGE_NAME No binance CCXT exchange name STRATEGY_SERVICE_EXCHANGE_TRADING_MODE No futures Trading mode: spot, margin, futures STRATEGY_SERVICE_EXCHANGE_API_KEY No - Exchange API key STRATEGY_SERVICE_EXCHANGE_API_SECRET No - Exchange API secret STRATEGY_SERVICE_EXCHANGE_SECRET_NAME No - AWS Secrets Manager secret name
Backtest Configuration Variable Required Default Description STRATEGY_SERVICE_STRATEGY_PATH No - Path to strategy files STRATEGY_SERVICE_USER_DATA_DIR No user_data Freqtrade user data directory STRATEGY_SERVICE_HYPEROPT_TRIAL_TIMEOUT_SECONDS No 7200 Hyperopt trial timeout (2h default)
A/B Testing Variable Required Default Description STRATEGY_SERVICE_AB_TEST_TABLE_NAME No - DynamoDB table for A/B test state STRATEGY_SERVICE_SNS_REGISTRATION_TOPIC_ARN No - SNS topic for registration events
Data Collection Service Environment prefix: DATA_COLLECTION_
Server Settings Variable Required Default Description DATA_COLLECTION_HOST No 0.0.0.0 Server bind host DATA_COLLECTION_PORT No 8002 Server bind port DATA_COLLECTION_DEBUG No false Enable debug mode DATA_COLLECTION_LOG_LEVEL No INFO Logging level
ArcticDB Configuration Variable Required Default Description DATA_COLLECTION_ARCTIC_S3_BUCKET Yes - S3 bucket for ArcticDB DATA_COLLECTION_ARCTIC_LIBRARY No ohlcv ArcticDB library name DATA_COLLECTION_ARCTIC_S3_ENDPOINT No s3.eu-central-1.amazonaws.com S3 endpoint DATA_COLLECTION_ARCTIC_USE_SSL No true Use SSL (false for LocalStack) DATA_COLLECTION_ARCTIC_ACCESS_KEY No - S3 access key (for LocalStack/MinIO) DATA_COLLECTION_ARCTIC_SECRET_KEY No - S3 secret key (for LocalStack/MinIO) DATA_COLLECTION_ARCTIC_REGION No eu-central-1 AWS region DATA_COLLECTION_ARCTIC_USE_VIRTUAL_ADDRESSING No true Virtual-hosted URLs (false for LocalStack)
Exchange Configuration Variable Required Default Description DATA_COLLECTION_EXCHANGES Yes - Exchange configs (JSON dict)
Exchange JSON format:
{
"binance_futures" : {
"name" : "binance" ,
"trading_mode" : "futures" ,
"api_key" : "..." ,
"api_secret" : "..."
}
}
Streaming Configuration Variable Required Default Description DATA_COLLECTION_STREAMING_BUFFER_SIZE No 100 Candles to buffer before flush DATA_COLLECTION_STREAMING_FLUSH_INTERVAL No 60 Max seconds between flushes DATA_COLLECTION_STREAMING_MAX_RECONNECTS No 5 Max WebSocket reconnection attempts
MLflow Service Server Settings Variable Required Default Description MLFLOW_HOST No 0.0.0.0 Server bind host MLFLOW_PORT No 5000 Server bind port MLFLOW_WORKERS No 2 Number of Gunicorn workers
Storage Configuration Variable Required Default Description MLFLOW_BACKEND_STORE_URI Yes - PostgreSQL connection string MLFLOW_DEFAULT_ARTIFACT_ROOT Yes - Artifact storage path (S3 URI or local path)
Backend Store URI examples:
# Development (Docker Compose PostgreSQL)
MLFLOW_BACKEND_STORE_URI = postgresql://tradai:tradai_dev@postgres:5432/mlflow
# Production (RDS)
MLFLOW_BACKEND_STORE_URI = postgresql://mlflowuser:${ PASSWORD } @rds-endpoint:5432/mlflow
Artifact Root examples:
# Development (local volume)
MLFLOW_DEFAULT_ARTIFACT_ROOT = /mlflow/artifacts
# Production (S3)
MLFLOW_DEFAULT_ARTIFACT_ROOT = s3://tradai-mlflow-prod/artifacts
Lambda Functions Lambda handlers use environment variables without prefixes. All variables in this section are Lambda-Only -- they are read by Lambda handler code and set via Pulumi infrastructure.
Common Lambda Settings Required Variable Default Description ENVIRONMENT dev Deployment environment PROJECT_NAME tradai Project name for namespacing
Optional Variable Default Description LOG_LEVEL INFO Python logging level JOB_ID - Job identifier passed to ECS tasks and Lambda handlers for tracing backtest/training executions SNS_ALERTS_TOPIC_ARN - SNS topic ARN for Lambda alerting (health-check, drift-monitor, heartbeat, and other Lambdas publish alerts here) CLOUDWATCH_NAMESPACE - CloudWatch metrics namespace
Health Check Lambda Variable Required Default Description DYNAMODB_TABLE_NAME No - DynamoDB table for state SERVICE_DISCOVERY_NAMESPACE No tradai.local Cloud Map namespace HEALTH_CHECK_TIMEOUT No 10 HTTP timeout in seconds CONSECUTIVE_FAILURES_THRESHOLD No 2 Failures before alert
Drift Monitor Lambda Variable Required Default Description DRIFT_STATE_TABLE No - DynamoDB table for drift state MLFLOW_TRACKING_URI No - MLflow server URL MLFLOW_TRACKING_USERNAME No - MLflow username MLFLOW_TRACKING_PASSWORD No - MLflow password PSI_MODERATE_THRESHOLD No 0.10 Moderate drift threshold PSI_SIGNIFICANT_THRESHOLD No 0.25 Significant drift threshold MIN_SAMPLES No 10 Minimum samples for analysis REFERENCE_PERIOD_DAYS No 30 Reference period in days CURRENT_PERIOD_DAYS No 7 Current period in days
Retraining Scheduler Lambda Variable Required Default Description ECS_CLUSTER Yes - ECS cluster for retraining ECS_TASK_DEFINITION_PREFIX No strategy- Task definition prefix ECS_SUBNETS Yes - VPC subnet IDs for Lambda-launched ECS tasks (comma-separated) ECS_SECURITY_GROUPS Yes - Security group IDs for Lambda-launched ECS tasks (comma-separated) ECS_CONTAINER_NAME No strategy Container name USE_SPOT No false Use Fargate Spot RETRAINING_INTERVAL_DAYS No 7 Days between retraining MIN_HOURS_BETWEEN_RETRAINING No 24 Minimum hours between runs DRIFT_STATE_TABLE No tradai-drift-state Drift state table RETRAINING_STATE_TABLE No tradai-retraining-state Retraining state table
Trading Heartbeat Lambda Variable Required Default Description TRADING_STATE_TABLE No - DynamoDB table for trading state (heartbeat records) HEARTBEAT_THRESHOLD_MINUTES No 2 Stale heartbeat threshold in minutes CONSECUTIVE_FAILURES_THRESHOLD No 2 Consecutive stale checks before alert
Model Management Lambda Variable Required Default Description MLFLOW_TRACKING_URI Yes - MLflow server URL MLFLOW_TRACKING_USERNAME No - MLflow username MLFLOW_TRACKING_PASSWORD No - MLflow password MODEL_REGISTRY_NAME No tradai-models MLflow model registry name
Local Development Quick Start # Copy example files
cp .env.example .env
cp services/backend/.env.example services/backend/.env
cp services/data-collection/.env.example services/data-collection/.env
# Edit with your values
nano .env
Docker Compose Development # Required for local development
COMPOSE_PROJECT_NAME = tradai
TAG = latest
MLFLOW_TRACKING_URI = http://mlflow:5000 # Internal Docker network
# For host access (MLflow UI): http://localhost:5001
# Backend connects to other services via Docker network
BACKEND_DATA_COLLECTION_URL = http://data-collection:8002
BACKEND_STRATEGY_SERVICE_URL = http://strategy-service:8003
LocalStack (Local AWS) For testing AWS services locally:
# ArcticDB with LocalStack
DATA_COLLECTION_ARCTIC_S3_ENDPOINT = localstack:4566
DATA_COLLECTION_ARCTIC_USE_SSL = false
DATA_COLLECTION_ARCTIC_USE_VIRTUAL_ADDRESSING = false
DATA_COLLECTION_ARCTIC_ACCESS_KEY = test
DATA_COLLECTION_ARCTIC_SECRET_KEY = test
Production Deployment IAM Roles (Recommended) In production, use IAM roles instead of access keys:
# Do NOT set these in production
# AWS_ACCESS_KEY_ID=
# AWS_SECRET_ACCESS_KEY=
# IAM role attached to ECS task or EC2 instance handles authentication
AWS_REGION = eu-central-1
Secrets Manager Use AWS Secrets Manager for sensitive values:
# Reference secrets by name, not value
STRATEGY_SERVICE_EXCHANGE_SECRET_NAME = tradai/exchange-credentials
Environment-Specific Configuration # Load config from S3 for environment-specific settings
S3_CONFIG = s3://tradai-config/production/config.yaml
See Also