Skip to main content

Get started


Build your first Elestio Terraform project

This exemple shows the setup for a Terraform project containing a single PostgreSQL service, and shows off some useful commands to stand up (and destroy) your Elestio infrastructure.


Prepare the dependencies


You need a Terraform CLI version equal or higher than v0.14.0.
To ensure you're using the acceptable version of Terraform you may run the following command:

terraform -v

Your output should resemble:

Terraform v0.14.0 # any version >= v0.14.0 is OK
...


Configure your project and services

Terraform files are used to define the structure and configuration of your infrastructure. It is generally a good idea to keep these definitions in separate files rather than combining them all in one file. This section will explain how to organize a basic Terraform project.

 

  1. Create and move to an empty folder

    Here is an overview of the files we will create together :
    |- postgres.tf	# Defines the PostgreSQL service
    |- project.tf	# Defines the Elestio project that will contain the PostgreSQL service
    |- provider.tf	# Defines the Elestio provider for Terraform
    |- variables.tf # Defines the variables required in other .tf files 


  2. Create a file provider.tf and declare the provider adding the following lines :


    As you can see, the email and API token are assigned to variables.
    You should never put sensitive information directly in .tf files.


    # provider.tf
    
    terraform {
      required_providers {
        elestio = {
          source  = "elestio/elestio"
          version = "0.3.0" # check out the latest version available
        }
      }
    }
    
    # Configure the Elestio Provider
    provider "elestio" {
      email     = var.elestio_email
      api_token = var.elestio_api_token
    }


 

 

  • 1. Create an empty folder 
  • Here is an overview of the files we will create together :

    |- postgres.tf	# Defines the PostgreSQL service
    |- project.tf	# Defines the Elestio project that will contain the PostgreSQL service
    |- provider.tf	# Defines the Elestio provider for Terraform
    |- variables.tf # Defines the variables required in other .tf files 

    2. Declare the provider

    Create a file provider.tf and add the following lines :

    # provider.tf
    
    terraform {
      required_providers {
        elestio = {
          source  = "elestio/elestio"
          version = "0.3.0" # check out the latest version available
        }
      }
    }
    
    # Configure the Elestio Provider
    provider "elestio" {
      email     = var.elestio_email
      api_token = var.elestio_api_token
    }

    As you can see, the email and API token are assigned to variables.
    You should never put sensitive information directly in .tf files.

     

    3. Declare the required variables

    Create a file variables.tf and adddeclare variables adding the following lines :

    This file does not contain the values of these variables. We will have to declare them in another file later.


    # variables.tf
    
    variable "elestio_email" {
      description = "Elestio Email"
      type        = string
    }
    
    variable "elestio_api_token" {
      description = "Elestio API Token"
      type        = string
      sensitive   = true
    }

    This

    file

  • Create does not contain the values of these variables.
    We have to declare them in anothera file secret.tfvars thatand youfill canit nowwith createyour values :


    # secret.tfvars
    
    elestio_email      = "YOUR-EMAIL"
    elestio_api_token  = "YOUR-API-TOKEN"

    1. Do not commit with Git this file ! Sensitive information such as an API token should never be pushed.
      For more information on how to securely authenticate, please read the authentication documentation.



  • 4. Declare the Elestio Project
  • To contain our PostgreSQL service, we will have to create a new project on Elestio.
    Instead of using the web interface, we can also declare it via terraform.

    Create a file project.tf and add the following lines :



    # project.tf
    
    # Create a Project
    resource "elestio_project" "pg_project" {
      name             = "PostgreSQL Project"
      description      = "Contains a postgres database"
      technical_emails = var.elestio_email
    }

    To

    contain
    5.our DeclarePostgreSQL service, we will have to create a new project on Elestio.
    Instead of using the PostgreSQLweb Service
    interface,

    we can also declare it via terraform.


  • Create a file postgres.tf and add the following lines :



    # postgres.tf
    
    # Create a PostgreSQL Service
    resource "elestio_postgresql" "pg_service" {
      project_id    = elestio_project.pg_project.id
      server_name   = "pg-service"
      server_type   = "SMALL-1C-2G"
      provider_name = "hetzner"
      datacenter    = "fsn1"
      support_level = "level1"
      admin_email   = var.elestio_email
    }

    Terraform takes care of managing the dependencies and creating the different resources in the right order. As you can see, project_id will be filled with the value of the Project Resource that will be created with the previously project.tf file.





  • Apply the Terraform configuration

     

    1. Download and install the Elestio provider defined in the configuration :

      terraform init

    2. Ensure the configuration is syntactically valid and internally consistent:

      terraform validate

    3. Apply the configuration :

      terraform apply


    4. Voila, you have created a Project and  PostgreSQL Service using Terraform !
      You can visit the Elestio web dashboard to see these ressources.