For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/databases/mongodb-deploy-with-terraform.md.

Déployer un service avec Terraform pour Public Cloud Databases pour MongoDB

Voir en Markdown

Découvrez comment configurer un service MongoDB managé OVHcloud via Terraform au sein d'un vRack, ainsi que comment y accéder depuis d'autres parties de votre infrastructure.

Objectif

Le vRack proposé par OVHcloud est une solution de réseau privé qui permet à nos clients de router leur trafic entre leurs services OVHcloud, par exemple des instances, des serveurs dédiés physiques ou, dans le cas présent, un service de base de données managée.

Ce tutoriel vous montre comment configurer un service MongoDB managé OVHcloud via Terraform au sein d'un vRack, ainsi que comment y accéder depuis d'autres parties de votre infrastructure.

Cependant, si vous souhaitez savoir comment faire de même avec Terraform, mais sur un réseau public, consultez notre guide « Bien démarrer avec Public Cloud Databases ».

Prérequis

  • Prérequis OVHcloud
    • Un projet Public Cloud dans votre compte OVHcloud
    • Un réseau privé vRack accessible depuis votre projet Public Cloud (si vous n'en avez pas, veuillez consulter notre guide Configurer le vRack pour Public Cloud).
    • Un compte utilisateur OpenStack dans votre projet Public Cloud (si vous n'en avez pas, veuillez consulter le guide suivant : Gestion des utilisateurs OpenStack).
  • Prérequis Terraform

En pratique

Comment déployer la base de données MongoDB sur un réseau privé

Étape 1 - Déclaration des providers (Terraform, providers, authentification)

La première chose à faire est d'indiquer à Terraform les providers que vous allez utiliser :

  • OVHcloud, pour les ressources de serveur de base de données ;
  • OpenStack, pour les ressources réseau
terraform {
  required_providers {
    ovh = {
      source = "ovh/ovh"
      version = "~> 0.35.0"
    }
    openstack = {
      source = "terraform-provider-openstack/openstack"
      version = "~> 1.51.1"
    }
  }

  required_version = ">= 0.17.1"
}

Il s'agit des dernières versions. Si besoin, vous pouvez effectuer une mise à jour vers la dernière version disponible.

Ensuite, déclarez un premier bloc concernant les informations d'authentification avec le provider Terraform OVHcloud (il s'agit des jetons créés au préalable).

provider "ovh" {
  endpoint           = var.ovh.endpoint
  application_key    = var.ovh.application_key
  application_secret = var.ovh.application_secret
  consumer_key       = var.ovh.consumer_key
}

Ces informations sont stockées séparément, dans un fichier variables.tf de ce type :

variable "ovh" {
  type = map(string)
  default = {
    endpoint           = "ovh-eu"
    application_key    = "xxx"
    application_secret = "yyy"
    consumer_key       = "zzz"
  }
}

Pour OpenStack, utilisez le fichier openrc.sh précédemment téléchargé.

Les variables Openstack sont lues (source openrc.sh), puis Terraform y accède directement lors de l'exécution.

# Configure OpenStack Provider
"openstack" { provider
  auth_url    = "https://auth.cloud.ovh.net/v3.0/"

  # Credentials are acquired by a previous `source openrc.sh`
}

Étape 2 - Créer une ressource réseau, le réseau privé

Au sein du vRack, Terraform va déployer un nouveau réseau privé. Ici, nous avons choisi de créer un sous-réseau (192.168.12.0/24) au sein de ce réseau privé pour un usage futur, dans lequel nous pouvons activer le DHCP sur une plage 192.168.12.100-192.168.12.200.

Cela signifie que si vous déployez des instances ultérieurement, dans le même sous-réseau, elles bénéficieront du DHCP et leur pool d'adresses sera déjà déclaré.

resource "openstack_networking_network_v2" "my_private_network" {
  name           = var.network.name
  admin_state_up = "true"
  region         = var.network.region
}

resource "openstack_networking_subnet_v2" "my_subnet" {
  network_id      = openstack_networking_network_v2.my_private_network.id
  name            = "mySubnet"
  region          = var.network.region
  cidr            = "192.168.12.0/24"
  enable_dhcp     = true
  no_gateway      = false
  dns_nameservers = ["213.186.33.99"]

  allocation_pool {
    start = "192.168.12.100"
    end   = "192.168.12.200"
  }
}

Étape 3 - Créer une ressource MongoDB

Vous pouvez maintenant définir le service pour la base de données managée MongoDB.

Les caractéristiques sélectionnées pour ce service seront les suivantes :

  • taille (flavor) ;
  • niveau de service (plan) ;
  • version.

Vous devrez également l'attacher à un service_name, qui, dans ce cas, correspond à votre project_id.

Une différence importante entre un déploiement en réseau privé et un déploiement en réseau public est qu'à cette étape, vous devez indiquer à Terraform que chaque nœud fera partie du réseau privé en spécifiant les variables subnet_id et network_id comme suit :

resource "ovh_cloud_project_database" "service" {
  service_name = var.product.project_id
  description  = "terraform-hello-world"
  engine       = "mongodb"
  version      = "6.0"
  plan         = "production"
  flavor       = "db2-2"

  nodes {
    region = var.product.region
    subnet_id  = openstack_networking_subnet_v2.my_subnet.id
    network_id = openstack_networking_network_v2.my_private_network.id
  }
  nodes {
    region = var.product.region
    subnet_id  = openstack_networking_subnet_v2.my_subnet.id
    network_id = openstack_networking_network_v2.my_private_network.id
  }
  nodes {
    region = var.product.region
    subnet_id  = openstack_networking_subnet_v2.my_subnet.id
    network_id = openstack_networking_network_v2.my_private_network.id
  }
}

Le service MongoDB devrait maintenant être créé et disponible au sein du réseau privé, mais il ne sera pas possible de s'y connecter directement. Pour des raisons de sécurité, vous devez achever le déploiement en réalisant une dernière étape.

Étape 4 - Configurer la restriction d'accès

Pour accéder au service MongoDB, vous devrez créer des autorisations de connexion pour des adresses IP.

Ajoutez donc la plage d'IP 192.168.12.0/24, que vous avez choisie et utilisée lors de la déclaration du réseau privé (étape de déclaration). Ainsi, toutes les instances Public Cloud hébergées sur ce réseau pourront accéder directement au service MongoDB.

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           = "192.168.12.0/24"
}

Bien entendu, vous pouvez être plus restrictif et fournir séparément plusieurs adresses IP en /32, afin de ne cibler que certaines sources autorisées.

Étape 5 - Gestion des utilisateurs

Pour accéder au service MongoDB, vous devez être un utilisateur authentifié. Par défaut, le cluster sera livré avec l'utilisateur admin@admin, dont vous pouvez réinitialiser le mot de passe via l'espace client OVHcloud pour vous connecter directement.

Vous pouvez également ajouter un autre utilisateur via Terraform, avec des permissions complètes de lecture/écriture sur toutes les bases de données, comme suit :

resource "ovh_cloud_project_database_mongodb_user" "tf_user" {
  service_name = ovh_cloud_project_database.service.service_name
  cluster_id   = ovh_cloud_project_database.service.id
  name         = "tf_mongodb_user"
  roles        = ["readWriteAnyDatabase@admin"]
}

Étape 6 - Informations utiles

À la fin du script Terraform, il est toujours utile de préparer quelques « outputs » qui fourniront des informations pertinentes à conserver à l'issue de la configuration.

Dans notre cas :

  • l'URI de connexion MongoDB ;
  • les identifiants de connexion de l'utilisateur créé par Terraform, y compris son mot de passe.
output "cluster_uri" {
  value = ovh_cloud_project_database.service.endpoints.0.uri
}

output "user_name" {
  value = ovh_cloud_project_database_mongodb_user.tf_user.name
}

output "user_password" {
  value     = ovh_cloud_project_database_mongodb_user.tf_user.password
  sensitive = true
}

Étape 7 - Commande Terraform Plan

$ terraform apply
[…]
Plan: 5 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + cluster_uri   = (known after apply)
  + user_name     = "tf_mongodb_user@admin"
  + user_password = (sensitive value)

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only “yes” will be accepted to approve.

  Enter a value: yes

openstack_networking_network_v2.my_private_network: Creating...
openstack_networking_subnet_v2.my_subnet: Creating...
ovh_cloud_project_database.service: Creating...
[…]

Apply complete! Resources: 5 added, 0 changed, 0 destroyed.

Outputs:

cluster_uri = "mongodb+srv://`<username>`:`<password>`@mongodb-xxx-yyy.database.cloud.ovh.net/admin?replicaSet=replicaset&tls=true"
user_name = "tf_mongodb_user@admin"
user_password = `<sensitive>`

Test de connexion depuis une instance du même réseau privé

Tip

Vous pouvez également utiliser une Floating IP pour accéder à votre réseau privé depuis une adresse IP publique. Pour plus d'informations, consultez notre guide « Attacher une Floating IP à une instance Public Cloud ».

Prérequis : le CLI MongoDB, ou mongos, installé sur le serveur depuis lequel vous souhaitez initier la connexion.

root@d2-2-gra9:~# mongosh --version
1.6.1

Cela permet de se connecter facilement à l'aide des informations obtenues dans la sortie Terraform.

Remplacez username et password dans l'URI, puis utilisez la commande suivante :

root@d2-2-gra9:~# mongosh "mongodb+srv:// ://`<username>`:`<password>`@mongodb-xxx-yyy.database.cloud.ovh.net/admin?replicaSet=replicaset&tls=true"
Current Mongosh Log ID:	65a69dafc492ec7f1fd98d24
Connecting to:		mongodb+srv://`<credentials>`@mongodb-xxx-yyy.database.cloud.ovh.net/admin?replicaSet=replicaset&tls=true&appName=mongosh+1.6.1
Using MongoDB:		6.0.12
Using Mongosh:		1.6.1

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

To improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt out by running the disableTelemetry() command.

replicaset [primary] admin>

Vous êtes maintenant connecté à votre base de données MongoDB managée depuis une machine de votre réseau privé, entièrement déployée avec Terraform.

Nous voulons vos retours !

Pour en savoir plus sur Managed Databases pour MongoDB, veuillez consulter notre page produit.

Consultez le dépôt Terraform pour trouver la documentation la plus récente concernant le provider OVHcloud.

Nous serions ravis de répondre à vos questions et apprécions tout retour que vous pourriez nous faire.

Rejoignez notre chaîne Discord dédiée : https://discord.gg/ovhcloud. Posez vos questions, faites-nous part de vos commentaires et interagissez directement avec l’équipe qui développe nos services de bases de données.

Rejoignez notre communauté d'utilisateurs.

Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.

Cette page vous a-t-elle aidé ?