Documentation Index
Fetch the complete documentation index at: https://docs.open-metadata.org/llms.txt
Use this file to discover all available pages before exploring further.
Deploy OpenMetadata on AWS with Terraform
The OpenMetadata Terraform module for AWS deploys OpenMetadata and all its dependencies on an existing EKS cluster. Each component (database and search engine) can be independently configured using one of three provisioners: deploy it inside the cluster via Helm, provision a managed AWS service, or connect to an existing resource you already operate.Prerequisites
Before using this module, ensure you have:- Terraform
~> 1.0 - An existing EKS cluster with
kubectlconfigured to access it - Helm and Kubernetes Terraform providers configured to point to your cluster
- AWS provider
~> 6.0with permissions to create the resources required by your chosen provisioners (see IAM permissions below)
IAM Permissions
The following permissions are required depending on which provisioners you use:| Provisioner | Required AWS permissions |
|---|---|
db = "aws" | RDS: create/manage DB instances, subnet groups, security groups |
opensearch = "aws" | OpenSearch Service: create/manage domains, security groups |
kms_key_id | KMS: use the specified key for encryption |
Provider Configuration
Your Terraform configuration must include the AWS, Kubernetes, and Helm providers:Choosing a Provisioner
Each component supports a different set of provisioners. Mix and match to fit your infrastructure:| Component | helm | aws | existing |
|---|---|---|---|
| OpenMetadata | ✅ | N/A | N/A |
| OpenMetadata database | ✅ | ✅ | ✅ |
| OpenSearch | ✅ | ✅ | ✅ |
| Provisioner | When to use |
|---|---|
helm | Development, testing, or when you want everything self-contained inside the cluster. |
aws | Production. Creates a managed AWS resource (RDS or OpenSearch Service) with high availability, automated backups, and encryption. |
existing | You already have a database or search engine running. The module connects OpenMetadata to it without creating anything new. |
Quick Start - Helm
The simplest deployment. All components run inside your cluster via Helm. Suitable for development and evaluation:Production Deployment - AWS Managed Services
Use theaws provisioner for the database and OpenSearch to get production-grade infrastructure. This creates:
- RDS PostgreSQL instance (Multi-AZ,
db.t4g.medium) for OpenMetadata - OpenSearch Service domain (2 nodes,
t3.small.search) for search - Security groups allowing traffic from your EKS nodes to each resource
- Kubernetes secrets with auto-generated credentials in your application namespace
Customizing AWS Resources
Override the defaults for any AWS-managed resource using theaws sub-object:
Bring Your Own Infrastructure - Existing
Connect OpenMetadata to a database and search engine you already operate. No new AWS resources are created:secret_ref and secret_key values reference a Kubernetes secret that must already exist in your application namespace before terraform apply.
Kubernetes Orchestrator (No Airflow)
This is the default mode. The module deploys OpenMetadata without Airflow and configures it to run ingestion pipelines as native Kubernetes Jobs via the OMJob operator. No extra configuration is needed:pipelineServiceClientConfig.typeis set tok8spipelineServiceClientConfig.k8s.useOMJobOperatoris set totrueomjobOperator.enabledis set totrue
Advanced Configuration
Extra Environment Variables
Inject arbitrary environment variables into the OpenMetadata pod:env_from secrets are mounted before extra_envs, so individual values in extra_envs can override keys from a secret.
Overriding Helm Values
Pass arbitrary values to any Helm chart using the*_helm_values variables. These are merged on top of the values generated by the module, so they can override defaults or configure options not exposed as Terraform variables:
| Variable | Helm chart |
|---|---|
openmetadata_helm_values | OpenMetadata |
opensearch_helm_values | OpenSearch (inside the deps chart) |
Accessing Your Deployment
Keep the terminal session with
kubectl port-forward open while accessing OpenMetadata. If port 8585 is already in use on your machine, change the local port number (the first number in local:remote, e.g. 9585:8585).Complete AWS Example
The complete example provisions a full AWS environment from scratch, including:- VPC with public/private subnets, Internet Gateway, and NAT Gateway
- EKS cluster with EBS and EFS CSI driver addons
- KMS key for encrypting all resources
- RDS instance for OpenMetadata (Multi-AZ, deletion protection enabled)
- OpenSearch domain with a security group allowing inbound traffic from EKS nodes
- Kubernetes namespace, storage classes, and secrets
Next Steps
Kubernetes Orchestrator
Run ingestion pipelines as native Kubernetes Jobs
EKS Deployment Guide
Manual Helm-based deployment on Amazon EKS
Helm Values Reference
Full reference for OpenMetadata Helm chart values
Secrets Manager
Store and rotate credentials securely using AWS Secrets Manager