Common Issues
Operational issues grouped by component. Commands assume the demo repo
event-driven-serverless-platform-demo — source repository for Terraform, Lambda services, portal, and scripts. Commands run from its root with `terraform -chdir=terraform` unless stated otherwise. root with terraform -chdir=terraform.
Terraform and deploy
Section titled “Terraform and deploy”Init or apply fails with provider errors
Section titled “Init or apply fails with provider errors”Verify Terraform
HashiCorp Terraform — provisions all platform infrastructure through five modules in `terraform/`. >= 1.6 and AWS
Amazon Web Services — cloud platform for ingest, processing, storage, API, and portal hosting in this walkthrough. credentials:
terraform --versionaws sts get-caller-identityterraform -chdir=terraform init -upgradeSee Terraform Init.
Processor Lambda fails on apply — image not found
Section titled “Processor Lambda fails on apply — image not found”Mirror the image before full apply:
terraform -chdir=terraform apply -target=module.processing[0].aws_ecr_repository.processor_image./scripts/sync-processor-image.shAmplify deploy skipped during apply
Section titled “Amplify deploy skipped during apply”Re-deploy manually:
export AMPLIFY_APP_ID="$(terraform -chdir=terraform output -raw amplify_app_id)"export VITE_API_URL="$(terraform -chdir=terraform output -raw api_url)"export WEB_SOURCE_DIR="$(pwd)/web"./scripts/deploy-amplify.shSee Amplify Portal.
Ingest and scheduler
Section titled “Ingest and scheduler”Scheduler not listed
Section titled “Scheduler not listed”Confirm stage 2 of staged apply ran:
terraform -chdir=terraform apply -var="region=ap-southeast-2" -target=module.ingest_scheduleraws scheduler list-schedules --query "Schedules[?contains(Name, 'ingest-sync')]"No raw files in data lake
Section titled “No raw files in data lake”Trigger manual ingest:
aws lambda invoke --function-name ingest-sync --payload '{}' /dev/stdoutaws s3 ls "s3://$(terraform -chdir=terraform output -raw bucket_name)/raw/rinexhourly/" --recursive | headSee Manual Ingest.
ingest-sync-errors alarm in ALARM
Section titled “ingest-sync-errors alarm in ALARM”Check CloudWatch
Amazon CloudWatch — alarms, dashboard (`event-driven-platform`), and structured Lambda logs for observability. Logs for the ingest-sync function. Common causes: invalid LOOKBACK_HOURS, GeoNet bucket access, or IAM
AWS Identity and Access Management — execution roles and policies for Lambdas, Scheduler, API Gateway, and S3. permission gaps.
SQS queues
Section titled “SQS queues”Process_Queue depth growing
Section titled “Process_Queue depth growing”Check processor
Processor Lambda container — runs PyTECGg calibration per SQS message; adopted when a Batch on Fargate parallel-execution quota increase was rejected. Image from `ghcr.io/platformfuzz/tec-processor-image` mirrored to ECR. health and concurrency:
aws lambda get-function-configuration --function-name processor \ --query '{State:State,LastUpdateStatus:LastUpdateStatus}'
aws cloudwatch describe-alarms --alarm-names processor-lambda-throttles \ --query 'MetricAlarms[].StateValue'Request a Lambda
AWS Lambda — serverless compute for ingest-sync, query-api, reprocess-api, and the processor container image. concurrency quota increase if throttles persist. See Processor Lambda and SQS Queues.
DLQ messages visible
Section titled “DLQ messages visible”Inspect DLQ
Dead-letter queue — SQS queue receiving messages that exceeded maxReceiveCount (5). CloudWatch alarms fire when visible count ≥ 1. messages and processor logs. Messages arrive after 5 failed processing attempts:
aws cloudwatch describe-alarms --alarm-names dlq-messages-visible reprocess-dlq-messages-visibleSee Alarms and Dashboard.
Processor Lambda
Section titled “Processor Lambda”LastUpdateStatus Failed
Section titled “LastUpdateStatus Failed”Verify ECR
Amazon Elastic Container Registry — stores the mirrored processor Lambda container image at deploy time. image exists and tag matches:
terraform -chdir=terraform output -raw processor_image_uri./scripts/sync-processor-image.shterraform -chdir=terraform apply -var="region=ap-southeast-2"No processed output in S3
Section titled “No processed output in S3”Confirm raw files exist and processor is consuming queues:
aws s3 ls "s3://$(terraform -chdir=terraform output -raw bucket_name)/raw/rinexhourly/" --recursive | headaws sqs get-queue-attributes \ --queue-url "$(terraform -chdir=terraform output -raw queue_url)" \ --attribute-names ApproximateNumberOfMessages ApproximateNumberOfMessagesNotVisibleSee S3 Processed Output.
REST API
Section titled “REST API”curl works but portal shows CORS errors
Section titled “curl works but portal shows CORS errors”Apply CORS lockdown after first deploy:
terraform -chdir=terraform apply \ -var="region=ap-southeast-2" \ -var="amplify_domain=$(terraform -chdir=terraform output -raw cors_domain)"See CORS Lockdown.
Empty catalog
Section titled “Empty catalog”Catalog lists processed output only — not raw ingest keys. Wait for processor to write under processed/tec/ or submit a reprocess job. See S3 Key Patterns.
Query returns truncated results
Section titled “Query returns truncated results”Narrow time range or add sv filter. Default cap is 2000 rows. See REST API Usage.
Reprocess returns HTTP 400
Section titled “Reprocess returns HTTP 400”Only allowlisted parameter keys are accepted. See SQS Message Schemas.
Portal
Section titled “Portal”Blank portal page
Section titled “Blank portal page”Rebuild and redeploy:
cd web && npm install && npm run buildexport WEB_SOURCE_DIR="$(pwd)/web"export AMPLIFY_APP_ID="$(terraform -chdir=terraform output -raw amplify_app_id)"export VITE_API_URL="$(terraform -chdir=terraform output -raw api_url)"./scripts/deploy-amplify.shSee Portal verification.
Observability
Section titled “Observability”Alarms not notifying
Section titled “Alarms not notifying”Subscribe to the SNS
Amazon Simple Notification Service — publishes CloudWatch alarm notifications; subscribe an email endpoint after deploy. topic:
TOPIC_ARN="$(terraform -chdir=terraform output -raw alarm_topic_arn)"aws sns subscribe --topic-arn "$TOPIC_ARN" --protocol email --notification-endpoint "you@example.com"Confirm subscription from email. See Alarms and Dashboard.
Teardown issues
Section titled “Teardown issues”If terraform destroy fails on the S3
Amazon Simple Storage Service — data lake bucket for raw ingest and processed TEC output; S3 events trigger processing. bucket, empty it first — see Teardown.