Tutoriel : Déployer une application .NET dans un conteneur Windows vers Azure Service Fabric

Ce didacticiel explique comment mettre une application ASP.NET existante en conteneur et l’empaqueter en tant qu’application Service Fabric. Exécutez les conteneurs en local sur le cluster de développement Service Fabric puis déployez l’application vers Azure. L’application conserve les données dans Azure SQL Database.

Dans ce tutoriel, vous allez apprendre à :

  • Mettre en conteneur une application existante à l’aide de Visual Studio
  • Créer une base de données dans Azure SQL Database
  • Créer un Azure Container Registry
  • Déployer une application Service Fabric sur Azure

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Prérequis

  1. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit.
  2. Activez les fonctionnalités Windows Hyper-V et Conteneurs.
  3. Installez Docker Desktop pour Windows afin que vous puissiez exécuter des conteneurs sur Windows 10.
  4. Installez le runtime Service Fabric version 6.2 ou supérieure et le kit de développement logiciel (SDK) Service Fabric version 3.1 ou supérieure.
  5. Installez Visual Studio et activez les charges de travail de développement Azure et de ASP.NET et de développement web.
  6. Installez Azure PowerShell.

Télécharger et exécuter Fabrikam Fiber CallCenter

  1. Téléchargez l’exemple d’application Fabrikam Fiber CallCenter à partir de GitHub.

  2. Vérifiez que l’application Fabrikam Fiber CallCenter génère et s’exécute sans erreur. Lancez Visual Studio en tant qu’administrateur et ouvrez le fichier VS2015\FabrikamFiber.CallCenter.sln. Appuyez sur F5 pour exécuter et déboguer l’application.

    Capture d’écran de la page d’accueil de l’application Fabrikam Fiber CallCenter s’exécutant sur l’hôte local. La page montre un tableau de bord avec une liste d’appels au support.

Créer une base de données Azure SQL DB

Lors de l’exécution de l’application Fabrikam Fiber CallCenter en production, les données doivent être conservées dans une base de données. Comme il n’existe aucun moyen de garantir la persistance des données dans un conteneur, vous ne pouvez pas stocker les données de production de SQL Server dans un conteneur.

Nous recommandons Azure SQL Database. Pour configurer et exécuter une base de données SQL Server gérée dans Azure, exécutez le script suivant. Modifiez les variables de script selon vos besoins. clientIP représente l’adresse IP de votre ordinateur de développement. Notez le nom du serveur généré par le script.

$subscriptionID="<subscription ID>"

# Sign in to your Azure account and select your subscription.
Login-AzAccount -SubscriptionId $subscriptionID

# The data center and resource name for your resources.
$dbresourcegroupname = "fabrikam-fiber-db-group"
$location = "southcentralus"

# The server name: Use a random value or replace with your own value (do not capitalize).
$servername = "fab-fiber-$(Get-Random)"

# Set an admin login and password for your database.
# The login information for the server.
$adminlogin = "ServerAdmin"
$password = "Password@123"

# The IP address of your development computer that accesses the SQL DB.
$clientIP = "<client IP>"

# The database name.
$databasename = "call-center-db"

# Create a new resource group for your deployment and give it a name and a location.
New-AzResourceGroup -Name $dbresourcegroupname -Location $location

# Create the SQL server.
New-AzSqlServer -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -Location $location `
    -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminlogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))

# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -FirewallRuleName "AllowClient" -StartIpAddress $clientIP -EndIpAddress $clientIP

# Create the database in the server.
New-AzSqlDatabase  -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -DatabaseName $databasename `
    -RequestedServiceObjectiveName "S0"

Write-Host "Server name is $servername"

Conseil

Si vous vous trouvez derrière un pare-feu d’entreprise, l’adresse IP de votre ordinateur de développement peut ne pas être exposée à Internet. Pour vérifier que la base de données dispose de l’adresse IP correcte pour la règle de pare-feu, accédez au Portail Azure et recherchez votre base de données dans la section Bases de données SQL. Cliquez sur son nom, puis dans la section Vue d’ensemble, cliquez sur « Set server firewall » (Configurer le pare-feu du serveur). « Client IP address » (Adresse IP client) représente l’adresse IP de votre ordinateur de développement. Assurez-vous qu’elle corresponde à l’adresse IP dans la règle « AllowClient ».

Mettre à jour la configuration web

De retour dans le projet FabrikamFiber.Web, mettez à jour la chaîne de connexion dans le fichier web.config pour pointer vers le serveur SQL Server dans le conteneur. Mettez à jour la partie Server de la chaîne de connexion du serveur avec le nom du serveur créé par le script précédent. Ce nom est du genre « fab-fiber-751718376.database.windows.net ». Dans le code XML suivant, vous devez mettre à jour uniquement l’attribut connectionString ; les attributs providerName et name n’ont pas besoin d’être changés.

<add name="FabrikamFiber-Express" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
<add name="FabrikamFiber-DataWarehouse" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
  

Notes

Vous pouvez utiliser l’instance SQL Server de votre choix pour le débogage local, tant qu’elle est accessible à partir de votre hôte. localdb ne prend cependant pas en charge la communication container -> host. Si vous souhaitez utiliser une autre base de données SQL lors de la création d’une version build de votre application web, ajoutez une autre chaîne de connexion à votre fichier web.release.config.

Conteneuriser l’application

  1. Cliquez avec le bouton droit sur le projet FabrikamFiber.Web>Ajouter>Prise en charge de l’orchestrateur de conteneur. Sélectionnez Service Fabric en tant qu’orchestrateur de conteneur et cliquez sur OK.

  2. Si vous y êtes invité, cliquez sur Oui pour passer de Docker aux conteneurs Windows maintenant.

    Un nouveau projet d’application Service Fabric FabrikamFiber.CallCenterApplication est créé dans la solution. Un fichier Docker est ajouté au projet FabrikamFiber.Web existant. Un répertoire PackageRoot est aussi ajouté au projet FabrikamFiber.Web, qui contient le manifeste et les paramètres du nouveau service FabrikamFiber.Web.

    Le conteneur est désormais prêt à être généré et empaqueté dans une application Service Fabric. Une fois l’image de conteneur intégrée sur votre ordinateur, vous pouvez la placer dans n’importe quel registre de conteneur et la transmettre à n’importe quel hôte pour l’exécuter.

Exécutez l’application en conteneur localement

Appuyez sur F5 pour exécuter et déboguer l’application dans un conteneur sur le cluster de développement Service Fabric local. Cliquez sur Oui si une boîte de message s’affiche vous demandant d’accorder au groupe « ServiceFabricAllowedUsers » la permission de lire et d’exécuter sur votre répertoire de projet Visual Studio.

Si l’exécution au moyen de la touche F5 lève une exception telle que la suivante, l’adresse IP correcte n’a pas été ajoutée au pare-feu de base de données Azure.

System.Data.SqlClient.SqlException
HResult=0x80131904
Message=Cannot open server 'fab-fiber-751718376' requested by the login. Client with IP address '123.456.789.012' is not allowed to access the server.  To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range.  It may take up to five minutes for this change to take effect.
Source=.Net SqlClient Data Provider
StackTrace:
<Cannot evaluate the exception stack trace>

Pour ajouter l’adresse IP appropriée au pare-feu de base de données Azure, exécutez la commande suivante.

# The IP address of your development computer that accesses the SQL DB.
$clientIPNew = "<client IP from the Error Message>"

# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -FirewallRuleName "AllowClientNew" -StartIpAddress $clientIPNew -EndIpAddress $clientIPNew

Créer un registre de conteneur

Maintenant que l’application est exécutée localement, commencez à préparer le déploiement vers Azure. Les images de conteneur doivent être stockées dans un registre de conteneurs. Créez un registre de conteneurs Azure à l’aide du script suivant. Le nom du registre de conteneurs est visible par d’autres abonnements Azure, il doit donc être unique. Avant de déployer l’application vers Azure, vous envoyez par push l’image de conteneur dans le registre. Lorsque l’application déploie le cluster dans Azure, l’image de conteneur est extraite de ce registre.

# Variables
$acrresourcegroupname = "fabrikam-acr-group"
$location = "southcentralus"
$registryname="fabrikamregistry$(Get-Random)"

New-AzResourceGroup -Name $acrresourcegroupname -Location $location

$registry = New-AzContainerRegistry -ResourceGroupName $acrresourcegroupname -Name $registryname -EnableAdminUser -Sku Basic

Créer un cluster Service Fabric dans Azure

Les applications Service Fabric peuvent être exécutées sur un cluster, ou sur un ensemble de machines physiques ou virtuelles connectées au réseau. Avant de pouvoir déployer l’application sur Azure, créez un cluster Service Fabric dans Azure.

Vous pouvez :

Ce didacticiel crée un cluster à partir de Visual Studio, idéal pour ces scénarios test. Si vous créez un cluster d’une autre façon ou si vous utilisez un cluster existant, vous pouvez copier et coller votre point de terminaison de connexion ou le sélectionner depuis votre abonnement.

Avant de démarrer, ouvrez FabrikamFiber.Web -> PackageRoot -> ServiceManifest.xml dans Explorateur de solutions. Notez le port du front-end web listé dans Point de terminaison.

Lors de la création du cluster :

  1. Cliquez avec le bouton droit sur le projet de l’application FabrikamFiber.CallCenterApplication dans l’Explorateur de solutions et choisissez Publier.

  2. Connectez-vous avec votre compte Azure afin d’avoir accès à votre ou vos abonnements.

  3. Sous le menu déroulant pour le Point de terminaison de connexion, sélectionnez l’option Créer un cluster... .

  4. Dans la boîte de dialogue Créer un cluster, modifiez les paramètres suivants :

    a. Spécifiez le nom de votre cluster dans le champ Nom du cluster, ainsi que l’abonnement et l’emplacement à utiliser. Notez le nom de votre groupe de ressources de cluster.

    b. Facultatif : Vous pouvez modifier le nombre de nœuds. Par défaut, vous disposez de trois nœuds, qui est le minimum requis pour tester des scénarios Service Fabric.

    c. Sélectionnez l’onglet Certificat. Dans cet onglet, tapez un mot de passe à utiliser pour sécuriser le certificat de votre cluster. Ce certificat aide à sécuriser votre cluster. Vous pouvez aussi modifier le chemin vers l’emplacement où vous voulez enregistrer le certificat. Visual Studio peut aussi importer le certificat pour vous, car il s’agit d’une étape nécessaire à la publication de l’application dans le cluster.

    Notes

    Notez le chemin du dossier dans lequel ce certificat est importé. L’étape suivante après la création du cluster consiste à importer ce certificat.

    d. Sélectionnez l’onglet Détail de la machine virtuelle. Spécifiez le mot de passe que vous voulez utiliser pour les machines virtuelles qui forment le cluster. Le nom d’utilisateur et le mot de passe peuvent être utilisés pour se connecter aux machines virtuelles à distance. Vous devez aussi sélectionner une taille de machine virtuelle et pouvez changer l’image de la machine virtuelle si nécessaire.

    Important

    Choisissez une référence SKU prenant en charge les conteneurs en cours d’exécution. Le système d’exploitation Windows Server sur vos nœuds de cluster doit être compatible avec le système d’exploitation Windows Server de votre conteneur. Pour plus d’informations, consultez Système d’exploitation Windows Server du conteneur et compatibilité avec le système d’exploitation hôte. Par défaut, ce tutoriel crée une image Docker basée sur Windows Server 2016 LTSC. Les conteneurs basés sur cette image seront exécutés sur les clusters créés avec Windows Server 2016 Datacenter avec Containers. Toutefois, si vous créez un cluster ou utilisez un cluster existant basé sur une autre version de Windows Server, vous devez changer l’image du système d’exploitation sur laquelle le conteneur est basé. Ouvrez le dockerfile dans le projet FabrikamFiber.Web, commentez toute instruction FROM existante basée sur une version précédente de Windows Server, puis ajoutez une instruction FROM basée sur la balise de la version souhaitée à partir de la page DockerHub Windows Server Core. Pour plus d’informations sur les versions Windows Server Core, les calendriers de prise en charge et la gestion de versions, consultez Informations de publication de Windows Server Core.

    e. Dans l’onglet Avancé, indiquez le port de l’application à ouvrir dans l’équilibreur de charge lorsque le cluster est déployé. Il s’agit du port que vous avez noté avant de commencer la création du cluster. Vous pouvez aussi ajouter une clé Application Insights existante à utiliser pour y diriger les fichiers de journal des applications.

    f. Une fois la modification des paramètres terminée, cliquez sur le bouton Créer.

  5. La création prend plusieurs minutes, la fenêtre de sortie vous informe lorsque le cluster est complètement créé.

Installer le certificat importé

Installez le certificat importé lors de la création du cluster dans l’emplacement de magasin Utilisateur actuel et fournissez le mot de passe de la clé privée que vous avez fourni.

Pour vérifier que le certificat est installé, ouvrez Gérer les certificats utilisateur à partir du Panneau de configuration et accédez à Certificats - Utilisateur actuel ->Personnel ->Certificats. Le certificat doit ressembler à [nom du cluster] . [emplacement du cluster] .cloudapp.azure.com, par exemple, fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.

Autoriser votre application s’exécutant dans Azure à accéder à SQL Database

Précédemment, vous avez créé une règle de pare-feu SQL pour autoriser l’accès à votre application exécutée localement. Ensuite, vous devez autoriser l’application qui s’exécute dans Azure à accéder à la base de données SQL. Créez un point de terminaison de service de réseau virtuel pour le cluster Service Fabric puis créez une règle pour autoriser ce point de terminaison à accéder à la base de données SQL. Veillez à spécifier la variable de groupe de ressources de cluster que vous avez notée pendant la création du cluster.

# Create a virtual network service endpoint
$clusterresourcegroup = "<cluster resource group>"
$resource = Get-AzResource -ResourceGroupName $clusterresourcegroup -ResourceType Microsoft.Network/virtualNetworks | Select-Object -first 1
$vnetName = $resource.Name

Write-Host 'Virtual network name: ' $vnetName

# Get the virtual network by name.
$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName $clusterresourcegroup `
  -Name              $vnetName

Write-Host "Get the subnet in the virtual network:"

# Get the subnet, assume the first subnet contains the Service Fabric cluster.
$subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet | Select-Object -first 1

$subnetName = $subnet.Name
$subnetID = $subnet.Id
$addressPrefix = $subnet.AddressPrefix

Write-Host "Subnet name: " $subnetName " Address prefix: " $addressPrefix " ID: " $subnetID

# Assign a Virtual Service endpoint 'Microsoft.Sql' to the subnet.
$vnet = Set-AzVirtualNetworkSubnetConfig `
  -Name            $subnetName `
  -AddressPrefix   $addressPrefix `
  -VirtualNetwork  $vnet `
  -ServiceEndpoint Microsoft.Sql | Set-AzVirtualNetwork

$vnet.Subnets[0].ServiceEndpoints;  # Display the first endpoint.

# Add a SQL DB firewall rule for the virtual network service endpoint
$subnet = Get-AzVirtualNetworkSubnetConfig `
  -Name           $subnetName `
  -VirtualNetwork $vnet;

$VNetRuleName="ServiceFabricClusterVNetRule"
$vnetRuleObject1 = New-AzSqlServerVirtualNetworkRule `
  -ResourceGroupName      $dbresourcegroupname `
  -ServerName             $servername `
  -VirtualNetworkRuleName $VNetRuleName `
  -VirtualNetworkSubnetId $subnetID;

Déploiement de l’application dans Azure

À présent que l’application est prête, vous pouvez la déployer sur le cluster dans Azure directement à partir de Visual Studio. Cliquez avec le bouton droit sur le projet de l’application FabrikamFiber.CallCenterApplication dans l’Explorateur de solutions et choisissez Publier. Dans Point de terminaison de connexion, sélectionnez le point de terminaison du cluster précédemment créé. Dans Azure Container Registry, sélectionnez le registre de conteneur précédemment créé. Cliquez sur Publier pour déployer l’application vers le cluster dans Azure.

Publication de l’application

Vous pouvez suivre la procession du déploiement dans la fenêtre de sortie. Lorsque l’application est déployée, ouvrez un navigateur et saisissez l’adresse du cluster et le port de l’application. Par exemple : http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/.

Capture d’écran de la page d’accueil de l’application Fabrikam Fiber CallCenter s’exécutant sur azure.com. La page montre un tableau de bord avec une liste d’appels au support.

Si la page ne parvient pas à se charger ou à demander le certificat, essayez d’ouvrir le chemin de l’Explorateur, par exemple, https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer et sélectionnez le certificat nouvellement installé.

Configurer l’intégration et le déploiement continus (CI/CD) avec un cluster Service Fabric

Pour savoir comment utiliser Azure DevOps en vue de configurer le déploiement d’applications CI/CD dans un cluster Service Fabric, consultez Tutoriel : Déployer une application avec intégration et déploiement continus sur un cluster Service Fabric. Le processus décrit dans ce didacticiel est identique pour ce projet (FabrikamFiber) ; vous devez simplement omettre le téléchargement de l’exemple Voting et utiliser FabrikamFiber comme nom de référentiel au lieu de Voting.

Nettoyer les ressources

Si vous avez terminé, veillez à supprimer toutes les ressources créées. La façon la plus simple est de supprimer les groupes de ressources qui contiennent le cluster Service Fabric, Azure SQL DB et Azure Container Registry.

$dbresourcegroupname = "fabrikam-fiber-db-group"
$acrresourcegroupname = "fabrikam-acr-group"
$clusterresourcegroupname="fabrikamcallcentergroup"

# Remove the Azure SQL DB
Remove-AzResourceGroup -Name $dbresourcegroupname

# Remove the container registry
Remove-AzResourceGroup -Name $acrresourcegroupname

# Remove the Service Fabric cluster
Remove-AzResourceGroup -Name $clusterresourcegroupname

Étapes suivantes

Dans ce didacticiel, vous avez appris à :

  • Mettre en conteneur une application existante à l’aide de Visual Studio
  • Créer une base de données dans Azure SQL Database
  • Créer un Azure Container Registry
  • Déployer une application Service Fabric sur Azure

Dans la partie suivante du tutoriel, découvrez comment déployer une application de conteneur avec CI/CD sur un cluster Service Fabric.