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:

    • Test Sample Instance (port 8083)
    • Prod Sample Instance (port 8084)
  2. Click +Add Instance, you may add more database instances.

    add-instance

  3. Click Projects on the left sidebar to see the Sample Project, then click it. You’ll see:

    • hr_test database on Test instance
    • hr_prod database on Prod instance
  4. Click + New DB, you may create more databases on the existing instances.

    add-db

Step 2 - Register Instances with Terraform

Now let’s import these instances into Terraform management.

Terraform resourcebytebase_instance
Sample file2-instances.tf

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
}

Summary and Next Steps

You’ve successfully registered database instances with Terraform!

Part 3: Manage Projects with Terraform