07.06.2023

Comment automatiser le déploiement du serveur via Terraform?

Terraform

Terraform de voiture. Serverspace vous permet de gérer les ressources cloud à l'aide de l'approche Infrastructure as Code. La gestion se fait à l'aide de fichiers de configuration spéciaux dans lesquels vous décrivez l'état souhaité de votre infrastructure.

Pose Terraform

Tout d'abord, installons Terraform dans votre système d'exploitation. Nous recommandons d'utiliser le Terraform manuel du développeur.

Configuration du fournisseur

    1. Créer un API clé pour le projet qui fonctionnera avec Terraform.
    2. Créez et accédez au répertoire qui sera utilisé pour travailler avec Terraform Fournisseur.
    3. Créez et ouvrez le fichier de configuration provider.tf.
    4. Insérez les informations du fournisseur dans le fichier, où se trouve votre API et enregistrez les modifications :
    5. terraform {
      fournisseurs_requis {
      serverspace = {
      source = "itglobalcom/serverspace"
      version = "0.2.2"
      }
      }
      }

      variable "s2_token" {
      type = chaîne
      par défaut = ""
      }

      fournisseur "serverspace"{
      clé = var.s2_token
      }

    6. Ouvrez une invite de commande et accédez au répertoire dans lequel vous avez créé le fichier. Effectuez une initialisation pour vérifier qu'elle est correcte :
      terraform init

      Vous verrez le message suivant si l'initialisation est réussie :

      Initialisation du backend...
      Initialisation des plug-ins du fournisseur...
      - Trouver itglobalcom/serverspace versions correspondant à "0.2.0"...
      - Installation d'itglobalcom/serverspace v0.2.0 ...
      - Installé itglobalcom/serverspace v0.2.0 (auto-signé, ID de clé 062XXXXXXXXXXXX)

      Les fournisseurs partenaires et communautaires sont signés par leurs développeurs.
      Si vous souhaitez en savoir plus sur la signature du fournisseur, vous pouvez en savoir plus ici : https://www.terraform.io/docs/cli/plugins/signature.html

      Terraform a créé un fichier de verrouillage .terraform.lock.hcl pour enregistrer les sélections de fournisseur effectuées ci-dessus. Incluez ce fichier dans votre référentiel de contrôle de version afin que Terraform peut garantir de faire les mêmes sélections par défaut lorsque vous exécutez "terraform init" à l'avenir.

      Terraform a été initialisé avec succès !

      Vous pouvez maintenant commencer à travailler avec Terraform. Essayez de courir "terraform plan" pour voir les changements nécessaires pour votre infrastructure. Tous Terraform Les commandes devraient maintenant fonctionner.

      Si jamais vous définissez ou modifiez des modules ou la configuration du backend pour Terraform, réexécutez cette commande pour réinitialiser votre répertoire de travail. Si vous oubliez, d'autres commandes le détecteront et vous rappelleront de le faire si nécessaire.

Description de votre infrastructure

Avec Serverspace Terraform Fournisseur, vous pouvez créer une infrastructure avec différentes configurations. Vous trouverez une documentation détaillée dans le Terraform Registre.

Prenons l'exemple de la création d'une infrastructure simple avec deux serveurs connectés via un réseau isolé :

Suivez les étapes ci-dessous pour configurer cette infrastructure :

    1. Créer et ouvrir le fichier ssh_key.tf, qui contiendra la partie publique du ssh clé pour créer le serveur.
    2. Insérer les informations sur la partie publique du ssh clé dans le fichier ssh_key.tf et enregistrez les modifications, en remplaçant le contenu de la variable public_key par votre valeur :
      Ressource "serverspace_ssh""terraform"{
      nom = "terraform-clé"
      clé_publique = "ssh-rsa AAAAB3Nza...JUDjlM= racine@CentOS.local"
      }

      variable "clé_pvt" {
      type = chaîne
      par défaut = ""
      }

    3. Créez et ouvrez le fichier main.tf qui contiendra la description de l'infrastructure.
    4. Insérez la description de votre infrastructure dans le fichier.
      Ressource "serverspace_serveur" "serveur1" {
      image = "Ubuntu-20.04-X64"
      nom = "serveur-1"
      emplacement = "am2"
      cpu = 2
      ram = 2048

      boot_volume_size = 40*1024

      volume {
      nom = "barre"
      taille = 20*1024
      }

      nic {
      réseau = ""
      network_type = "PublicPartagé"
      bande passante = 50
      }
      nic {
      réseau = ressource.serverspace_isolated_network.my_net.id
      network_type = "Isolé"
      bande passante = 0
      }

      ssh_clés = [
      ressource.serverspace_ssh.terraform.identifiant,
      ]

      lien {
      hôte = self.public_ip_addresses[0]
      utilisateur = "racine"
      taper = "ssh"
      clé_privée = fichier(var.pvt_key)
      délai = "2m"
      }

      fournisseur "exec à distance" {
      en ligne = [
      "exporter CHEMIN=$CHEMIN :/usr/bin",
      "sudo apt-obtenir la mise à jour",
      "sudo apt-get install -y serveur redis",
      "sortie 0"
      ]
      }

      }

      Ressource "serverspace_serveur" "serveur2" {
      image = "Ubuntu-20.04-X64"
      nom = "serveur-2"
      emplacement = "am2"
      cpu = 4
      ram = 8192

      boot_volume_size = 40*1024

      nic {
      réseau = ""
      network_type = "PublicPartagé"
      bande passante = 70
      }
      nic {
      réseau = ressource.serverspace_isolated_network.my_net.id
      network_type = "Isolé"
      bande passante = 0
      }
      }

      Ressource"serverspace_isolated_network" "mon_net" {
      emplacement = "am2"
      nom = "mon_net"
      description = "Exemple pour Terraform"
      préfixe_réseau = "192.168.0.0"
      masque = 24
      }

    5. Pour créer l'infrastructure décrite ci-dessus, exécutez la commande :
      terraform vous inscrire

      Une fenêtre de dialogue apparaîtra :

      Terraform a utilisé les fournisseurs sélectionnés pour générer le plan d'exécution suivant.
      Les actions de ressource sont indiquées par les symboles suivants :
      + créer

      Terraform effectuera les actions suivantes :

      # serverspace_isolated_network.my_net sera créé
      + ressource "serverspace_isolated_network" "mon_net" {
      + description = "Exemple pour Terraform"
      + id = (connu après postulation)
      + emplacement = "am2"
      + masque = 24
      + nom = "mon_net"
      + préfixe_réseau = "192.168.0.0"
      }

      # serverspace_server.server1 sera créé
      + ressource "serverspace_serveur" "serveur1" {
      + boot_volume_id = (connu après application)
      + boot_volume_size = 40960
      + cpu = 2
      + id = (connu après postulation)
      + image = "Ubuntu-20.04-X64"
      + emplacement = "am2"
      + nom = "serveur-1"
      + public_ip_addresses = (connu après application)
      + ram = 2048
      + ssh_keys = (connu après application)

      + sympa {
      + bande passante = 0
      + id = (connu après postulation)
      + ip_address = (connu après postulation)
      + réseau = (connu après application)
      + network_type = "Isolé"
      }
      + sympa {
      + bande passante = 50
      + id = (connu après postulation)
      + ip_address = (connu après postulation)
      + network_type = "PublicPartagé"
      }

      + volumes {
      + id = (connu après postulation)
      + nom = "barre"
      + taille = 20480
      }
      }

      # serverspace_server.server2 sera créé
      + ressource "serverspace_serveur" "serveur2" {
      + boot_volume_id = (connu après application)
      + boot_volume_size = 40960
      + cpu = 4
      + id = (connu après postulation)
      + image = "Ubuntu-20.04-X64"
      + emplacement = "am2"
      + nom = "serveur-2"
      + public_ip_addresses = (connu après application)
      + ram = 8192
      + ssh_keys = (connu après application)

      + sympa {
      + bande passante = 0
      + id = (connu après postulation)
      + ip_address = (connu après postulation)
      + réseau = (connu après application)
      + network_type = "Isolé"
      }
      + sympa {
      + bande passante = 70
      + id = (connu après postulation)
      + ip_address = (connu après postulation)
      + network_type = "PublicPartagé"
      }
      }

      # serverspace_ssh.terraform sera créé
      + ressource "serverspace_ssh""terraform"{
      + id = (connu après postulation)
      + nom = "terraform-clé"
      + clé_publique = "ssh-rsa AAAAB3Nza...JUDjlM= racine@CentOS.local"
      }

      Plan : 4 pour ajouter, 0 pour modifier, 0 pour détruire.

      Voulez-vous effectuer ces actions ?
      Terraform effectuera les actions décrites ci-dessus.
      Seul 'oui' sera accepté pour approuver.

    6. Entrez yes pour créer l'infrastructure.
      Entrez une valeur : ouiserverspace_ssh.terraform: Créer...
      serverspace_isolated_network.my_net : création...
      serverspace_ssh.terraform: Création terminée après 1s [id=3181]
      serverspace_isolated_network.my_net : création terminée après 8 s [id=l2n403]
      serverspace_server.server2 : création...
      serverspace_server.server1 : création...
      serverspace_server.server1 : Toujours en cours de création... [10 s se sont écoulées]
      serverspace_server.server2 : Toujours en cours de création... [10 s se sont écoulées]

      serverspace_server.server1 (exec à distance) : (Lecture de la base de données...
      serverspace_server.server1 (exec à distance) : (Lecture de la base de données... 5 %
      serverspace_server.server1 (exec à distance) : (Lecture de la base de données... 10 %

      serverspace_server.server1 : Création terminée après 1m3s [id=l2s190038]
      Postulez complet ! Ressources : 4 ajoutées, 0 modifiées, 0 détruites.
    7. Pour afficher l'infrastructure actuelle, exécutez la commande :
      terraform montrer

      Cela affichera la configuration actuelle de l'infrastructure :

      # serverspace_isolated_network.mon_net :
      Ressource "serverspace_isolated_network" "mon_net" {
      description = "Exemple pour Terraform"
      identifiant = "l2n403"
      emplacement = "am2"
      masque = 24
      nom = "mon_net"
      préfixe_réseau = "192.168.0.0"
      }

      # serverspace_server.server1 :
      Ressource "serverspace_serveur" "serveur1" {
      boot_volume_id = 58909
      boot_volume_size = 40960
      cpu = 2
      identifiant = "l2s190038"
      image = "Ubuntu-20.04-X64"
      emplacement = "am2"
      nom = "serveur-1"
      adresses_ip_publiques = [
      "45.138.24.19",
      ]
      ram = 2048
      ssh_keys = [
      3181
      ]

      nic {
      bande passante = 0
      identifiant = 59576
      adresse_ip = "192.168.0.1"
      réseau = "l2n403"
      network_type = "Isolé"
      }
      nic {
      bande passante = 50
      identifiant = 59575
      adresse_ip = "45.138.24.19"
      network_type = "PublicPartagé"
      }

      volume {
      identifiant = 58910
      nom = "barre"
      taille = 20480
      }
      }

      # serverspace_server.server2 :
      Ressource "serverspace_serveur" "serveur2" {
      boot_volume_id = 58911
      boot_volume_size = 40960
      cpu = 4
      identifiant = "l2s190039"
      image = "Ubuntu-20.04-X64"
      emplacement = "am2"
      nom = "serveur-2"
      adresses_ip_publiques = [
      "31.44.3.68",
      ]
      ram = 8192
      ssh_keys = []

      nic {
      bande passante = 0
      identifiant = 59578
      adresse_ip = "192.168.0.2"
      réseau = "l2n403"
      network_type = "Isolé"
      }
      nic {
      bande passante = 70
      identifiant = 59577
      adresse_ip = "31.44.3.68"
      network_type = "PublicPartagé"
      }
      }

      # serverspace_ssh.terraform:
      Ressource "serverspace_ssh""terraform"{
      identifiant = "3181"
      nom = "terraform-clé"
      clé_publique = "ssh-rsa AAAAB3Nza...JUDjlM= racine@CentOS.local"
      }

Félicitations pour votre première infrastructure en tant qu'implémentation de code.