Créer des serveurs sur Openstack OVH avecTerraform

Comme dirait mon vendeur de téléphone, « on ne va pas se mentir » : je déteste le Cloud. Ça vient de très loin – je me demande même si je faisais de l’informatique – d’une discussion avec une fraîche mouture de Science-Po de l’époque qui me vantait l’avantage du concept « magique » du cloud, et en quoi il était bon que « Mme Michu » n’y comprenne rien. Maintenant que je vois cela de l’intérieur, je dirais que mon sentiment de défiance est renforcé. 

Derrière le Cloud il y a du « barre metal », c’est à dire des serveurs physiques reliés les uns aux autres, très souvent sous Linux, avec une couche d’automatisation complexe qui permet d’offrir des services de plus en plus importants aux clients. Or il est une règle vieille comme le monde : pas d’indépendance sans connaissance… Durant le temps que vous chercherez la technique pour construire des serveurs sur l’infra d’Amazon ou Microsoft, d’autres le passeront à trouver des techniques plus poussées pour vous rendre toujours plus dépendant. Des services rendus propriétaires qui étrangement fonctionnent mieux que le standard opensource… par exemple des bases de données, de la redondance de charge… Le Cloud c’est avec modération, celui qui se sert du Cloud pour des applications critiques est fou, et dans le fond celui qui vend des services Cloud américains aux grands comptes français ne veut pas vraiment de l’indépendance économique française. C’est une situation qui devrait être accompagnée par le politique car dans les DSI, l’argent est bien souvent ROI… et la stratégie sur le long terme se fait rare. Si ces questions liées à la  « souveraineté numérique » vous intéressent, je vous invite à lire cet article : Souveraineté numérique : le choix inquiétant fait par la BPI pour l’hébergement des données.

Vous l’aurez compris, je vais prendre un exemple de Cloud bien français même si ce dernier s’étend maintenant dans le monde entier : celui d’OVH. En plus ils utilisent la techno Openstack, ce qui est parfait pour s’initier aux concepts de cloud public/privé. Il faut savoir que le Cloud n’est pas gratuit, 0.01€ vous seront facturés à la création de l’infra ci-dessous, plus si vous décidez de garder le serveur.

Prérequis

  • Avoir un compte chez OVH et souscrit à l’offre Cloud
  • Un utilisateur OpenStack
  • Les variables d’environnement OpenStack
  • Vos identifiants API et clés d’autorisations OVH
  • Une clé SSH
  • L’exécutable Terraform
  • Les clients OpenStack (nova, glance)

Vous trouverez les pages de tutoriel chez OHV et sur ce site. Normalement pas de soucis majeurs pour effectuer ces opérations, si vous avez néanmoins des problèmes, envoyez-moi un message et je détaillerai ce paragraphe des prérequis.

Utilisation de Terraform pour les instances Cloud public

On va faire très simple, trois fichiers. Un pour la connection à Openstack, un autre pour la création de la machine et son réseau, le dernier pour les variables :

$ tree
.
├── connections.tf
├── simple_instance.tf
└── variables.tf

connections.tf

Rien de bien compliqué ici :

provider "openstack" {
  auth_url = "https://auth.cloud.ovh.net/v3.0/"
  domain_name = "default"
  tenant_name = ""
  alias = "ovh"
  user_name   = "utilisateur_openstack" # vous possédez ces valeurs 
  password    = "le_mot_de_passe"       # si vous avez effectué les prérequis
}

simple_instance.tf

Voilà maintenant pour créer un serveur, j’utilise l’adresse IP de la machine d’administration afin de l’autoriser à accéder au serveur Cloud via SSH. Vous pouvez utiliser une autre technique que firewalld, il suffit de changer le script run.sh … Comme d’habitude, j’utilise des images cloud de Fedora Server (ici 32).

resource "openstack_compute_keypair_v2" "mattkey" {
  provider   = openstack.ovh
  name       = "mattkey" # A changer : c'est la clé que vous avez préalablement créée dans l'interface openstack OVH
  public_key = file("~/.ssh/id_rsa.pub") # C'est la clé que vous avez préalablement créée dans l'interface openstack OVH
}

data "openstack_networking_network_v2" "public_a" {
  name     = "Ext-Net"
  provider = openstack.ovh
}

resource "openstack_networking_port_v2" "public_a" {
  name           = "test_a_0"
  network_id     = data.openstack_networking_network_v2.public_a.id
  admin_state_up = "true"
  provider       = openstack.ovh
}

data "http" "myip" {
  url = "https://api.ipify.org"
}

data "template_file" "setup" {
  template = <<SETUP
#!/bin/bash
# install & configure firewall
dnf install -y firewalld
systemctl start firewalld
systemctl enable --now firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-source=${trimspace(data.http.myip.body)}/32 --zone=trusted
firewall-cmd --permanent --add-service=ssh --zone trusted
firewall-cmd --permanent --remove-service=ssh --zone=public
firewall-cmd --reload
SETUP
}

data "template_file" "userdata" {
  template = <<CLOUDCONFIG
#cloud-config
write_files:
  - path: /tmp/setup/run.sh
    permissions: '0755'
    content: |
      ${indent(6, data.template_file.setup.rendered)}
  - path: /etc/systemd/network/30-ens3.network
    permissions: '0644'
    content: |
      [Match]
      Name=ens3
      [Network]
      DHCP=ipv4
runcmd:
   - sh /tmp/setup/run.sh
CLOUDCONFIG
}

resource "openstack_compute_instance_v2" "fed-test" {
  region      = var.region
  name 	      = "test-fed-instance"
  provider    = openstack.ovh
  image_name  = "Fedora 32"
  flavor_name = "s1-2"
  user_data   = data.template_file.userdata.rendered
  key_pair    = openstack_compute_keypair_v2.mattkey.name

  network {
    access_network = true
    port           = openstack_networking_port_v2.public_a.id
  }
}

output "Server_IP" {
  value = openstack_networking_port_v2.public_a.all_fixed_ips
}

variables.tf

variable "region" {
  type    = string
  default = "UK1" # cette valeur dépend de votre compte OVH et du fichier openstack .rc
}

Et voilà le tour est joué, théoriquement, l’ip du serveur s’affiche à la fin de l’exécution du `terraform apply`, vous pouvez vous y connecter via SSH avec votre clé privée. Pour tout détruire : `terraform destroy`. Si vous vous souvenez de mes précédents articles, ici ou , vous pouvez maintenant provisionner la ou les machines avec Ansible.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

× 5 = 20

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.