Vue d’ensemble des applications de machine virtuelle

Les applications VM sont un type de ressource dans Azure Compute Gallery (anciennement Shared Image Gallery), qui simplifie la gestion, le partage et la distribution globale d’applications pour vos machines virtuelles.

Si vous pouvez créer une image d’une machine virtuelle avec des applications préinstallées, vous devez mettre à jour votre image chaque fois que vous modifiez l’application. En séparant l’installation de votre application de vos images de machine virtuelle, il n’est pas nécessaire de publier une nouvelle image pour chaque modification de ligne de code.

Les packages d’application offrent des avantages par rapport aux autres méthodes de déploiement et de packaging :

  • Les applications VM prennent en charge les stratégies Azure

  • Regroupement et contrôle de version de vos packages

  • Les applications de machine virtuelle peuvent être répliquées globalement pour être plus proches de votre infrastructure. vous n’avez donc pas besoin d’utiliser AzCopy ou d’autres mécanismes de copie de stockage pour copier les bits entre les régions Azure.

  • Partage avec d’autres utilisateurs via le contrôle d’accès en fonction du rôle (RBAC)

  • Prise en charge des machines virtuelles et des groupes identiques flexibles et uniformes

  • Si vous avez appliqué des règles de groupe de sécurité réseau (NSG) sur votre machine virtuelle ou votre groupe identique, le téléchargement des packages à partir d’un référentiel Internet peut ne pas être possible. De plus, avec les comptes de stockage, le téléchargement de packages sur des machines virtuelles verrouillées nécessite la configuration de liens privés.

  • Prise en charge des objets blobs de blocs : cette fonction permet de traiter efficacement les fichiers volumineux en les divisant en blocs plus petits et plus faciles à gérer. Idéal pour charger de grandes quantités de données, de diffusion en continu et de chargement en arrière-plan.

Que sont les packages d’application de machine virtuelle ?

Les packages d’application de machine virtuelle utilisent plusieurs types de ressources :

Ressource Description
Azure Compute Gallery Une galerie est un référentiel pour la gestion et le partage de packages d’applications. Les utilisateurs peuvent partager la ressource de galerie et toutes les ressources enfants sont partagées automatiquement. Le nom de la galerie doit être unique par abonnement. Par exemple, vous pouvez avoir une galerie pour stocker toutes vos images de système d’exploitation et une autre galerie pour stocker toutes vos applications de machine virtuelle.
Application de machine virtuelle Définition de votre application de machine virtuelle. Il s’agit d’une ressource logique qui stocke les métadonnées communes pour toutes les versions qu’elle contient. Par exemple, vous pouvez avoir une définition d’application pour Apache Tomcat et y avoir plusieurs versions.
Version d’application de machine virtuelle Ressource déployable. Vous pouvez répliquer globalement vos versions d’application de machine virtuelle vers des régions cibles plus proches de votre infrastructure de machine virtuelle. La version de l’application de machine virtuelle doit être répliquée dans une région avant d’être déployée sur une machine virtuelle de cette région.

Limites

  • Pas plus de 3 réplicas par région : Lors de la création d’une version d’application de machine virtuelle, le nombre maximal de réplicas par région est de trois.

  • Stockage avec accès public ou URI SAS avec privilège de lecture : le compte de stockage doit disposer d’un accès au niveau public ou utiliser un URI SAS avec privilège de lecture, car d’autres niveaux de restriction font échouer les déploiements.

  • Nouvelle tentative d’installations ayant échoué : Actuellement, la seule façon de réessayer une installation ayant échoué consiste à supprimer l’application du profil, puis à l’ajouter à nouveau.

  • Seulement 25 applications par machine virtuelle : au maximum, 25 applications peuvent être déployées sur une machine virtuelle à tout moment.

  • 2 Go de taille d’application : La taille de fichier maximale d’une version d’application est de 2 Go.

  • Aucune garantie au redémarrage dans votre script : Si votre script requiert un redémarrage, il est recommandé de placer cette application en dernier lors du déploiement. Alors que le code tente de gérer les redémarrages, il peut échouer.

  • Nécessite un agent de machine virtuelle : L’agent de machine virtuelle doit exister sur la machine virtuelle et être en mesure de recevoir des états d’objectif.

  • Plusieurs versions d’une même application sur la même machine virtuelle : Vous ne pouvez pas avoir plusieurs versions de la même application sur une machine virtuelle.

  • Opérations de déplacement non prises en charge : le déplacement de machines virtuelles avec des applications de machine virtuelle vers d’autres groupes de ressources n’est pas pris en charge pour l’instant.

Notes

Pour Azure Compute Gallery et les applications de machines virtuelles, les SAP du stockage peuvent être supprimés après la réplication.

Coût

Il n’y a pas de frais supplémentaires pour l’utilisation de packages d’application de machine virtuelle, mais vous serez facturé pour les ressources suivantes :

  • Coûts de stockage du stockage de chaque package et de tous les réplicas.
  • Coûts de sortie de réseau pour la réplication de la première version d’image de la région source vers les régions répliquées. Les réplicas suivants sont gérés au sein de la région, donc aucun frais supplémentaires ne sont prévus.

Pour plus d’informations sur la sortie du réseau, consultez Détails de la tarification de la bande passante.

Applications de machine virtuelle

La ressource d’application de machine virtuelle définit les éléments suivants sur votre application de machine virtuelle :

  • La galerie Azure Compute Gallery où l’application de machine virtuelle est stockée
  • Nom de l’application
  • Type de système d’exploitation pris en charge comme Linux ou Windows
  • Description de l’application de machine virtuelle

Versions d’application de machine virtuelle

Les versions d’applications de machine virtuelle sont des ressources déployables. Les versions sont définies avec les propriétés suivantes :

  • Numéro de version
  • Lien vers le fichier de package d’application dans un compte de stockage
  • Chaîne d’installation pour l’installation de l’application
  • Chaîne de suppression pour montrer comment supprimer correctement l’application
  • Nom du fichier de package à utiliser lors du téléchargement sur la machine virtuelle
  • Nom du fichier de configuration à utiliser pour configurer l’application sur la machine virtuelle
  • Lien vers le fichier de configuration de l’application de machine virtuelle, où vous pouvez inclure des fichiers de licence
  • Chaîne de mise à jour pour savoir comment mettre à jour l’application de machine virtuelle vers une version plus récente
  • Date de fin de vie. Les dates de fin de vie sont fournies à titre d’information. Vous êtes toujours en mesure de déployer les versions d’une application de machine virtuelle au-delà de la date de fin de vie.
  • Exclure de la plus récente. Vous pouvez empêcher l’utilisation d’une version comme version la plus récente de l’application.
  • Régions cibles pour la réplication
  • Nombre de réplicas par région

Télécharger le répertoire

Les emplacements de téléchargement du package d’application et des fichiers de configuration sont les suivants :

  • Linux : /var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>
  • Windows : C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>

Les commandes d’installation/mise à jour/suppression doivent être écrites en supposant que le package d’application et le fichier de configuration se trouvent dans le répertoire actuel.

Dénomination du fichier

Lorsque le fichier d’application est téléchargé sur la machine virtuelle, il est renommé « MyVmApp » (aucune extension). Cela est dû au fait que la machine virtuelle ne connaît pas le nom ou l’extension d’origine de votre package. Elle utilise le seul nom dont qu’elle dispose, qui est le nom de l’application elle-même, à savoir « MyVmApp ».

Voici quelques alternatives pour contourner ce problème :

Vous pouvez modifier votre script de manière à inclure une commande pour renommer le fichier avant l’exécution :

move .\\MyVmApp .\\MyApp.exe & MyApp.exe /S

Vous pouvez également utiliser la propriété packageFileName(et la propriété correspondante configFileName) pour nous indiquer ce qu’il faut renommer votre fichier. Par exemple, si vous le paramétrez sur « MyApp.exe », votre script d’installation doit uniquement être :

MyAppe.exe /S

Conseil

Si votre objet blob était initialement nommé « myApp.exe » au lieu de « myapp », le script ci-dessus aurait fonctionné sans définir la packageFileName propriété.

Interpréteur de commande

Les interpréteurs de commandes par défaut sont les suivants :

  • Linux : /bin/bash
  • Windows : cmd.exe

Il est possible d’utiliser un interpréteur différent, comme Chocolatey ou PowerShell, à condition qu’il soit installé sur la machine, en appelant l’exécutable et en lui passant la commande. Par exemple, pour que votre commande s’exécute dans PowerShell sur Windows au lieu de cmd, vous pouvez passer powershell.exe -Command '<powershell commmand>'

Manière dont les mises à jour sont gérées

Lorsque vous mettez à jour une version de l’application sur une machine virtuelle ou un groupe de machines virtuelles identiques (Virtual Machine Scale Sets), la commande de mise à jour que vous avez fournie pendant le déploiement est utilisée. Si la version mise à jour n’a pas de commande de mise à jour, la version actuelle est supprimée et la nouvelle version est installée.

Les commandes de mise à jour doivent être écrites dans l’attente de savoir s’il s’agit d’une mise à jour à partir d’une ancienne version de l’application de machine virtuelle.

Astuces pour la création d’applications de machine virtuelle sur Linux

Les applications tierces pour Linux peuvent être empaquetées de plusieurs façons. Étudions comment gérer la création de commandes d’installation pour les raisons les plus courantes.

fichiers .tar et.gz

Ces fichiers sont des d’archives compressées qui peuvent être extraites à un emplacement souhaité. Vérifiez les instructions d’installation du package d’origine au cas où elles doivent être extraites dans un emplacement spécifique. Si le fichier. tar.gz contient du code source, reportez-vous aux instructions relatives au package pour savoir comment procéder à l’installation à partir de la source.

Exemple de commande d’installation pour installer golang sur une machine Linux :

sudo tar -C /usr/local -xzf go_linux

Exemple de commande de suppression :

sudo rm -rf /usr/local/go

Création de packages d’application à l’aide de .deb, .rpm, et d’autres packages spécifiques à la plateforme pour les machines virtuelles avec accès Internet restreint

Vous pouvez télécharger des packages individuels pour des gestionnaires de packages spécifiques à la plateforme, mais ils ne contiennent généralement pas toutes les dépendances. Pour ces fichiers, vous devez également inclure toutes les dépendances dans le package d’application, ou faire en sorte que le gestionnaire de package système télécharge les dépendances via les référentiels disponibles pour la machine virtuelle. Si vous utilisez une machine virtuelle avec accès limité à Internet, vous devez empaqueter toutes les dépendances vous-même.

La mesure des dépendances peut être un peu délicate. Il existe des outils tiers qui peuvent vous montrer l’ensemble de l’arborescence des dépendances.

Sur Ubuntu, vous pouvez exécuter sudo apt show <package_name> | grep Depends pour afficher tous les packages qui seront installés pour la commande sudo apt-get install <packge_name>. Vous pouvez ensuite utiliser cette sortie pour télécharger tous les fichiers .deb afin de créer une archive utilisable en tant que package d’application.

  1. Par exemple, pour créer un package d’application de machine virtuelle afin d’installer PowerShell pour Ubuntu, exécutez d’abord les commandes suivantes pour activer le dépôt à partir duquel PowerShell peut être téléchargé et identifier les dépendances de package sur une nouvelle machine virtuelle Ubuntu.
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
sudo rm -rf packages-microsoft-prod.deb
sudo apt update
sudo apt show powershell | grep Depends
  1. Vérifiez la sortie de la ligne Depends qui liste les paquets suivants :
Depends: libc6, libgcc1, libgssapi-krb5-2, libstdc++6, zlib1g, libicu72|libicu71|libicu70|libicu69|libicu68|libicu67|libicu66|libicu65|libicu63|libicu60|libicu57|libicu55|libicu52, libssl3|libssl1.1|libssl1.0.2|libssl1.
  1. Téléchargez chacun de ces fichiers à l’aide de sudo apt-get download <package_name> et créez une archive compressée tar avec tous les fichiers.
  • Ubuntu 18.04 :
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu60
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 20.04 :
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu66
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 22.04 :
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl3
sudo apt-get download libicu70
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  1. Cette archive tar est le fichier de package d’application.
  • Dans ce cas, la commande d’installation est :
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
  • Et la commande de suppression est :
sudo apt remove powershell

Utilisez sudo apt autoremove plutôt que de tenter explicitement de supprimer toutes les dépendances. Vous avez peut-être installé d’autres applications avec des dépendances qui se chevauchent, et dans ce cas, une commande de suppression explicite échouerait.

Si vous ne souhaitez pas résoudre les dépendances vous-même et que apt est en mesure de se connecter aux référentiels, vous pouvez installer une application avec un seul fichier .deb et laisser apt gérer les dépendances.

Exemple de commande d’installation :

dpkg -i <package_name> || apt --fix-broken install -y

Astuces pour la création d’applications de machine virtuelle sur Windows

La plupart des applications tierces dans Windows sont disponibles en tant que programmes d’installation .exe ou .msi. Certaines sont également disponibles sous forme d’extraction et d’exécution de fichiers zip. Examinons les meilleures pratiques pour chacune d’entre elles.

Programme d'installation .exe

Les exécutables du programme d’installation lancent généralement une interface utilisateur (IU) et requièrent que quelqu’un sélectionne dans l’interface utilisateur. Si le programme d’installation prend en charge un paramètre de mode silencieux, il doit être inclus dans votre chaîne d’installation.

Cmd.exe s’attend également à ce que les fichiers exécutables aient l’extension .exe. Vous devez donc renommer le fichier pour lui attribuer l’extension .exe.

Si je veux créer un package d’application de machine virtuelle pour myApp.exe, qui est fourni comme fichier exécutable, mon application de machine virtuelle serait appelée « myApp ». J’écris donc la commande en supposant que le package d’application se trouve dans le répertoire actif :

"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"

Si le fichier exécutable du programme d’installation ne prend pas en charge un paramètre de désinstallation, vous pouvez parfois rechercher le registre sur un ordinateur de test pour savoir où se trouve le programme de désinstallation.

Dans le registre, la chaîne de désinstallation est stockée dans Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString. J’utilise donc le contenu comme commande de suppression :

'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'

Programme d’installation .msi

Pour l’exécution de la ligne de commande des programmes d’installation .msi, les commandes permettant d’installer ou de supprimer une application doivent utiliser msiexec. En général, msiexec s’exécute en tant que processus distinct et cmd n’attend pas qu’il se termine, ce qui peut entraîner des problèmes lors de l’installation de plusieurs applications de machine virtuelle. La commande start peut être utilisée avec msiexec pour s’assurer que l’installation se termine avant que la commande ne retourne. Par exemple :

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log

Exemple de commande de suppression :

start /wait %windir%\\system32\\msiexec.exe /x $appname /quiet /forcerestart /log ${appname}_uninstall.log

Fichiers compressés

Pour les fichiers .zip ou d’autres fichiers compressés, renommez et décompressez le contenu du package d’application vers la destination souhaitée.

Exemple de commande d’installation :

rename myapp myapp.zip && mkdir C:\myapp && powershell.exe -Command "Expand-Archive -path myapp.zip -destinationpath C:\myapp"

Exemple de commande de suppression :

rmdir /S /Q C:\\myapp

Traiter l’échec en tant qu’échec de déploiement

L’extension de l’application de machine virtuelle retourne toujours un succès, qu’une application de machine virtuelle ait échoué lors de l’installation, de la mise à jour ou de la suppression. L’extension d’application de machine virtuelle signalera uniquement l’état de l’extension comme un échec en cas de problème avec l’extension ou l’infrastructure sous-jacente. Ce comportement est déclenché par l’indicateur « Traiter l’échec en tant qu’échec de déploiement », qui est défini sur $false par défaut et peut être changé en $true. L’indicateur d’échec peut être configuré dans PowerShell ou l’interface CLI.

Résolution des problèmes liés aux applications de machine virtuelle

Pour savoir si une application de machine virtuelle particulière a été correctement ajoutée à l’instance de machine virtuelle, vérifiez le message de l’extension VMApplication.

Pour en savoir plus sur l’obtention de l’état des extensions de machine virtuelle, consultez Extensions et fonctionnalités de machine virtuelle pour Linux et Extensions et fonctionnalités de machine virtuelle pour Windows.

Pour connaître l’état des extensions de machine virtuelle, utilisez Get-AzVM :

Get-AzVM -name <VM name> -ResourceGroupName <resource group name> -Status | convertto-json -Depth 10

Pour connaître l’état des extensions de groupe de machines virtuelles identiques, utilisez Get-AzVMSS :

$result = Get-AzVmssVM -ResourceGroupName $rgName -VMScaleSetName $vmssName -InstanceView
$resultSummary  = New-Object System.Collections.ArrayList
$result | ForEach-Object {
    $res = @{ instanceId = $_.InstanceId; vmappStatus = $_.InstanceView.Extensions | Where-Object {$_.Name -eq "VMAppExtension"}}
    $resultSummary.Add($res) | Out-Null
}
$resultSummary | convertto-json -depth 5

Messages d’erreur

Message Description
La version actuelle {name} de l'application de machine virtuelle a été dépréciée le {date}. Vous avez essayé de déployer une version de l’application de machine virtuelle qui a déjà été dépréciée. Essayez d’utiliser latest au lieu de spécifier une version spécifique.
La version actuelle {name} de l'application de machine virtuelle prend en charge le système d'exploitation {OS}, alors que le système d'exploitation de OSDisk actuel est {OS}. Vous avez essayé de déployer une application Linux sur une instance Windows, ou vice versa.
Le nombre maximal d’applications de machine virtuelle (max=5, current={count}) a été dépassé. Utilisez moins d’applications et relancez la requête. Actuellement, nous ne prenons en charge que cinq applications de machine virtuelle par machine virtuelle ou groupe identique.
Plus d'une application de machine virtuelle a été spécifiée avec le même packageReferenceId. La même application a été spécifiée plusieurs fois.
L’abonnement n’est pas autorisé à accéder à cette image. L’abonnement n’a pas accès à cette version de l’application.
Le compte de stockage n’existe pas dans les arguments. Il n'existe aucune application pour cet abonnement.
L’image de plateforme {image} n’est pas disponible. Vérifiez que tous les champs du profil de stockage sont corrects. Pour plus de détails sur les informations de profil de stockage, consultez https://aka.ms/storageprofile. L’application n’existe pas.
L’image de galerie {image} n’est pas disponible dans la région {region}. Contactez le propriétaire de l’image à répliquer dans cette région, ou modifiez la région demandée. La version de l’application de la galerie existe, mais elle n’a pas été répliquée dans cette région.
La signature d’accès partagé n’est pas valide pour l’URI source {uri}. Une erreur Forbidden a été reçue à partir du stockage lors de la tentative de récupération d’informations sur l’URL (mediaLink ou defaultConfigurationLink).
L’objet blob référencé par l’URI source {uri} n’existe pas. L’objet blob fourni pour les propriétés mediaLink ou defaultConfigurationLink n’existe pas.
Impossible d’accéder à l’URL de la version de l’application de la galerie {url} en raison de l’erreur suivante : nom distant introuvable. Assurez-vous que l’objet blob existe et qu’il est accessible publiquement ou qu’il s’agit d’une URL SAS avec des privilèges de lecture. Le cas le plus probable est qu’un URI SAS avec des privilèges de lecture n’a pas été fourni.
Impossible d’accéder à l’URL de la version de l’application de la galerie {url} en raison de l’erreur suivante : {error description}. Assurez-vous que l’objet blob existe et qu’il est accessible publiquement ou qu’il s’agit d’une URL SAS avec des privilèges de lecture. Un problème est survenu au niveau de l’objet blob de stockage fourni. La description de l’erreur fournit plus d’informations.
L’opération {operationName} n’est pas autorisée sur {application}, car elle est marquée pour suppression. Vous pouvez uniquement réessayer l’opération de suppression (ou attendre la fin de l’opération en cours). Tentative de mise à jour d’une application en cours de suppression.
La valeur {value} du paramètre « galleryApplicationVersion.properties.publishingProfile.replicaCount » est hors limites. La valeur doit être comprise entre 1 et 3 inclus. Seulement entre 1 et 3 réplicas sont autorisés pour les versions de l’application de machine virtuelle.
La modification de la propriété « galleryApplicationVersion.properties.publishingProfile.manageActions.install » n’est pas autorisée. (ou mise à jour, suppression) Il n’est pas possible de modifier les actions de gestion sur un VmApplication existant. Une nouvelle version de VmApplication doit être créée.
La modification de la propriété « galleryApplicationVersion.properties.publishingProfile.settings.packageFileNamel » n’est pas autorisée. (ou configFileName) Il n’est pas possible de modifier les paramètres, tels que le nom du fichier de package ou le nom du fichier de configuration. Une nouvelle version de VmApplication doit être créée.
L’objet blob référencé par l’URI source {uri} est trop grand : taille = {size}. La taille maximale d’objet blob autorisée est de 1 Go. La taille maximale d’un objet blob référencé par mediaLink ou defaultConfigurationLink est actuellement de 1 Go.
L’objet blob référencé par l’URI source {uri} est vide. Un objet blob vide a été référencé.
Le type d’objet blob {type} n’est pas pris en charge pour l’opération {operation}. Seuls les objets blob de pages et les objets blob de blocs sont pris en charge. VmApplications prend uniquement en charge les objets blob de pages et les objets blob de blocs.
La signature d’accès partagé n’est pas valide pour l’URI source {uri}. L’URI SAS fourni pour mediaLink ou defaultConfigurationLink n’est pas un URI SAS valide.
Impossible de spécifier {region} dans les régions cibles, car la fonctionnalité requise {featureName} est manquante dans l’abonnement. Inscrivez votre abonnement avec la fonctionnalité requise ou supprimez la région de la liste des régions cibles. Pour utiliser VmApplications dans certaines régions restreintes, l’indicateur de fonctionnalité doit être inscrit pour cet abonnement.
Les régions {regions} de profil de publication de version d’image de galerie doivent contenir l’emplacement {location} de version d’image. La liste des régions pour la réplication doit contenir l’emplacement de la version de l’application.
Les régions en double ne sont pas autorisées dans les régions de publication cibles. Les régions de publication peuvent ne pas avoir de doublons.
Les ressources de la version de l’application de la galerie ne prennent actuellement pas en charge le chiffrement. La propriété de chiffrement pour les régions cibles n’est pas prise en charge pour les applications de machine virtuelle
Le nom de l’entité ne correspond pas au nom figurant dans l’URL de la demande. La version d’application de la galerie spécifiée dans l’URL de la demande ne correspond pas à celle spécifiée dans le corps de la demande.
Le nom de la version de l’application de la galerie n’est pas valide. Le nom de la version de l’application doit suivre Major(int32). Minor(int32). Format Patch(int32), où int est compris entre 0 et 2 147 483 647 (inclus). par exemple, 1.0.0, 2018.12.1, etc. La version de l’application de la galerie doit respecter le format spécifié.

Étapes suivantes