Aller au contenu

Lab 10 : Création d'OMI avec packer

Dans cet atelier, vous allez apprendre comment créer des image OMI avec Packer

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.

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.

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.

  • 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.

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.

packer download page

Ajoutez la clé GPG d’HashiCorp.

Terminal window
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -

Ajoutez le référentiel officiel HashiCorp Linux.

Terminal window
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"

Mettez à jour et installez.

Terminal window
sudo apt-get update && sudo apt-get install packer

Vérifiez l’installation de Packer en exécutant la commande packer, vous devriez voir la sortie comme indiqué ci-dessous.

packer version output

La commande suivante active l’autocomplétion.

Terminal window
packer -autocomplete-install

Pour 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.

Configurez votre environnement Outscale en configurant vos informations d’identification Outscale.

Terminal window
export OUTSCALE_ACCESSKEYID=<ACCESS_KEY>
export OUTSCALE_SECRETKEYID=<SECRET_KEY>
export OUTSCALE_REGION=eu-west-2 # Outscale Region
export OMI_NAME=<OMI_NAME>
export SOURCE_OMI= ami-18045752 # A working Rocky Linux 9 image

Voici 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 exemple RockyLinux-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.

OMI list

Créez un dossier nommé lab-packer

Terminal window
mkdir lab-packer

Dans 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 yum
sudo yum update -y
# Installation du serveur httpd
sudo yum install httpd -y
# Démarrage du service httpd
sudo systemctl start httpd
# Activation du démarrage automatique du service httpd au redémarrage du système
sudo systemctl enable httpd

Vous 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.

Terminal window
packer plugins install github.com/outscale/outscale

Validons maintenant le modèle HCL Packer omi.pkr.hcl avant de le créer.

Terminal window
packer validate omi.pkr.hcl

Vous pouvez ensuite créer l’image en utilisant la commande suivante :

Terminal window
packer build omi.pkr.hcl

La 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.

  1. Récupération de l’ID de l’OMI.
  2. Création de la paire de clés (keypair).
  3. Création du groupe de sécurité (security group).
  4. Création d’une machine virtuelle et association de la keypair et du security group à l’instance.
  5. Récupération de l’adresse IP publique.
  6. Provisionnement des scripts.

packer build output

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.

packer build summarize

Création d’un snapshot

create snapshot

Enregistrement de la nouvelle OMI

New OMI available

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.

Créez une nouvelle instance à partir de l’OMI créée précédemment.

  1. Sélectionnez l’OMI que vous avez créée auparavant à partir de la liste des images disponibles.
  2. 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.
  3. 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 Apache fonctionne correctement. Par exemple, vous devrez probablement autoriser le trafic entrant sur le port 80 (HTTP) pour permettre l’accès au serveur Apache.
  4. 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 Apache fonctionne correctement en accédant à l’adresse IP publique de l’instance via un navigateur web.