Skip to main content

Deployment

CoquiTitle uses AWS Lambda functions deployed via container images and zip packages.

Prerequisites

  • AWS CLI configured with appropriate credentials
  • Docker (for container Lambdas)
  • Terraform 1.13+
  • Supabase CLI
  • GCP credentials in AWS Secrets Manager

Lambda Functions

LambdaTypePurpose
coquititle-apiZipREST API endpoints
coquititle-ocr-processorZipDocument AI OCR processing
coquititle-pending-docs-processorZipPending presentation processing
coquititle-extractorContainerMulti-pass data extraction
coquititle-title-state-builderContainerDeterministic title derivation
coquititle-evidence-resolverContainerEvidence validation
coquititle-report-generatorContainerMulti-pass report generation

Deploy Sequence

1. Infrastructure (Terraform)

cd /Users/angus/Code/alianza-infra
source scripts/setup-local-auth0-env.sh
terraform plan -var-file=environments/dev/terraform.tfvars
terraform apply

2. Database Migrations

cd /Users/angus/Code/alianza-infra/supabase
supabase link --project-ref yodutvdnvvmbuaxccbex
supabase db push

3. Lambda Functions

Container Lambdas:

cd /Users/angus/Code/alianza-hq/backend/coquititle/lambdas

# Deploy individual Lambda
./deploy.sh extractor
./deploy.sh title-state-builder
./deploy.sh evidence-resolver
./deploy.sh report-generator

# Or deploy all at once
./deploy.sh all

The unified deploy script:

  1. Builds Docker image using AWS Lambda Python 3.12 base (ARM64)
  2. Pushes to ECR (915848750366.dkr.ecr.us-east-2.amazonaws.com)
  3. Updates Lambda function code
  4. Uses lambdas/ as build context to include shared/ modules

4. Frontend (Vercel)

Push to main branch triggers auto-deploy to app.alianzacap.com

Environment Variables

All Lambdas require these (configured in Terraform):

VariableDescription
SUPABASE_HOSTDatabase host
SUPABASE_DB_URL_SECRETSecrets Manager key for DB credentials
S3_BUCKETDocument storage bucket
GCP_PROJECT_IDGoogle Cloud project for AI services
LANGFUSE_ENABLEDEnable Langfuse tracing
LANGFUSE_SECRET_KEY_ARNLangfuse credentials ARN

Verify Deployment

# Check Lambdas
aws lambda list-functions \
--query 'Functions[?starts_with(FunctionName, `coquititle`)].FunctionName'

# Check Lambda config
aws lambda get-function-configuration \
--function-name coquititle-extractor-dev

# Tail logs
aws logs tail /aws/lambda/coquititle-extractor-dev --follow

Monitoring

Key CloudWatch log groups:

  • /aws/lambda/coquititle-api-dev
  • /aws/lambda/coquititle-ocr-processor-dev
  • /aws/lambda/coquititle-extractor-dev
  • /aws/lambda/coquititle-report-generator-dev

Look for:

  • [MULTIPASS] - Multi-pass extraction/report progress
  • [VALIDATION] - Span validation results
  • [WARNING] - Non-fatal issues
  • ERROR: - Fatal errors
  • [langfuse] - Langfuse tracing status

Troubleshooting

IssueCheck
Lambda 500CloudWatch logs, env vars, IAM permissions
OCR not runningAPI invokes OCR (not S3 events)
Extraction timeoutLambda timeout (should be 900s)
Evidence failingocr_lines table has data
Report stuckLambda logs for Gemini API errors