Cas pratiques

Créer et piloter une VM Ubuntu sur AWS

Un environnement à un hôte, sans pack applicatif : construire l'AMI, démarrer l'instance EC2, y ouvrir un shell, puis la détruire.

Ce tutoriel crée un environnement xbee à un seul hôte — une instance EC2 ubuntu:24.04, sans aucun pack applicatif — et la pilote de bout en bout : construction de l’image, démarrage, connexion shell, arrêt, destruction. Contrairement aux tutoriels Pack Node.js et Pack Maven, qui packageaient un outil dans un container Docker, l’hôte ici est une vraie machine virtuelle chez un provider cloud — voir Providers & volumes.

Prérequis : les identifiants AWS

Le binaire du provider aws s’appuie sur le mécanisme standard d’identification du SDK AWS — le même que la CLI aws officielle. Le plus simple est de le configurer une fois pour toutes :

aws configure

qui renseigne ~/.aws/credentials (clé d’accès, clé secrète) et ~/.aws/config (région par défaut). Une fois en place, aucune section xbee-secret.yaml propre à xbee n’est nécessaire pour l’authentification AWS elle-même.

Créer l’environnement

mkdir vm-aws
cd vm-aws
xbee new env -p aws -s ubuntu:24.04

Le xbee-env.yaml généré

schema-version: "1.0"
provider:
  name: aws
default:
  host:
    system: ubuntu:24.04
    net: xbee-net

host: a

Selon la configuration locale (~/xbee.yml), default.host.provider peut déjà contenir des valeurs par défaut pour AWS, ou rester absent. Dans tous les cas, assurez-vous d’obtenir les champs suivants, propres à AWS — voir Providers & volumes :

default:
  host:
    system: ubuntu:24.04
    net: xbee-net
    provider:
      region: eu-west-3
      availabilityZone: eu-west-3a
      instanceType: t3a.medium
      size: 20

host: a
  • region / availabilityZone situent l’instance ; instanceType en choisit le gabarit ; size est la taille (en Go) du volume racine.
  • host: a déclare un unique hôte, sans pack : rien d’autre que le système ubuntu:24.04 n’y est installé. Un pack applicatif s’ajouterait comme dans Utiliser le pack dans un environnement, via host.a.pack.

Construire l’image (AMI)

xbee pack

Avant de démarrer quoi que ce soit, xbee a besoin d’une AMI taguée pour ce système — elle n’existe pas encore au premier lancement. xbee pack, exécutée depuis ce répertoire d’environnement (et non un répertoire de pack), démarre une instance EC2 temporaire, y installe le système requis, capture le résultat en AMI, puis détruit cette instance temporaire — elle n’a servi qu’à builder l’image, et n’est jamais facturée au-delà de ce build. Cette AMI est ensuite réutilisée par tous les futurs xbee up, tant que la définition du système ne change pas.

xbee up refuse de démarrer si cette étape n’a pas été faite : xbee l’indique explicitement (« You MUST run command: xbee pack first »).

Démarrer la VM

xbee up

démarre l’instance EC2 à partir de l’AMI construite à l’étape précédente, attend qu’elle soit joignable en SSH, puis exécute les directives up/configure de l’environnement — aucune ici, l’environnement n’en déclare pas.

Piloter la VM

xbee enter a

ouvre un shell SSH dans l’instance — a est la clé de l’hôte déclarée dans xbee-env.yaml. Avec un seul hôte, le nom peut être omis :

xbee enter

Depuis ce shell, l’instance se pilote comme n’importe quelle machine Ubuntu :

lsb_release -a

Arrêter puis détruire la VM

xbee down

éteint l’instance (arrêt propre du système), sans la supprimer : elle peut être redémarrée par un nouvel xbee up, en repartant de la même AMI. Pour la supprimer réellement (l’instance EC2 elle-même — pas l’AMI, réutilisable par un futur xbee up sur ce même environnement) :

xbee delete

demande confirmation avant de détruire l’instance ; --force/-f la saute.

Pour aller plus loin

  • Ajouter un pack applicatif à cet hôte (host.a.pack), exactement comme dans Utiliser le pack dans un environnement — la seule différence avec un environnement Docker est le provider déclaré en tête de fichier.
  • Déclarer un volume de données (volume: racine + host.a.volume) — voir Environnements.
  • Toutes les propriétés reconnues dans un xbee-env.yaml — voir xbee-env.yaml.
  • Répéter l’hôte (count) pour plusieurs instances identiques — voir Environnements.