Objectif
Ce guide fournit des instructions sur l'utilisation du module Terraform SAP system développé par OVHcloud afin de déployer une infrastructure d'un système SAP (comme les services centraux, les serveurs d'application, SAProuters et bases de données SAP HANA) sur une solution VMware on OVHcloud.
Prérequis
En pratique
Dans le but de gérer les ressources (création, modification et destruction) sur votre solution VMware on OVHcloud, nous vous conseillons de créer un utilisateur dédié avec des droits limités. Ces droits sont nécessaires à l'utilisation de ce module Terraform.
Ce module a été écrit pour être compatible avec Terraform v1.4 ou supérieur. Pour découvrir comment installer Terraform, veuillez vous référer à la documentation officielle disponible sur Hashicorp.
Plusieurs exemples sont disponibles dans le repository GitHub pour déployer une infrastructure d'un système SAP.
Trois principaux fichiers sont requis pour utiliser comme attendu ce module Terraform :
- main.tf
- outputs.tf
- versions.tf
main.tf
Ce fichier contient le code pour appeler le module Terraform SAP system développé par OVHcloud.
- Le bloc « provider » est nécessaire pour être en capacité d’interagir avec votre solution VMware on OVHcloud.
- Le premier bloc « module » regroupe toutes les variables que vous souhaitez passer au module Terraform SAP Application Servers développé par OVHcloud.
- Le second bloc « module » regroupe toutes les variables que vous souhaitez passer au module Terraform SAP HANA databases développé par OVHcloud.
provider "vsphere" {
vsphere_server = "pcc-xx-xx-xx-xx.ovh.com"
}
module "sap-application-server" {
source = "github.com/ovh/terraform-vsphere-sap-application-server.git?ref=v1.0.0"
sap_application_server_datastore = "ssd-xxxxxx"
sap_application_servers = [
{
"name" = "terraform-vm-1",
"model" = "",
"cpus" = "2",
"cpus_per_socket" = "2",
"memory" = "1024",
"custom_disks" = false,
"disks" = [],
"networks" = ["VLAN20"],
"guest_id" = "sles15_64Guest",
"vsphere_content_library" = "",
"template" = "",
"iso_datastore" = "",
"iso_path" = "",
"vapp_options" = {}
}
]
vsphere_compute_cluster = "Cluster1"
vsphere_datacenter = "pcc-xx-xx-xx-xx_datacenterxxxx"
}
module "sap-hana-database" {
source = "github.com/ovh/terraform-vsphere-sap-hana-database.git?ref=v1.0.0"
sap_hana_database_datastore = "vsanDatastore"
sap_hana_database_thin_datastore_policy = "vSAN Default Storage Policy"
sap_hana_database_thick_datastore_policy = "SAP HANA VM Storage Policy"
sap_hana_databases = [
{
"name" = "terraform-vm-hana-1",
"model" = "S",
"cpus" = "",
"cpus_per_socket" = "24",
"memory" = "",
"custom_disks" = false,
"scsi_controller_count" = "",
"disks" = []
"networks" = ["VLAN20"],
"guest_id" = "sles15_64Guest",
"vsphere_content_library" = "",
"template" = "",
"iso_datastore" = "",
"iso_path" = "",
"vapp_options" = {}
}
]
vsphere_compute_cluster = "Cluster1"
vsphere_datacenter = "pcc-xx-xx-xx-xx_datacenterxxxx"
}
Info
Où « SAP HANA VM Storage Policy » a été auparavant créée dans l'interface vSphere avec une politique de provisionnement thick. Pour en savoir plus sur les recommandations à propos de cette politique de stockage, nous vous conseillons de lire ce guide.
Pour connaître toutes les entrées que vous pouvez passer à ce module, veuillez vous référer au README sur GitHub.
Vous avez également la possibilité de créer des variables afin d'éviter de les coder en dur dans votre fichier main.tf. Pour cela, vous devez remplacer chaque valeur par une valeur avec la syntaxe var.<nom_de_la_variable> et créer un fichier nommé variables.tf qui contient la définition de chaque variable. Attention, le type de la variable doit être le même que la variable dans le module Terraform SAP system développé par OVHcloud.
Par exemple, vous ne pouvez pas appliquer le type « chaîne de caractères » pour la variable sap_hana_databases, puisque dans le module Terraform SAP system développé par OVHcloud cette variable est une « liste ».
Dans ce cas, le fichier main.tf pourrait être comme ceci :
provider "vsphere" {
vsphere_server = var.vsphere_server
}
module "sap-application-server" {
source = "github.com/ovh/terraform-vsphere-sap-application-server.git?ref=v1.0.0"
sap_application_server_datastore = var.sap_application_server_datastore
sap_application_servers = var.sap_application_servers
vsphere_compute_cluster = var.vsphere_compute_cluster
vsphere_datacenter = var.vsphere_datacenter
}
module "sap-hana-database" {
source = "github.com/ovh/terraform-vsphere-sap-hana-database.git?ref=v1.0.0"
sap_hana_database_datastore = var.sap_hana_database_datastore
sap_hana_database_thick_datastore_policy = var.sap_hana_database_thick_datastore_policy
sap_hana_database_thin_datastore_policy = var.sap_hana_database_thin_datastore_policy
sap_hana_databases = var.sap_hana_databases
vsphere_compute_cluster = var.vsphere_compute_cluster
vsphere_datacenter = var.vsphere_datacenter
}
Le fichier variables.tf devrait être similaire à cela :
variable "vsphere_server" {
type = string
description = "Nom du serveur vSphere"
}
variable "vsphere_datacenter" {
type = string
description = "Nom du datacenter dans l'interface vSphere"
}
variable "sap_application_server_datastore" {
type = string
description = "Nom du datastore pour stocker les machines virtuelles des serveurs d'application SAP"
}
variable "vsphere_compute_cluster" {
type = string
description = "Nom du cluster vSphere"
}
variable "sap_application_servers" {
type = list(any)
description = "Liste des machines virtuelles des serveurs d'application SAP souhaités"
}
variable "sap_hana_database_datastore" {
type = string
description = "Nom du datastore pour stocker les machines virtuelles des bases de données SAP HANA"
}
variable "sap_hana_database_thick_datastore_policy" {
type = string
description = "Cette politique de stockage doit être un provisionnement thick"
}
variable "sap_hana_database_thin_datastore_policy" {
type = string
description = "Cette politique de stockage doit être un provisionnement thin"
}
variable "sap_hana_databases" {
type = list(any)
description = "Liste des machines virtuelles de bases de données SAP HANA souhaitées"
}
Enfin, dans le but d'éviter de devoir fournir chaque valeur à travers la console, vous avez la possibilité de créer un fichier nommé terraform.tfvars dans lequel vous pouvez mettre les valeurs souhaitées pour chaque variable.
# vSphere
vsphere_datacenter = "pcc-xx-xx-xx-xx_datacenterxxxx"
vsphere_compute_cluster = "Cluster1"
vsphere_server = "pcc-xx-xx-xx-xx.ovh.com"
# SAP Application Servers
sap_application_server_datastore = "ssd-xxxxxx"
sap_application_servers = [
{
"name" = "terraform-vm-1",
"model" = "",
"cpus" = "2",
"cpus_per_socket" = "2",
"memory" = "1024",
"custom_disks" = false,
"disks" = [],
"networks" = ["VLAN20"],
"guest_id" = "sles15_64Guest",
"vsphere_content_library" = "",
"template" = "",
"iso_datastore" = "",
"iso_path" = "",
"vapp_options" = {}
}
]
# SAP HANA databases
sap_hana_database_datastore = "vsanDatastore"
sap_hana_database_thick_datastore_policy = "SAP HANA VM Storage Policy"
sap_hana_database_thin_datastore_policy = "vSAN Default Storage Policy"
sap_hana_databases = [
{
"name" = "terraform-vm-hana-1",
"model" = "S",
"cpus" = "",
"cpus_per_socket" = "24",
"memory" = "",
"custom_disks" = false,
"disks" = [],
"networks" = ["VLAN20"],
"guest_id" = "sles15_64Guest",
"vsphere_content_library" = "",
"template" = "",
"iso_datastore" = "",
"iso_path" = "",
"vapp_options" = {}
}
]
outputs.tf
Ce fichier affiche les informations après l'exécution de terraform apply, comme les IDs de vos machines virtuelles, les informations des règles d'anti-affinité ou encore les informations des groupes d'affinité.
Pour découvrir les sorties disponibles de ce module, veuillez vous référer au fichier outputs.tf sur GitHub.
versions.tf
Ce fichier permet de fixer la version des binaires utilisés lors de l'exécution du code. Ce module doit être identique au fichier versions.tf présent dans le repository Github du module pour la release souhaitée.
Exécution
Une fois que votre repository avec ces trois fichiers (minimum) est prêt, vous pouvez lancer l'exécution avec les commandes suivantes :
terraform init
terraform plan
terraform apply
La sortie de l'exécution devrait être similaire à celle-ci :
Plan: 2 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ affinity_hosts_sap_application_servers_rules = {}
+ affinity_hosts_sap_hana_databases_rules = {}
+ anti_affinity_sap_application_servers_rule = {}
+ anti_affinity_sap_hana_databases_rule = {}
+ sap_application_servers_ids = {
+ terraform-vm-1 = (known after apply)
}
+ sap_hana_databases_ids = {
+ terraform-vm-hana-1 = (known after apply)
}
module.sap-application-server.vsphere_virtual_machine.sap_application_server["terraform-vm-1"]: Creating...
module.sap-hana-database.vsphere_virtual_machine.sap_hana_database["terraform-vm-hana-1"]: Creating...
module.sap-application-server.vsphere_virtual_machine.sap_application_server["terraform-vm-1"]: Creation complete after 4s [id=4228c157-71f8-f8ab-18b0-1be3c77cd381]
module.sap-hana-database.vsphere_virtual_machine.sap_hana_database["terraform-vm-hana-1"]: Creation complete after 6s [id=42286fc8-2357-08f1-17f4-e746be74ff34]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Outputs:
affinity_hosts_sap_application_servers_rules = {}
affinity_hosts_sap_hana_databases_rules = {}
anti_affinity_sap_application_servers_rule = {}
anti_affinity_sap_hana_databases_rule = {}
sap_application_servers_ids = {
"terraform-vm-1" = "4228c157-71f8-f8ab-18b0-1be3c77cd381"
}
sap_hana_databases_ids = {
"terraform-vm-hana-1" = "42286fc8-2357-08f1-17f4-e746be74ff34"
}
Si l'exécution s'est déroulée sans erreur, vous avez créé votre première infrastructure d'un système SAP sur votre solution VMware on OVHcloud avec Terraform.
Nous vous suggérons de prendre connaissance des exemples et du README pour découvrir toutes les possibilités.
À tout moment, vous avez la possibilité de changer la configuration des machines virtuelles (plus de vCPU, plus de mémoire ou ajout d'un nouveau disque par exemple) et relancer l'exécution de Terraform.
Destruction
Si vous souhaitez détruire ces machines virtuelles, exécutez la commande suivante :
La sortie de l'exécution devrait ressembler à celle-ci :
Plan: 0 to add, 0 to change, 2 to destroy.
Changes to Outputs:
- affinity_hosts_sap_application_servers_rules = {} -> null
- affinity_hosts_sap_hana_databases_rules = {} -> null
- anti_affinity_sap_application_servers_rule = {} -> null
- anti_affinity_sap_hana_databases_rule = {} -> null
- sap_application_servers_ids = {
- terraform-vm-1 = "4228c157-71f8-f8ab-18b0-1be3c77cd381"
} -> null
- sap_hana_databases_ids = {
- terraform-vm-hana-1 = "42286fc8-2357-08f1-17f4-e746be74ff34"
} -> null
module.sap-application-server.vsphere_virtual_machine.sap_application_server["terraform-vm-1"]: Destroying... [id=4228c157-71f8-f8ab-18b0-1be3c77cd381]
module.sap-hana-database.vsphere_virtual_machine.sap_hana_database["terraform-vm-hana-1"]: Destroying... [id=42286fc8-2357-08f1-17f4-e746be74ff34]
module.sap-application-server.vsphere_virtual_machine.sap_application_server["terraform-vm-1"]: Destruction complete after 1s
module.sap-hana-database.vsphere_virtual_machine.sap_hana_database["terraform-vm-hana-1"]: Destruction complete after 1s
Destroy complete! Resources: 2 destroyed.
Aller plus loin
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.
Échangez avec notre communauté d'utilisateurs.