Déployer un service Worker sur Azure

Dans cet article, vous allez apprendre à déployer un service Worker .NET sur Azure. Votre Worker s’exécutant en tant que Azure Container Instance (ACI) à partir d’Azure Container Registry (ACR) peut jouer le rôle de microservice dans le cloud. Il existe de nombreux cas d’usage pour les services de longue durée et le service Worker existe pour cette raison.

Dans ce tutoriel, vous allez apprendre à :

  • Créez un service Worker.
  • Créez une ressource de registre de conteneurs.
  • Envoyez une image au registre de conteneurs.
  • Déployez en tant qu’instance de conteneur.
  • Vérifiez la fonctionnalité de service Worker.

Conseil

Tout le code source d’exemple « Workers dans .NET » peut être téléchargé dans l’Explorateur d’exemples. Pour plus d’informations, consultez Parcourir les exemples de code : Workers dans .NET.

Prérequis

Création d'un projet

Pour créer un projet de service Worker avec Visual Studio, sélectionnez Fichier>Nouveau>Projet.... Dans la boîte de dialogue Créer un projet, recherchez « Worker Service », puis sélectionnez Modèle Worker Service. Entrez le nom de projet souhaité, sélectionnez un emplacement approprié, puis sélectionnez Suivant. Dans la page Informations supplémentaires, pour Infrastructure cible, sélectionnez .NET 5.0, puis cochez Activer Docker afin d’activer la prise en charge de Docker. Sélectionnez le système d’exploitation Docker souhaité.

Pour créer un nouveau projet Worker Service avec Visual Studio Code, vous pouvez exécuter des commandes CLI .NET à partir du terminal intégré. Pour plus d’informations, consultez Visual Studio Code : Terminal intégré.

Ouvrez le terminal intégré, puis exécutez la commande dotnet new, puis remplacez <Project.Name> par votre nom de projet souhaité.

dotnet new worker --name <Project.Name>

Pour plus d’informations sur la commande de projet nouveau de service Worker de l’interface CLI .NET, consultez dotnet new worker.

Pour créer un projet de service Worker avec l’interface CLI .NET, ouvrez votre terminal favori dans un répertoire de travail. Exécutez la commande dotnet new et remplacez le <Project.Name> par le nom de projet souhaité.

dotnet new worker --name <Project.Name>

Pour plus d’informations sur la commande de projet nouveau de service Worker de l’interface CLI .NET, consultez dotnet new worker.

Générez l’application pour vous assurer qu’elle restaure les packages dépendants et compile sans erreur.

Pour générer l’application à partir de Visual Studio, sélectionnez F6 ou sélectionnez l’option de menu Générer>Générer la solution.

Pour générer l’application à partir de Visual Studio Code, ouvrez la fenêtre de terminal intégrée et exécutez la commande dotnet build à partir du répertoire de travail.

dotnet build

Pour plus d’informations sur la commande de build de l’interface CLI .NET, consultez dotnet build.

Pour générer l’application à partir de l’interface CLI .NET, exécutez la commande dotnet build à partir du répertoire de travail.

dotnet build <path/to/project.csproj>

Spécifiez votre valeur <path/to/project.csproj>, correspondant au chemin d’accès au fichier projet à générer. Pour plus d’informations sur la commande de build de l’interface CLI .NET, consultez dotnet build.

Ajouter la prise en charge Docker

Si vous avez bien coché la case Activer Docker lors de la création d’un projet Worker, passez à l’étape Générer l’image Docker.

Si vous n’avez pas sélectionné cette option, vous pouvez toujours l’ajouter maintenant. Dans Visual Studio, cliquez avec le bouton droit sur le nœud du projet dans l’Explorateur de solutions, puis sélectionnez Ajouter>Support Docker. Vous serez invité à sélectionner un système d'exploitation cible ; sélectionnez OK avec la sélection du système d'exploitation par défaut.

Docker File Options

Dans Visual Studio Code, vous devez installer l’extension Docker et l’extension de compte Azure. Ouvrez la palette de commandes, puis sélectionnez l’option Docker : Ajouter des fichiers Docker à l’espace de travail. Si vous êtes invité à Sélectionner la plateforme d’applications, choisissez Console .NET Core. Si vous êtes invité à sélectionner un projet, choisissez le projet Service Worker que vous avez créé. Lorsque vous êtes invité à Sélectionner un système d’exploitation, choisissez le premier système d’exploitation répertorié. Lorsque vous êtes invité à inclure ou non des fichiers Docker Compose facultatifs, sélectionnez Non.

La prise en charge de Docker nécessite un fichier Dockerfile. Ce fichier est un ensemble d’instructions complètes pour générer votre service Worker .NET en tant qu’image Docker. Le fichier Dockerfile est un fichier sans extension de fichier. Le code suivant est un exemple de Dockerfile et doit exister dans le répertoire racine du fichier projet.

Avec l’interface CLI, le fichier Dockerfile n’est pas créé pour vous. Copiez son contenu dans un nouveau fichier nommé Dockerfile dans le répertoire racine du projet.

FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
WORKDIR /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-dotnet-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["App.CloudService.csproj", "./"]
RUN dotnet restore "App.CloudService.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "App.CloudService.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "App.CloudService.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "App.CloudService.dll"]

Remarque

Vous devez mettre à jour les différentes lignes du fichier Dockerfile qui référencent *App.CloudService pour y indiquer le nom de votre projet.

Pour plus d’informations sur les images .NET officielles, consultez Docker Hub : runtime .NET et Docker Hub : SDK .NET.

Créer l’image Docker

Pour générer l’image Docker, il est nécessaire que le moteur Docker s’exécute.

Important

Pour éviter les erreurs liées au partage de volume lorsque vous utilisez Docker Desktop et Visual Studio, assurez-vous que cette fonctionnalité est activée.

  1. Dans l’écran Paramètres de Docker Desktop, sélectionnez Lecteurs partagés.
  2. Sélectionnez le ou les lecteurs contenant vos fichiers projet.

Pour plus d’informations, consultez Résoudre les problèmes de développement Visual Studio avec Docker.

Cliquez avec le bouton droit sur le fichier Dockerfile dans l’Explorateur de solutions, puis sélectionnez Générer une image Docker. La fenêtre Sortie qui s’affiche indique la progression de la commande docker build.

Cliquez avec le bouton droit sur le fichier Dockerfile dans l’Explorateur, puis sélectionnezGénérer une image . Lorsque vous êtes invité à Étiqueter l’image en tant que, entrez appcloudservice:latest. Le terminal de sortie Tâche Docker s’affiche, signalant la progression de la commande de génération Docker.

Notes

Si vous n’êtes pas invité à étiqueter l’image, il est possible que Visual Studio Code s’appuie sur un fichier tasks.json existant. Si la balise utilisée n’est pas souhaitable, vous pouvez la modifier en mettant à jour la valeur dockerBuild/tag de l’élément de configuration docker-build dans le tableau tasks. Considérez l’exemple de section de configuration suivant :

{
  "type": "docker-build",
  "label": "docker-build: release",
  "dependsOn": [
    "build"
  ],
  "dockerBuild": {
    "tag": "appcloudservice:latest",
    "dockerfile": "${workspaceFolder}/cloud-service/Dockerfile",
    "context": "${workspaceFolder}",
    "pull": true
  },
  "netCore": {
    "appProject": "${workspaceFolder}/cloud-service/App.CloudService.csproj"
  }
}

Ouvrez une fenêtre de terminal dans le répertoire racine du fichier Dockerfile, puis exécutez la commande Docker suivante :

docker build -t appcloudservice:latest -f Dockerfile .

En s’exécutant, la commande docker build traite chaque ligne du fichier Dockerfile en tant qu’étape d’instruction. Cette commande génère l’image et crée un référentiel local nommé appcloudservice qui pointe vers l’image.

Conseil

Le fichier Dockerfile généré diffère selon les environnements de développement. Par exemple, si vous Ajoutez la prise en charge de Docker à partir de Visual Studio, vous pouvez rencontrer des problèmes si vous tentez de créer l'image Docker à partir de Visual Studio Code, car les étapes du Dockerfile varient. Il est préférable de choisir un seul environnement de développement et de l'utiliser tout au long de ce didacticiel.

Créer un registre de conteneurs

Une ressource Azure Container Registry (ACR) vous permet de générer, stocker et gérer des images et artefacts conteneur dans un registre privé. Pour créer un registre de conteneurs, vous devez créer une nouvelle ressource dans le Portail Microsoft Azure.

  1. Sélectionnez l’abonnement et le groupe de ressources correspondant (ou créez-en un).
  2. Entrez un nom de registre.
  3. Sélectionnez un emplacement.
  4. Sélectionnez une référence SKU appropriée, par exemple De base.
  5. Sélectionnez Revoir + créer.
  6. Une fois la Validation réussie, sélectionnez Créer.

Important

Pour utiliser ce registre de conteneurs lors de la création d’une instance de conteneur, vous devez activer l’Utilisateur administrateur. Sélectionnez Clés d’accès et activez Utilisateur administrateur.

Une ressource Azure Container Registry (ACR) vous permet de générer, stocker et gérer des images et artefacts conteneur dans un registre privé. Ouvrez une fenêtre de terminal dans le répertoire racine du fichier Dockerfile, puis exécutez la commande Azure CLI suivante :

Important

Pour interagir avec les ressources Azure à partir d’Azure CLI, vous devez être authentifié pour votre session de terminal. Pour vous authentifier, utilisez la commande az login :

az login

Une fois connecté, utilisez la commande az account set pour spécifier votre abonnement lorsque vous avez plusieurs abonnements et qu’aucun abonnement par défaut n’est défini.

az account set --subscription <subscription name or id>

Après vous être connecté à Azure CLI, votre session peut interagir avec les ressources en conséquence.

Si vous n'avez pas encore de groupe de ressources auquel vous souhaitez associer votre service de travail, créez-en un à l'aide de la commande az group create :

az group create -n <resource group> -l <location>

Indiquez le nom <resource group> et l’emplacement <location>. Pour créer un registre de conteneurs, appelez la commande az acr create.

az acr create -n <registry name> -g <resource group> --sku <sku> --admin-enabled true

Remplacez les espaces réservés par vos propres valeurs appropriées :

  • <registry name> : nom du registre.
  • <resource group> : le nom du groupe de ressources que vous avez utilisé.
  • <sku> : valeurs acceptées, De base, Classique, Premium ou Standard.

La commande précédente :

  • Crée un registre Azure Container Registry, en fonction d’un nom de registre, dans le groupe de ressources spécifié.
  • Activé un utilisateur administrateur : requis pour Azure Container Instances.

Pour plus d’informations, consultez Démarrage rapide : Créer un registre de conteneurs Azure.

Envoyer l’image au registre de conteneurs

Alors que l’image Docker .NET est générée et la ressource de registre de conteneurs créée, vous pouvez désormais envoyer (push) l’image au registre de conteneurs.

Cliquez avec le bouton droit sur le projet dans l’Explorateur de solutions et sélectionnez Publier. La boîte de dialogue Publier s’affiche. Pour la cible, sélectionnez Azure, puis Suivant.

Visual Studio: Publish dialog - select Azure

Pour Cible spécifique, sélectionnez Azure Container Registry, puis Suivant.

Visual Studio: Publish dialog - select container registry

Ensuite, pour Container Registry, sélectionnez le nom de l’abonnement que vous avez utilisé pour créer la ressource ACR. Dans la zone de sélection Registres de conteneurs, sélectionnez le registre de conteneurs que vous avez créé, puis sélectionnez Terminer.

Visual Studio: Publish dialog - select container registry details

Cela crée un profil de publication, qui peut permet de publier l’image dans le registre de conteneurs. Sélectionnez le bouton Publier pour envoyer l’image au registre de conteneurs, la fenêtre Sortie signale la progression de la publication. Une fois l’opération terminée, un message « Publication réussie » apparaît.

Sélectionnez Docker dans la Barre d’activité de Visual Studio Code. Développez le panneau de l’arborescence IMAGES, puis développez le nœud image appcloudservice et cliquez avec le bouton droit sur la balise latest.

Visual Studio Code: Docker - push image

La fenêtre du terminal intégré signale la progression de la commande docker push au registre de conteneurs.

Pour envoyer une image au registre de conteneurs, vous devez d’abord vous connecter à celui-ci :

az acr login -n <registry name>

La commande az acr login se connecte à un registre de conteneurs via Docker CLI. Pour envoyer l’image au registre de conteneurs, utilisez la commande az acr build avec le nom de votre registre de conteneurs en tant que <registry name> :

az acr build -r <registry name> -t appcloudservice .

La commande précédente :

  • Compresse la source dans un fichier tar.
  • Charge le fichier obtenu dans le registre de conteneurs.
  • Le registre de conteneurs décompresse le fichier tar.
  • Exécute la commande docker build dans la ressource de registre de conteneurs sur le fichier Dockerfile.
  • Ajoute l’image au registre de conteneurs.

Pour vérifier que l’image a été envoyée (push) au registre de conteneurs, accédez au Portail Azure. Ouvrez la ressource de registre de conteneurs, sous Services, puis sélectionnezRéférentiels. Vous devez normalement voir l’image.

Déployer en tant qu’instance de conteneur

Dans Visual Studio Code, sélectionnez Docker dans la Barre d’activité. Développez le nœud REGISTRIES, puis sélectionnez Connecter le Registre. Sélectionnez Azure lorsque vous y êtes invité, puis connectez-vous si nécessaire.

Important

Le déploiement en tant qu'instance de conteneur à partir de Visual Studio Code ne fonctionne plus sur Mac. Pour plus d'informations, consultez GitHub : À propos de l'extension Docker pour Visual Studio Code.

Visual Studio Code - Docker: Connect registry

Développez le nœud REGISTRIES, sélectionnez Azure, votre abonnement > le registre de conteneurs > l’image, puis cliquez avec le bouton droit sur la balise. Sélectionnez Déployer une image sur Azure Container Instances.

Visual Studio Code - Docker: Deploy image to Azure Container Instances

Pour créer une instance de conteneur, créez d'abord un groupe de conteneurs à l'aide de la commande az container create.

az container create -g <resource group> \
  --name <instance name> \
  --image <registry name>.azurecr.io/<image name>:latest \
  --registry-password <password>

Fournissez les valeurs appropriées :

  • <resource group> : nom du groupe de ressources que vous avez utilisé dans ce didacticiel.
  • <instance name> : nom de l’instance de conteneur.
  • <registry name> : nom du registre de conteneurs.
  • <image name> : nom de l’image.
  • <password> : mot de passe du registre de conteneurs : vous pouvez l’obtenir à partir du Portail Azure, des >Clés d’accès de ressource Container Registry.

Pour créer une instance de conteneur, vous devez également créer une nouvelle ressource dans le Portail Microsoft Azure.

  1. Sélectionnez le même Abonnement et le Groupe de ressources correspondant indiqué à la section précédente.
  2. Entrez un Nom de conteneurappcloudservice-container.
  3. Sélectionnez une Région qui correspond à l’Emplacement sélectionné précédemment.
  4. Pour Source de l’image, sélectionnez Azure Container Registry.
  5. Sélectionnez le Registre par le nom fourni à l’étape précédente.
  6. Sélectionnez Image et Balise d’image.
  7. Sélectionnez Revoir + créer.
  8. Une fois la Validation réussie, sélectionnez Créer.

La création des ressources peut prendre un moment. Quand elle est terminée, sélectionnez le bouton Accéder à la ressource.

Pour plus d’informations, consultez Démarrage rapide : Créer une instance de conteneur Azure.

Vérifier les fonctionnalités du service

Dès qu’elle est créée, l’instance de conteneur commence à s’exécuter.

Pour vérifier que votre service Worker fonctionne correctement, accédez au Portail Azure dans la ressource d’instance de conteneur, puis sélectionnez l’option Containers.

Azure portal: Container instance running

Vous verrez les conteneurs et leur état actuel. Dans ce cas, il s'agit de Running. Sélectionnez Journaux pour afficher la sortie du service Worker .NET.

Pour vérifier que votre service Worker fonctionne correctement, vous pouvez consulter les journaux de votre application en cours d’exécution. Utiliser la commande az container logs :

az container logs -g <resource group> --name <instance name>

Fournissez les valeurs appropriées :

  • <resource group> : nom du groupe de ressources que vous avez utilisé dans ce didacticiel.
  • <instance name> : nom de l’instance de conteneur.

Vous verrez les journaux de sortie du service Worker .NET, ce qui signifie que vous avez correctement déployé votre application en conteneur sur ACI.

Voir aussi