Manage Databases with Terraform

Manage Databases with Terraform

Originally posted in https://docs.bytebase.com/tutorials/manage-databases-with-terraform

Hi and welcome to Database DevOps Academy #98! We share Database DevOps insights and best practices for modern engineering organizations weekly. 🤹♀️

In Issue #98, we tackle a core step in Database DevOps: managing your database instances with Terraform. Bytebase makes it easy to register and control instances as code — setting the stage for a fully automated workflow.♟️


This tutorial is part of the Bytebase Terraform Provider series:

What You’ll Learn

Register database instances in Bytebase using Terraform.

Prerequisites

Before starting this tutorial, ensure you have Completed Part 1:

  • Bytebase running with built-in sample data
  • Service account created
  • Terraform initialized
  • Environments configured

Step 1 - Explore Built-in Instances

Bytebase sample data includes two sample PostgreSQL instances. Let’s explore them:

  1. In Bytebase, click Instances on the left sidebar. You’ll see two PostgreSQL instances:
  2. Click +Add Instance, you may add more database instances.

Article content

  1. Click Projects on the left sidebar to see the Sample Project, then click it. You’ll see:
  2. Click + New DB, you may create more databases on the existing instances.

Article content

Step 2 - Register Instances with Terraform

Now let’s import these instances into Terraform management.

Create 2-instances.tf with the following configuration:

2-instances.tf

# Test Sample Instance - PostgreSQL on port 8083
resource "bytebase_instance" "test" {
  depends_on  = [bytebase_setting.environments]
  resource_id = "test-sample-instance"
  environment = "environments/test"
  title       = "Test Sample Instance"
  engine      = "POSTGRES"
  # Assign instance license
  activation  = true

  # Connection settings for the built-in test database
  data_sources {
    id       = "admin-test"
    type     = "ADMIN"
    host     = "/tmp"      # Unix socket for local connection
    port     = "8083"
    username = "bbsample"
    password = ""          # Empty for local auth
  }
}

# Production Sample Instance - PostgreSQL on port 8084
resource "bytebase_instance" "prod" {
  depends_on  = [bytebase_setting.environments]
  resource_id = "prod-sample-instance"
  environment = "environments/prod"
  title       = "Prod Sample Instance"
  engine      = "POSTGRES"
  activation  = true

  data_sources {
    id       = "admin-prod"
    type     = "ADMIN"
    host     = "/tmp"
    port     = "8084"
    username = "bbsample"
    password = ""
  }
}
        

Understanding the Configuration

  • depends_on: Ensures environments from Part 1 exist first
  • resource_id: Must match the existing instance ID
  • environment: Links instance to Test or Prod environment
  • data_sources: Connection details for the database

Step 3 - Apply Configuration

Now apply the configuration:

terraform plan
terraform apply        

Step 4 - Verify Setup

  1. Go to Instances in Bytebase.
  2. Verify both instances show:

  • Correct environment assignment
  • Y under License column (if using Enterprise)

You can now modify instance properties through Terraform. For example, to rename an instance:

resource "bytebase_instance" "test" {
  # ... other config ...
  title = "Development Database"  # Changed title
}
        


To view or add a comment, sign in

Others also viewed

Explore topics