---
title: Integrate Terraform with Tiger Cloud | Tiger Data Docs
description: Provision and manage your infrastructure as code with predictable deployments
---

[Terraform](https://developer.hashicorp.com/terraform) is an infrastructure-as-code tool that enables you to safely and predictably provision and manage infrastructure.

This page explains how to configure Terraform to manage your Tiger Cloud service or self-hosted TimescaleDB.

## Prerequisites

To follow the procedure on this page you need to:

- Create a [target Tiger Cloud service](/docs/get-started/quickstart/create-service/index.md).

  This procedure also works for [self-hosted TimescaleDB](/docs/get-started/choose-your-path/install-timescaledb/index.md).

* [Download and install](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) Terraform.

## Configure Terraform

Configure Terraform based on your deployment type:

- [Tiger Cloud](#tab-panel-614)
- [Self-hosted TimescaleDB](#tab-panel-615)

You use the [Tiger Data Terraform provider](https://registry.terraform.io/providers/timescale/timescale/latest/docs) to manage Tiger Cloud services:

1. **[Generate client credentials](/docs/integrate/find-connection-details#create-client-credentials/index.md)**

2. **Configure Tiger Data Terraform provider**

   1. Create a `main.tf` configuration file with at least the following content. Change `x.y.z` to the [latest version](https://registry.terraform.io/providers/timescale/timescale/latest/docs) of the provider.

      ```
      terraform {
        required_providers {
          timescale = {
            source  = "timescale/timescale"
            version = "x.y.z"
          }
        }
      }


      # Authenticate using client credentials generated in Tiger Cloud Console.
      # When required, these credentials will change to a short-lived JWT to do the calls.
      provider "timescale" {
       project_id = var.ts_project_id
       access_key = var.ts_access_key
       secret_key = var.ts_secret_key
      }


      variable "ts_project_id" {
       type = string
      }


      variable "ts_access_key" {
       type = string
      }


      variable "ts_secret_key" {
       type = string
      }
      ```

   2. Create a `terraform.tfvars` file in the same directory as your `main.tf` to pass in the variable values:

      ```
      export TF_VAR_ts_project_id="<your-timescale-project-id>"
      export TF_VAR_ts_access_key="<your-timescale-access-key>"
      export TF_VAR_ts_secret_key="<your-timescale-secret-key>"
      ```

3. **Add your resources**

   Add your Tiger Cloud services or VPC connections to the `main.tf` configuration file. For example:

   ```
   resource "timescale_service" "test" {
     name              = "test-service"
     milli_cpu         = 500
     memory_gb         = 2
     region_code       = "us-east-1"
     enable_ha_replica = false


     timeouts = {
       create = "30m"
     }
   }


   resource "timescale_vpc" "vpc" {
     cidr         = "10.10.0.0/16"
     name         = "test-vpc"
     region_code  = "us-east-1"
   }
   ```

You can now manage your resources with Terraform. See more about [available resources](https://registry.terraform.io/providers/timescale/timescale/latest/docs/resources/peering_connection) and [data sources](https://registry.terraform.io/providers/timescale/timescale/latest/docs/data-sources/products).

You use the [`cyrilgdn/postgresql`](https://registry.terraform.io/providers/cyrilgdn/postgresql/latest) PostgreSQL provider to connect to your self-hosted TimescaleDB instance.

Create a `main.tf` configuration file with the following content, using your [connection details](/docs/integrate/find-connection-details/index.md):

```
   terraform {
    required_providers {
     postgresql = {
      source  = "cyrilgdn/postgresql"
      version = ">= 1.15.0"
     }
    }
   }


   provider "postgresql" {
    host            = "your-timescaledb-host"
    port            = "your-timescaledb-port"
    database        = "your-database-name"
    username        = "your-username"
    password        = "your-password"
    sslmode         = "require" # Or "disable" if SSL isn't enabled
   }
```

You can now manage your database with Terraform.
