This Terraform module provides infrastructure components for deploying Langfuse v3 self-hosted on Amazon Web Service(AWS).
Langfuse is an open-source observability and analytics platform designed for LLM applications.
[!NOTE] This module specifically focuses on Langfuse core components deployment. It does not include:
- VPC and networking configurations
- Infrastructure for LLM applications that will interact with Langfuse
You can either:
- Use this as a module within your existing Terraform codebase
- Create your own VPC and network infrastructure separately

For more information on Langfuse's architecture, please check the official documentation.
variables.tfidentity_name - Unique identifier for resources (e.g., "mycompany")vpc_id - Your VPC ID where Langfuse will be deployedprivate_subnet_ids - List of private subnet IDs for components deploymentcustom_domain_name - Domain name for Langfuse and Grafana (e.g., tubone-project24.com)custom_domain_id - Route53 Hosted Zone IDweb_next_secret - Session cookie validation key (Generate: openssl rand -base64 32)web_salt - API key hashing salt (Generate: openssl rand -base64 32)encryption_key - 256-bit encryption key (Generate: openssl rand -hex 32)database_user - Aurora Serverless v2 database username (Default: "langfuse")database_max_capacity - Maximum Aurora capacity units (Default: 10)database_min_capacity - Minimum Aurora capacity units (Default: 0.5)env - Environment name (Default: "dev")region - AWS region (Default: "us-east-1")availability_zones - List of AZs (Default: ["us-east-1a", "us-east-1b", "us-east-1c"])cache_node_type - ElastiCache instance type (Default: "cache.t2.micro")is_spot_instance - Use spot instances for workers (Default: false)worker_desire_count - Number of worker instances (Default: 1)After running terraform apply, you need to push the required Docker images to the created ECR repositories.
App Runner requires a x_86-64 image, so you need to pull x_86_64 image and push the image to ECR.
docker pull langfuse/langfuse:3
docker tag langfuse/langfuse:3 ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/langfuse
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/langfuseLangfuse worker, use ECS Fargate, you can choose ARM64 image.
So you need to pull ARM64 image and push the image to ECR. (Cost-effective)
docker pull --platform linux/arm64 langfuse/langfuse-worker:3
docker tag langfuse/langfuse-worker:3 ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/langfuse-worker
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/langfuse-workerClickhouse, use ECS Fargate, you can choose ARM64 image.
docker pull clickhouse/clickhouse-server:24
docker tag clickhouse/clickhouse-server:24 ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/clickhouse
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/clickhouseIf you want to use Clickhouse with S3 Disk, you need to use a custom Clickhouse image with S3 support. (Cost-effective)
docker pull ghcr.io/tubone24/clickhouse-server-s3disk
docker tag ghcr.io/tubone24/clickhouse-server-s3disk ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/clickhouse
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/clickhouseTBD(Configurable)
Complete deployment examples are available in the examples directory.