Troubleshooting
When something isn’t working, start here. This page covers the fastest diagnostic checks, then guides you to the right sub-page based on the symptom you’re seeing.
Quick checks
Section titled “Quick checks”Run through these first — they catch the majority of issues:
- Bedrock
Amazon Bedrock — a fully managed service for accessing foundation models (embedding and LLM) via a unified API. model access enabled? — Both Titan Embeddings V2 and your LLM must be enabled in the Bedrock console for the deployment region. - Correct region? — S3 Vectors, Bedrock models, and inference profiles are not available in all regions. Confirm your
terraform.tfvarsregion matches where you enabled model access. - Bootstrap ingest completed? — Check the Lambda
AWS Lambda — serverless compute. This project uses two functions: ingest (RSS → embed → store) and query (search → answer). ingest function logs for success. An empty corpus means queries return no results. - Cognito
Amazon Cognito — a user authentication service providing user pools, JWT tokens, and group-based authorization. user confirmed? — Users must be inCONFIRMEDstatus. An unconfirmed user cannot authenticate to the API. - Terraform apply finished cleanly? — Partial applies leave resources in inconsistent states. Check for errors in the apply output.
Symptom-based navigation
Section titled “Symptom-based navigation”Use the table below to find the right troubleshooting path based on what you’re experiencing.
| Symptom | Likely cause | Where to look |
|---|---|---|
Deployment failed ( | Missing permissions, region not supported, or resource limits | Check Terraform output; see Common Issues |
| Query returns empty results | Corpus not ingested, time filter too narrow, or vector index empty | Check corpus status below; see Common Issues |
| Bedrock model access not enabled or IAM policy missing permissions | See Bedrock Errors |
| Web UI not loading or blank page | Amplify | Check Amplify console and CORS config; see Common Issues |
| Ingest Lambda timeout | Bedrock throttling or slow RSS feeds exceeding 480s limit | See Bedrock Errors (throttling section) |
| Too many concurrent embedding or LLM requests | See Bedrock Errors |
401 / 403 from API Gateway | Expired or invalid JWT token, user not confirmed | Re-authenticate; check Cognito user status |
Checking CloudWatch logs
Section titled “Checking CloudWatch logs”Each Lambda function writes to a dedicated CloudWatch log group. The naming pattern is:
/aws/lambda/<project-prefix>-ingest/aws/lambda/<project-prefix>-queryTo tail logs for the ingest function:
aws logs tail "/aws/lambda/$(terraform output -raw ingest_function_name)" --followTo tail logs for the query function:
aws logs tail "/aws/lambda/$(terraform output -raw query_function_name)" --followChecking corpus status
Section titled “Checking corpus status”The query Lambda exposes a /status endpoint through API Gateway
Amazon API Gateway — a managed HTTP API service with JWT authorization, CORS, and throttling. Routes requests to the Query Lambda. that returns the current vector count and index health.
# Get the API endpointAPI_URL="$(terraform output -raw api_endpoint)"
# Check status (no auth required for /status)curl -s "$API_URL/status" | jq .You can also verify directly that vectors exist in the S3 Vectors
Amazon S3 Vectors — a purpose-built vector storage capability within S3 that enables similarity search over embeddings without a separate vector database. index:
aws s3vectors list-vectors \ --vector-bucket-name "$(terraform output -raw vector_bucket_name)" \ --index-name "$(terraform output -raw vector_index_name)"If the vector count is zero, the ingest function hasn’t run successfully. Re-trigger it:
aws lambda invoke \ --function-name "$(terraform output -raw ingest_function_name)" \ /tmp/ingest-out.json
cat /tmp/ingest-out.json | jq .