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
- Download and install Terraform
- Sign up for Elestio if you haven't already
- Get your API token in the security settings page of your account
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.
- 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 - Create a file
provider.tfand 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.tffiles.
# 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 }
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
secret.tfvars # secret.tfvars
elestio_email = "YOUR-EMAIL"
elestio_api_token = "YOUR-API-TOKEN"
For more information on how to securely authenticate, please read the authentication documentation.
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
contain5.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.
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
- Download and install the Elestio provider defined in the configuration :
terraform init - Ensure the configuration is syntactically valid and internally consistent:
terraform validate - Apply the configuration :
terraform apply - Voila, you have created a Project and PostgreSQL Service using Terraform !
You can visit the Elestio web dashboard to see these ressources.