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.tf
and declare the provider adding 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 }
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 add the following lines :
# variables.tf
variable "elestio_email" {
description = "Elestio Email"
type = string
}
variable "elestio_api_token" {
description = "Elestio API Token"
type = string
sensitive = true
}
This file does not contain the values of these variables.
We have to declare them in another file secret.tfvars
that you can now create :
elestio_email = "YOUR-EMAIL"
elestio_api_token = "YOUR-API-TOKEN"
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
}
5. Declare the PostgreSQL Service
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
- 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.