Use the CockroachDB Cloud Terraform provider

On this page Carat arrow pointing down

Terraform is an infrastructure-as-code provisioning tool that uses configuration files to define application and network resources. You can provision CockroachDB Cloud clusters and cluster resources by using the CockroachDB Cloud Terraform provider in your Terraform configuration files.

This page shows how to use the CockroachDB Cloud Terraform provider to create and manage clusters in CockroachDB Cloud. This page is not exhaustive; you can browse an extensive set of example recipes in the Terraform provider's GitHub repository.

Note:

If you used the Terraform provider to manage CockroachDB Serverless clusters that have been migrated to CockroachDB Basic, your recipes must be updated to work with CockroachDB Basic.

Watch a demo where we use Terraform to create a CockroachDB Serverless cluster here:

Before you begin

Before you start this tutorial, you must

Create the Terraform configuration file

In this tutorial, you will create a CockroachDB Basic cluster.

  1. In a terminal create a new file named main.tf with the following contents:

    icon/buttons/copy
    resource "cockroach_cluster" "basic" {
      name           = "cockroach-basic"
      cloud_provider = "GCP"
      plan           = "BASIC"
      serverless     = {}
      regions = [
        {
          name = "us-east1"
        }
      ]
      delete_protection = false
    }
    
    • Replace cockroach-basic with a name for the cluster.
    • Set cloud_provider to AWS AZURE, or GCP.
    • Under serverless {}, optionally set values for resource_unit_limit and storage_mib_limits.
    • Under regions, add the names of one or more regions for the cluster.
    • To optionally enable deletion protection, set delete_protection to true.
  2. Create an environment variable named COCKROACH_API_KEY. Copy the API key from the CockroachDB Cloud console and create the COCKROACH_API_KEY environment variable:

    icon/buttons/copy
    export COCKROACH_API_KEY={API key}
    

    Where {API key} is the API key you copied from the CockroachDB Cloud Console.

Provision a cluster

  1. Initialize the provider:

    icon/buttons/copy
    terraform init -upgrade
    

    This reads the main.tf configuration file. The -upgrade flag ensures you are using the latest version of the provider.

  2. Create the Terraform plan. This shows the actions the provider will take, but won't perform them:

    icon/buttons/copy
    terraform plan
    
  3. Create the cluster:

    icon/buttons/copy
    terraform apply
    

    Enter yes when prompted to apply the plan and create the cluster.

Terraform reports the actions it will take. Verify the details, then type yes to apply the changes.

Tip:

To change a cluster's plan in place between CockroachDB Basic and CockroachDB Standard, refer to Change a cluster's plan.

Note:

CockroachDB Standard, our new, enterprise-ready plan, is currently in Preview.

In this tutorial, you will create a CockroachDB Standard cluster.

  1. In a terminal create a new file named main.tf with the following contents:

    icon/buttons/copy
    resource "cockroach_cluster" "standard" {
      name           = "cockroach-standard"
      cloud_provider = "GCP"
      plan           = "STANDARD"
      serverless = {
        usage_limits = {
          provisioned_virtual_cpus = 2
        }
      }
      regions = [
        {
          name = "us-east1"
        }
      ]
      delete_protection = false
    }
    
    • Replace cockroach-standard with a name for the cluster.
    • Set cloud_provider to AWS AZURE, or GCP.
    • Under usage_limits, set provisioned_virtual_cpus to the required maximum vCPUs for the cluster.
    • Under regions, add the names of one or more regions for the cluster.
    • To optionally enable deletion protection, set delete_protection to true.

    You may also want to configure the managed backup settings your CockroachDB Standard cluster takes automatically. To do so, include the backup_config attribute in the cockroach_cluster resource:

    icon/buttons/copy
    backup_config = {
        enabled           = true
        frequency_minutes = 60
        retention_days    = 30
    }
    
    Note:

    You can modify the retention of managed backups only once with one of the following: the Cloud Console, the Cloud API, or Terraform. To modify the setting again, contact the Cockroach Labs Support team.

    For details on the backup_config settings, refer to Managed Backups.

  2. Create an environment variable named COCKROACH_API_KEY. Copy the API key from the CockroachDB Cloud console and create the COCKROACH_API_KEY environment variable:

    icon/buttons/copy
    export COCKROACH_API_KEY={API key}
    

    Where {API key} is the API key you copied from the CockroachDB Cloud Console.

Provision a cluster

  1. Initialize the provider:

    icon/buttons/copy
    terraform init -upgrade
    

    This reads the main.tf configuration file. The -upgrade flag ensures you are using the latest version of the provider.

  2. Create the Terraform plan. This shows the actions the provider will take, but won't perform them:

    icon/buttons/copy
    terraform plan
    
  3. Create the cluster:

    icon/buttons/copy
    terraform apply
    

    Enter yes when prompted to apply the plan and create the cluster.

Terraform reports the actions it will take. Verify the details, then type yes to apply the changes.

Tip:

To change a cluster's plan in place between CockroachDB Basic and CockroachDB Standard, refer to Change a cluster's plan.

In this tutorial, you will create a CockroachDB Advanced cluster.

  1. In a terminal create a new file named main.tf with the following contents:

    icon/buttons/copy
    resource "cockroach_cluster" "advanced" {
      name           = "cockroach-advanced"
      cloud_provider = "GCP"
      plan           = "ADVANCED"
      dedicated = {
        storage_gib = 15
        num_virtual_cpus = 4
      }
      regions = [
        {
          name       = "us-central1"
          node_count = 1
        }
      ]
      delete_protection = true
    }
    
    • Replace cockroach-advanced with a name for the cluster.
    • Set cloud_provider to AWS AZURE, or GCP.
    • Under dedicated, set storage_gib to a value large enough to contain the cluster's expected data. Set num_virtual_cpus to the number of vCPUs per node.
    • Under regions, add the names of one or more regions for the cluster and specify the node_count, or the number of nodes, per region.
    • To optionally enable deletion protection, set delete_protection to true.

    You may also want to configure the managed backup settings your CockroachDB Standard cluster takes automatically. To do so, include the backup_config attribute in the cockroach_cluster resource:

    icon/buttons/copy
    backup_config = {
        enabled           = true
        frequency_minutes = 60
        retention_days    = 30
    }
    
    Note:

    You can modify the retention of managed backups only once with one of the following: the Cloud Console, the Cloud API, or Terraform. To modify the setting again, contact the Cockroach Labs Support team.

    For details on the backup_config settings, refer to Managed Backups.

  2. Create an environment variable named COCKROACH_API_KEY. Copy the API key from the CockroachDB Cloud console and create the COCKROACH_API_KEY environment variable:

    icon/buttons/copy
    export COCKROACH_API_KEY={API key}
    

    Where {API key} is the API key you copied from the CockroachDB Cloud Console.

Provision a cluster

  1. Initialize the provider:

    icon/buttons/copy
    terraform init -upgrade
    

    This reads the main.tf configuration file. The -upgrade flag ensures you are using the latest version of the provider.

  2. Create the Terraform plan. This shows the actions the provider will take, but won't perform them:

    icon/buttons/copy
    terraform plan
    
  3. Create the cluster:

    icon/buttons/copy
    terraform apply
    

    Enter yes when prompted to apply the plan and create the cluster.

Terraform reports the actions it will take. Verify the details, then type yes to apply the changes.

Get information about a cluster

The terraform show command shows detailed information of your cluster resources.

icon/buttons/copy
terraform show

Change a cluster's plan

To change a CockroachDB Basic cluster's plan to CockroachDB Standard in place, or to change a CockroachDB Standard cluster to CockroachDB Basic using Terraform..or the CockroachDB Cloud API.

Note:

To migrate between CockroachDB Advanced and either CockroachDB Standard or CockroachDB Basic, you must create and configure a new cluster, back up the existing cluster's data, and restore the backup to the new cluster. Migration in place is not supported. Refer to Self-managed backups.

To migrate from CockroachDB Basic to CockroachDB Standard in place:

  1. Edit the cluster's Terraform template:

    • Change plan to STANDARD.
    • Replace the contents of serverless {} (which may be empty) with the provisioned vCPUs for the cluster. This field is required for CockroachDB Standard. It is not possible to set storage limitations on CockroachDB Standard.
      icon/buttons/copy
        serverless = {
          usage_limits = {
            provisioned_virtual_cpus = 2
          }
        }
    
  2. Apply the template:

    icon/buttons/copy

    terraform apply
    

To change a cluster's plan from CockroachDB Standard to CockroachDB Basic in place:

  1. Edit the cluster's Terraform template:

    • Change plan to BASIC.
    • Replace the contents of serverless {...} with optional limits for Request Units and Storage. The provisioned_virtual_cpus field is not supported on CockroachDB Basic.
      icon/buttons/copy
        serverless = {
          usage_limits = {
            request_unit_limit = 4000
            storage_mib_limit = 2000
          }
        }
    
    • Remove configurations for features that are unsupported on CockroachDB Basic, such as private connectivity. Otherwise, applying the template will fail.
  2. Apply the template:

    icon/buttons/copy

    terraform apply
    

Delete a cluster

If you want to delete a cluster managed by Terraform, run the following command:

icon/buttons/copy
terraform destroy

Enter yes when prompted to delete the cluster.

Next steps


Yes No
On this page

Yes No