Skip to main content

[Terraform] Déploiement d'une instance

Introduction

Nous allons voir comment déployer une instance sur le cloud Infomaniak en utilisant Terraform via le provider OpenStack.

Source

Déploiement

Tout d'abord, il faudra récupérer le fichier openrc depuis l'interface web.

Pour cela, on peut se rendre dans la liste des projets et cliquer sur les trois points puis sur Gérer les utilisateurs :

image.png

Je vous recommande de renommer ce fichier en openrc.sh pour des soucis de simplicité.

Ensuite je vous invite à le modifier pour ajouter le mot de passe de votre utilisateur OpenStack dedans et commenter la ligne qui demande votre mot de passe (sinon vous devrez le saisir à chaque fois :

image.png

On peut maintenant créer la paire de clé SSH qui nous servira à nous connecter à notre instance :

ssh-keygen

On peut maintenant passer à l'édition du fichier main.tf qui sert à décrire la configuration de notre instance :

# Define required providers
terraform {
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "1.44.0"
    }
  }
}

# Configure the OpenStack Provider
provider "openstack" {
}


resource "openstack_compute_keypair_v2" "ssh-alpine-02" {
  name = "ssh-alpine-02"
  public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDiX1Bbfu8YjHpp0AS60EwpQ4oZWjo+YeT3FyQIby324HIJsfS0h3DDlgP4GOcuybiJApxthiWAzJ9xgPnSAD6yc7wzrInE0/2SeQ/CkFjQLOWgkuRv4DBg3t+A8tai9Yv/zYXmCZdmG7ydVfHXCWSWn2k/m18SJZju0CWRoJFe4t8M3cOXMErq0FHuYUhRgCEki5tImQCGFd/8HqCld3Zv47+ocIdwo2p2mEi8+FAYeAgb6J2DACyHpg68NUa8xQhf8tPghlJ7XME8p81JhE0yanKMr4RG4s9vT63fnwqCrQclHPWsyeFaBrXJYX1kNUs5aoZY71cCYYj5nIVEMxQfstkbpzwwDosaRTXiYgCyKP31k+Kx37J6XhZfLpQtq/z+b62BvnBi+Z+3T/sOPLjDoq5GRlHO3aYJjTxOv5NkwDxjLVVWISDRjw2TP5EZgvwTc/eHZHsCFaxt9e1/ROOiCTcD63Vao3ZgCb7jl9FaTNe+MW2yrXFpoL9yhSbtx0U= elie@work-l-elie"
}


# Create a security group
resource "openstack_compute_secgroup_v2" "bookstack-test" {
  name        = "bookstack-test"
  description = "Security Group Description"

  rule {
    from_port   = 22
    to_port     = 22
    ip_protocol = "tcp"
    cidr        = "0.0.0.0/0"
  }

  rule {
    from_port   = 6875
    to_port     = 6875
    ip_protocol = "tcp"
    cidr        = "0.0.0.0/0"
  }

  rule {
    from_port   = 443
    to_port     = 443
    ip_protocol = "tcp"
    cidr        = "0.0.0.0/0"
  }
}


# Create a web server
resource "openstack_compute_instance_v2" "bookstack" {
  name            = "bookstack-test"
  image_id        = "ec665219-cc8c-4df0-aa45-a886c6ea9701"
  flavor_name     = "a1-ram2-disk20-perf1"
  key_pair        = "ssh-alpine-02"
  security_groups = ["bookstack-test"]

  metadata = {
    application = "bookstack"
  }

  network {
    name = "ext-net1"
  }
}

Vous pouvez modifier les champs dans ce fichier pour l'adapter à vos besoins.

Vous avez simplement besoin de savoir que nous allons déployer 3 ressources :

  • Une paire de clé SSH
  • Un groupe dé sécurité (qui permet de gérer les règles de pare-feu de notre instance).
  • Notre instance

À noter que vous pouvez retrouver les IDs d'images et de flavors depuis l'interface graphique OpenStack en simulant la création d'une instance.

On peut désormais lancer notre instance :

terraform init
terraform plan
terraform apply

Une confirmation sera demandée, tapez yes.

Pour récupérer l'adresse IP de notre instance il nous faut d'abord lister les ressources créés :

terraform state list

Ici on obtient quelque chose de la sorte :

openstack_compute_instance_v2.bookstack
openstack_compute_keypair_v2.ssh-alpine-02
openstack_compute_secgroup_v2.bookstack-test

Ce qui nous intéresse, ce sont les informations de l'instance donc on peut taper cette commande :

terraform state show openstack_compute_instance_v2.bookstack

Vous devirez voir apparaître l'adresse IPv4 ce qui vous permettra de vous connecter grâce à votre clé SSH sur l'instance.

Modification de l'instance

Vous pouvez modifier la configuration de votre instance en éditant le fichier main.tf puis en faisant :

terraform plan

Vérifiez les configurations modifiées.

Puis vous pouvez appliquer :

terraform apply

Suppression de l'instance

Voici la commande qui vous permettra de supprimer votre instance :

terraform destroy

Une confirmation sera demandée, tapez yes.

Si un plantage arrive, relancez la commande, cela devrait fonctionner.