Lab 10 : Création d'OMI avec packer
Objectifs
Section intitulée « Objectifs »Dans cet atelier, vous allez apprendre comment créer des image OMI avec Packer
OUTSCALE Machine Image (OMI)
Section intitulée « OUTSCALE Machine Image (OMI) »Une Image Machine Outscale (OMI) est un modèle d’instance qui contient au moins un système d’exploitation (operating system - OS) et éventuellement d’autres applications logicielles et d’autres configurations comme des block device mappings.
Les OMI vous permettent de lancer des instances avec une configuration prédéfinie et les applications logicielles dont vous avez besoin, sans avoir à installer ces applications sur toutes les instances que vous lancez pour un même cas d’usage.
OMI et Packer
Section intitulée « OMI et Packer »Vous pouvez créer une Outscale Machine Image (OMI) à partir d’un snapshot ou d’une instance de machine virtuelle (VM) dans l’API Outscale.
Pour créer une OMI à partir d’une instance VM, vous pouvez suivre les instructions fournies dans la documentation publique Outscale. Vous pouvez également utiliser Packer pour créer des OMI Outscale. Packer est capable de créer des OMI Outscale en utilisant plusieurs stratégies de construction. 3DS OUTSCALE fournit un builder d’images pour Packer basé sur l’API OUTSCALE.
C’est quoi Packer ?
Section intitulée « C’est quoi Packer ? »Packer est un outil de création d’images de VM open source de Hashicorp. Il vous aide à automatiser le processus de création d’image de machine virtuelle sur le cloud et les environnements virtualisés sur site.
Pour simplifier, toutes les étapes manuelles que vous effectuez pour créer une image de machine virtuelle peuvent être automatisées grâce à un simple modèle de configuration Packer. Vous déclarez l’état de l’image VM dont vous avez besoin et Packer la construit pour vous.
Cas d’utilisation de Packer
Section intitulée « Cas d’utilisation de Packer »- Création d’image : Avec Packer, vous pouvez modéliser les configurations requises pour une image de VM qui peut être utilisée dans toute l’organisation.
- Mise à jour mensuelle des VM : Vous pouvez intégrer Packer dans votre pipeline mensuel de mise à jour d’image de VM.
- Infrastructure immuable : Si vous voulez créer une infrastructure immuable en utilisant des images de VM comme artefact déployable, vous pouvez utiliser Packer dans votre pipeline CI/CD.
Installation de Packer
Section intitulée « Installation de Packer »Packer peut être installé des manières suivantes :
- Utilisation de binaires pré-compilés disponibles pour toutes les plates-formes et architectures prises en charge.
- Installation à partir des sources.
- Installation depuis le gestionnaire de package de votre distribution.
https://developer.hashicorp.com/packer/tutorials/docker-get-started/get-started-install-cli
Dans cet atelier, nous installerons Packer depuis le gestionnaire de paquets Ubuntu/Debian.

Ajoutez la clé GPG d’HashiCorp.
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -Ajoutez le référentiel officiel HashiCorp Linux.
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"Mettez à jour et installez.
sudo apt-get update && sudo apt-get install packerVérifiez l’installation de Packer en exécutant la commande packer, vous
devriez voir la sortie comme indiqué ci-dessous.

La commande suivante active l’autocomplétion.
packer -autocomplete-installPour utiliser la fonctionnalité, il faut invoquer un nouveau shell.
Packer fournit les builders suivants pour les Images Machines OUTSCALE (OMI) :
- osc-bsu : Crée des OMI supportées par BSU et basées sur une OMI source. Pour en savoir plus, voir la documentation officielle du builder osc-bsu. Ce builder est le plus simple à utiliser. Il est recommandé de l’utiliser pour démarrer.
- osc-chroot : Crée des OMI supportées par BSU et basées sur une instance existante. Avec ce builder, vous devez monter vous-même le volume système et utiliser un environnement chroot. Pour en savoir plus, voir la documentation officielle du builder osc-chroot. Pour utiliser ce builder, une instance doit être en fonctionnement durant la construction de l’OMI
- osc-bsusurrogate : Crée de toutes pièces des OMI supportées par BSU. Pour en savoir plus, voir la documentation officielle du builder osc-bsusurrogate.
Création d’une OMI Outscale
Section intitulée « Création d’une OMI Outscale »Configurez votre environnement Outscale
Section intitulée « Configurez votre environnement Outscale »Configurez votre environnement Outscale en configurant vos informations d’identification Outscale.
export OUTSCALE_ACCESSKEYID=<ACCESS_KEY>export OUTSCALE_SECRETKEYID=<SECRET_KEY>export OUTSCALE_REGION=eu-west-2 # Outscale Regionexport OMI_NAME=<OMI_NAME>export SOURCE_OMI= ami-18045752 # A working Rocky Linux 9 imageVoici une description détaillée de chaque variable :
OUTSCALE_ACCESSKEYID: Cette variable contient la clé d’accès de votre compte Outscale. Il s’agit d’une valeur unique associée à votre compte qui est utilisé pour authentifier les requêtes API. Remplacez<ACCESS_KEY>par votre clé d’accès réelle.OUTSCALE_SECRETKEYID: Cette variable contient la clé secrète correspondante à la clé d’accès de votre compte Outscale. Il s’agit d’une valeur secrète utilisée pour signer les requêtes API et vérifier l’authenticité. Remplacez<SECRET_KEY>par votre clé secrète réelle.OUTSCALE_REGION: Cette variable spécifie la région Outscale à utiliser. Dans cet exemple, la valeur est définie sur eu-west-2, ce qui indique la région Paris. Les services Outscale sont répartis dans différentes régions géographiques et il est important de spécifier la région correcte pour accéder aux ressources appropriées.OMI_NAME: Cette variable contient le nom de l’image de machine virtuelle (OMI) que vous souhaitez créer. Remplacez<OMI_NAME>par le nom de l’OMI réel que vous souhaitez utiliser par exempleRockyLinux-9_Lab.SOURCE_OMI: Cette variable contient l’ID de l’OMI source, qui est une image de travail de Rocky Linux 9. L’OMI source est utilisée pour créer de nouvelles instances de machines virtuelles basées sur cette image.
L’ID ami-8a63833a spécifie une image spécifique de Rocky Linux 9. Vous pouvez
remplacer cette valeur par l’ID de l’OMI réelle que vous souhaitez utiliser.

Créez un fichier de configuration Packer
Section intitulée « Créez un fichier de configuration Packer »Créez un dossier nommé lab-packer
mkdir lab-packerDans le dossier, créez un fichier nommé omi.pkr.hcl et copiez le modèle HCL
suivant :
variable "access_key" { type = string default = "${env("OUTSCALE_ACCESSKEYID")}"}
variable "secret_key" { type = string default = "${env("OUTSCALE_SECRETKEYID")}"}
variable "omi_name" { type = string default = "${env("OMI_NAME")}"}
variable "omi" { type = string default = "${env("SOURCE_OMI")}"}
variable "region" { type = string default = "${env("OUTSCALE_REGION")}"}
source "outscale-bsu" "apache" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" omi_name = "${var.omi_name}" source_omi = "${var.omi}" ssh_interface = "public_ip" ssh_username = "outscale" vm_type = "tinav5.c1r1p3"}
build { sources =["source.outscale-bsu.apache"] provisioner "shell" { script = "./install-apache.sh" }}Le fichier omi.pkr.hcl définit le processus de construction de notre image OMI
en spécifiant les paramètres de la machine, les étapes de provisionnement, ainsi
que les scripts d’installation, et bien d’autres éléments.
- Bloc Variables : Dans cette section, nous définissons les variables de notre modèle, telles que les identifiants de compte Outscale, le type d’instance, la région, etc.
- Bloc Source : Packer fonctionne selon le concept de plugin builder. Pour chaque fournisseur de cloud, il existe des plugins spécifiques qui interagissent avec l’API du fournisseur pour créer les images. Dans ce bloc, nous spécifions les détails du plugin builder. Par exemple, si nous souhaitons créer une OMI Outscale, nous pouvons spécifier le plugin builder correspondant, tel que “outscale-bsu”. Nous devons fournir tous les paramètres obligatoires associés à ce plugin builder.
- Bloc Build : Dans ce bloc, nous déclarons tous les provisionneurs. Les provisionneurs permettent de personnaliser notre image en exécutant des scripts ou des commandes. Nous pouvons utiliser des provisionneurs Shell pour exécuter des scripts d’installation, ou des provisionneurs Ansible, Chef ou Puppet, etc.
Voici un exemple de script shell qui met à jour le référentiel yum et installe
le serveur httpd lors de la création de l’OMI : créer un nouveau fichier
install-httpd.sh avec le contenu suivant :
#!/bin/bash# Mise à jour du référentiel yumsudo yum update -y# Installation du serveur httpdsudo yum install httpd -y# Démarrage du service httpdsudo systemctl start httpd# Activation du démarrage automatique du service httpd au redémarrage du systèmesudo systemctl enable httpdVous pouvez ajouter ce script ou d’autres scripts shell personnalisés dans votre fichier de configuration Packer, sous la section des provisioners.
Installez le plugin Outscale pour Packer en utilisant la commande suivante.
packer plugins install github.com/outscale/outscaleValidons maintenant le modèle HCL Packer omi.pkr.hcl avant de le créer.
packer validate omi.pkr.hclVous pouvez ensuite créer l’image en utilisant la commande suivante :
packer build omi.pkr.hclLa commande ci-dessus s’exécute pendant près de 10 minutes.
Vous pouvez voir dans la sortie ci-dessus que Packer crée des ressources temporaires.
- Récupération de l’ID de l’OMI.
- Création de la paire de clés (keypair).
- Création du groupe de sécurité (security group).
- Création d’une machine virtuelle et association de la keypair et du security group à l’instance.
- Récupération de l’adresse IP publique.
- Provisionnement des scripts.

La sortie finale, Packer publie les artefacts de construction (ID OMI) et supprime tous les éléments temporaires qui ont été créés (paires de clés, instances, etc.), vous n’avez donc pas à vous en soucier.

Création d’un snapshot

Enregistrement de la nouvelle OMI

Suppression des éléments temporaires qui ont été créés (paires de clés, instances, SG, …). Message de succès de la construction de la nouvelle OMI avec son nouvel ID.
Challenge
Section intitulée « Challenge »Créez une nouvelle instance à partir de l’OMI créée précédemment.
- Sélectionnez l’OMI que vous avez créée auparavant à partir de la liste des images disponibles.
- Suivez les étapes du processus de lancement de l’instance en spécifiant les détails tels que le type d’instance, la taille du disque, les options de réseau, etc.
- Lorsque vous configurez le groupe de sécurité pour votre nouvelle instance,
assurez-vous d’ajouter les règles nécessaires pour vérifier que le serveur
Apachefonctionne correctement. Par exemple, vous devrez probablement autoriser le trafic entrant sur le port80(HTTP) pour permettre l’accès au serveurApache. - Terminez le processus de lancement de l’instance en suivant les instructions supplémentaires fournies par la console du Cockpit.
Une fois que vous avez créé votre nouvelle instance, vous devriez être en mesure de vérifier si le serveur
Apachefonctionne correctement en accédant à l’adresse IP publique de l’instance via un navigateur web.