Getting started with Public Cloud Databases via Terraform (EN)
Find out how to order and manage your Public Cloud managed database service using Terraform
Find out how to order and manage your Public Cloud managed database service using Terraform
Last updated October 19th, 2022
Public Cloud managed databases allow you to focus on building and deploying cloud applications while OVHcloud takes care of the database infrastructure and maintenance.
This guide explains how to order a MongoDB instance of a Public Cloud managed database service using Terraform.
The "OVH provider" needs to be configured with a set of credentials:
application_key
application_secret
consumer_key
Why?
Because, behind the scenes, the "OVH Terraform provider" is doing requests to OVHcloud APIs.
In order to retrieve this necessary information, please follow our First steps with the OVHcloud APIs tutorial.
Specifically, you have to generate these credentials via the OVHcloud token generation page with the following rights:
When you have successfully generated your OVHcloud tokens, please save them as you will have to use them very soon.
The last needed information is the service_name
: it is the ID of your Public Cloud project.
How to get it?
In the Public Cloud section, you can retrieve your service name ID thanks to the Copy to clipboard
button.
You will also use this information in Terraform resources definition files.
In order to create a new MongoDB cluster, you will need to specify at least:
First, create a main.tf
file defining the resources that will be created
terraform {
required_providers {
ovh = {
source = "ovh/ovh"
version = "0.22"
}
}
required_version = ">= 0.17.1"
}
provider "ovh" {
endpoint = var.ovh.endpoint
application_key = var.ovh.application_key
application_secret = var.ovh.application_secret
consumer_key = var.ovh.consumer_key
}
resource "ovh_cloud_project_database" "service" {
service_name = var.product.project_id
description = var.product.name
engine = "mongodb"
version = var.product.version
plan = var.product.plan
nodes {
region = var.product.region
}
flavor = var.product.flavor
}
resource "ovh_cloud_project_database_mongodb_user" "dbuser" {
service_name = ovh_cloud_project_database.service.service_name
cluster_id = ovh_cloud_project_database.service.id
name = var.access.name
}
resource "ovh_cloud_project_database_ip_restriction" "iprestriction" {
service_name = ovh_cloud_project_database.service.service_name
engine = ovh_cloud_project_database.service.engine
cluster_id = ovh_cloud_project_database.service.id
ip = var.access.ip
}
Then, create a variables.tf
file defining the variables used in main.tf
:
variable "ovh" {
type = map(string)
default = {
endpoint = "ovh-eu"
application_key = ""
application_secret = ""
consumer_key = ""
}
}
variable "product" {
type = map(string)
default = {
name = "mongodb-terraform"
project_id = ""
region = "DE"
plan = "business"
flavor = "db1-7"
version = "5.0"
}
}
variable "access" {
type = map(string)
default = {
name = "johndoe"
ip = "xx.xx.xx.xx/32"
}
}
Here, we defined the ovh-eu
endpoint because we want to call the OVHcloud Europe API. Other endpoints exist, depending on your needs:
ovh-eu
for OVHcloud Europe APIovh-ca
for OVHcloud North-America APIThen, create a secrets.tfvars
file containing the required variables values:
ovh = {
endpoint = "ovh-eu"
application_key = "<application_key>"
application_secret = "<application_secret>"
consumer_key = "<consumer_key>"
}
product = {
project_id = "<service_name>"
name = "mongodb-terraform"
region = "DE"
plan = "business"
flavor = "db1-7"
version = "5.0"
}
access = {
name = "johndoe"
ip = "<ip_range>"
}
Don't forget to replace <service_name>
, <application_key>
, <application_secret>
, <consumer_key>
, <ip_range>
by the real data.
Finally, create an outputs.tf
file defining the resources that will be exported:
output "cluster_uri" {
value = ovh_cloud_project_database.service.endpoints.0.uri
}
output "user_name" {
value = ovh_cloud_project_database_mongodb_user.dbuser.name
}
output "user_password" {
value = ovh_cloud_project_database_mongodb_user.dbuser.password
sensitive = true
}
Now we need to initialise Terraform, generate a plan, and apply it.
$ terraform init
The init command will initialize your working directory which contains .tf
configuration files.
It’s the first command to execute for a new configuration, or after doing a checkout of an existing configuration in a given git repository for example.
The init
command will:
Now, we can generate our plan:
$ terraform plan -var-file=secrets.tfvars
Thanks to the plan command, we can check what Terraform wants to create, modify or remove.
The plan is OK for us, so let's apply it:
$ terraform apply -var-file=secrets.tfvars -auto-approve
Finally export the user credentials and the URI
export PASSWORD=$(terraform output -raw user_password)
export USER=$(terraform output -raw user_name)
export URI=$(terraform output -raw cluster_uri)
And, voilà, the MongoDB cluster is created.
In this guide, we explained how to deploy a MongoDB service but you can find example for other database engine here and tweak them according to your needs :
Managing a MongoDB service from the OVHcloud Control Panel
Configuring vRack for Public Cloud
Visit our dedicated Discord channel: https://discord.gg/ovhcloud. Ask questions, provide feedback and interact directly with the team that builds our databases services.
Join our community of users on https://community.ovh.com/en/.
Si lo desea, también puede enviarnos sus sugerencias para ayudarnos a mejorar nuestra documentación.
Imágenes, contenido, estructura...: ayúdenos a mejorar nuestra documentación con sus sugerencias.
No podemos tratar sus solicitudes de asistencia a través de este formulario. Para ello, haga clic en "Crear un tíquet" .
¡Gracias! Tendremos en cuenta su opinión.
¡Acceda al espacio de la OVHcloud Community! Resuelva sus dudas, busque información, publique contenido e interactúe con otros miembros de la comunidad.
Discuss with the OVHcloud community