Skip to content

Issue #385 — Deployment Report

Date: 2026-04-25 Version: v0.1.1 Issue: #385 — Dashboard blocked: 8 endpoints broken on dev ALB Status: Closed

PRs Merged

PR Description
#386 MLflow routing, ECS IAM, backtest deserialization
#390 Propagate backend store env vars for Gunicorn WSGI
#392 Export/sync proxy routes + migrate stage to MLflow 3.x aliases
#393 ALB hostname to MLflow allowed hosts + health check fix

Infrastructure Changes

  • Pulumi compute stack: 26 resources updated
  • MLflow health check path: /mlflow/ -> /health (StripPrefixMiddleware handles it before Flask)
  • MLFLOW_ALLOWED_HOSTS env var now includes ALB DNS dynamically from Pulumi
  • Launch template updated -> ASG instance refresh completed

Pulumi Fix

Bug: pulumi-aws v6.83.2 provider mismatch (kind:DELETE inputDiff:true != kind:DELETE_REPLACE inputDiff:true). Workaround: pulumi config set aws:region eu-central-1 in compute stack. Root cause: pulumi/pulumi-aws#5652 — fixed in v7.x.

Endpoint Verification (2026-04-25 00:05 UTC)

ALB: tradai-dev-1942285475.eu-central-1.elb.amazonaws.com

# Endpoint Method HTTP Result
1 /mlflow/api/2.0/mlflow/experiments/search POST 200 Returns experiments
2 /mlflow/api/2.0/mlflow/runs/search POST 200 Returns runs
3 /mlflow/api/2.0/mlflow/registered-models/search GET 200 Returns models
4 /mlflow/api/2.0/mlflow/model-versions/search GET 200 Returns versions
5 /mlflow/api/2.0/mlflow/registered-models/alias POST 404 Correct — test model doesn't exist
6 /api/v1/health GET 200 All checks healthy
7 /api/v1/export POST 200 Returns OHLCV data
8 /api/v1/sync POST 200 Data sync works

Verification Commands

ALB="tradai-dev-1942285475.eu-central-1.elb.amazonaws.com"

# MLflow endpoints
curl -s -X POST "http://$ALB/mlflow/api/2.0/mlflow/experiments/search" -H "Content-Type: application/json" -d '{"max_results": 3}'
curl -s -X POST "http://$ALB/mlflow/api/2.0/mlflow/runs/search" -H "Content-Type: application/json" -d '{"experiment_ids": ["0"], "max_results": 1}'
curl -s "http://$ALB/mlflow/api/2.0/mlflow/registered-models/search?max_results=3"
curl -s "http://$ALB/mlflow/api/2.0/mlflow/model-versions/search?max_results=3"

# Backend endpoints
curl -s "http://$ALB/api/v1/health"
curl -s -X POST "http://$ALB/api/v1/export" -H "Content-Type: application/json" -d '{"symbols": ["BTC/USDT:USDT"], "start_date": "2025-01-01", "end_date": "2025-01-02", "timeframe": "1h"}'
curl -s -X POST "http://$ALB/api/v1/sync" -H "Content-Type: application/json" -d '{"symbols": ["BTC/USDT:USDT"], "start_date": "2025-01-01", "end_date": "2025-01-02", "timeframe": "1h"}'

# Health check
curl -s "http://$ALB/mlflow/health"

Known Issues / Follow-ups

  • pulumi-aws v6.83.2 workaround in place — consider upgrading to v7.x
  • MLflow 3.x current_stage field is always None — lambdas/services using current_stage need migration to aliases API (separate issue needed)
  • Registered models search and model versions search require GET, not POST (MLflow 3.x change)