[DOCKER] Migrer les applications ASP.NET Framework qui reposent sur des pilotes ODBC vers Azure App Service

introduction

(Cet article a été créé sur la base des informations d'octobre 2020) Je pense que l'un des éléments à prendre en compte lors de la migration de systèmes internes existants sur site vers le cloud est le choix de migrer vers IaaS ou PaaS. Compte tenu des avantages et des restrictions de l'IaaS et du PaaS, je pense qu'il n'est pas rare d'adopter le PaaS et de prendre des décisions commerciales. Cependant, si l'application dépend profondément des fonctions du système d'exploitation, etc., il est possible que l'application ne puisse pas être migrée vers PaaS et doive être migrée vers une machine virtuelle sur IaaS. Donc, comme l'une des solutions, pensons à la conteneurisation de l'application, à la mise en place de la partie dépendante du système d'exploitation dans le conteneur et à l'exploitation du conteneur avec PaaS. Azure App Service a longtemps fourni la prise en charge des conteneurs Windows en tant qu'aperçu, mais l'annonce Ignite 2020 (https://news.microsoft.com/ignite-2020-book-of-news/#142- Dans azure-app-service-updates-include-new-cost-economies-options-windows-container-support-github-actions-integration), la prise en charge des conteneurs Windows pour App Service est désormais généralement disponible (GA). Je voudrais utiliser ceci pour considérer un exemple de migration d'un système interne fonctionnant sur site vers Azure PaaS.

Cette fois, comme indiqué dans l'image ci-dessous, un exemple de migration d'une application ASP.NET Framework qui dépend d'ODBC sur un serveur IIS s'exécutant dans un environnement sur site vers App Service (Webapp), qui est un Azure PaaS avec des modifications minimes dans l'application. Sera repris. image.png

Conteneuriser une application ASP.NET Framework existante

Si vous développez votre application ASP.NET Framework actuelle dans Visual Studio, vous pouvez transformer votre application en un conteneur Windows en quelques étapes simples. Si vous utilisez Visual Studio 2019 / Visual Studio 2017 (version 15.7 ou ultérieure), vous pouvez utiliser la prise en charge de Docker simplement en installant les composants nécessaires dans le programme d'installation de Visual Studio et en préparant Docker Desktop. (Pour plus de détails, voir https://docs.microsoft.com/ja-jp/visualstudio/containers/overview?view=vs-2019) En passant, les applications ASP.NET Framework ne prennent pas en charge les conteneurs Linux et Windows Seuls les conteneurs sont disponibles. Pour utiliser réellement la prise en charge de Docker, ouvrez le projet ASP.NET Framework que vous souhaitez conteneuriser et ajoutez la prise en charge de Docker à partir de l'Explorateur de solutions, comme indiqué dans l'image ci-dessous. image.png

L'ajout de la prise en charge de Docker vérifiera le démarrage de Docker pour Windows et démarrera le conteneur Windows s'il n'est pas en cours d'exécution ou si le conteneur Linux est en cours d'exécution. Après cela, le Dockerfile suivant est automatiquement généré dans le projet et la préparation de la création de l'image du conteneur Docker est terminée.

Dockerfile


FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .

À ce stade, l'application ASP.NET Framework a été mise en conteneur pour Windows, mais dans cet état, l'application s'exécute uniquement sous Windows, de sorte que les applications dépendantes d'ODBC ne peuvent pas se connecter à la base de données. Ajoutez ensuite un processus dans le Dockerfile pour installer le pilote ODBC à l'intérieur du conteneur. Je pense que vous installerez ODBC en utilisant le Powershell Add-OdbcDsn etc. sur votre Windows etc., mais si vous écrivez le processus tel qu'il est sur le Dockerfile, cela ne fonctionnera pas bien et vous en serez accro, alors soyez prudent.

Powershell


Add-OdbcDsn -Name "DSNNAME" -DriverName "PostgreSQL Unicode" -DsnType "User" -Platform "32-bit" -SetPropertyValue @("Server=SERVERNAME.com","Database=DBNAME","SSLMode=require","Username=SOMEONE")

Ce qui suit est un exemple de description dans le Dockerfile réel. Écrivez une commande Powershell directement à partir de la commande RUN en utilisant SHELL [" powershell "," -command "] au lieu de spécifier Powershell dans la commande RUN et d'exécuter la commande Powershell normale après -command. Si vous le faites, vous pouvez créer une image sans aucune erreur.

Dockerfile


FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .

SHELL ["powershell", "-command"]

#Télécharger le pilote ODBC pour PostgreSQL
ADD https://ftp.postgresql.org/pub/odbc/versions/msi/psqlodbc_12_01_0000-x86.zip /
ADD https://ftp.postgresql.org/pub/odbc/versions/msi/psqlodbc_12_01_0000-x64.zip /

#Extraire le fichier zip et installer le pilote
RUN Expand-Archive -Path c:\psqlodbc_12_01_0000-x86.zip -DestinationPath c:\odbc\ ; \
    Start-Process c:\odbc\psqlodbc_x86.msi -Wait
RUN Expand-Archive -Path c:\psqlodbc_12_01_0000-x64.zip -DestinationPath c:\odbc64\ ; \
    Start-Process c:\odbc64\psqlodbc_x64.msi -Wait

#RUN powershell -Si la commande est utilisée, une erreur se produira dans la partie spécification des paramètres.
#RUN powershell -command Add-OdbcDsn -Name "DSNNAME" -DriverName "PostgreSQL Unicode" -DsnType "User" -Platform "32-bit" -SetPropertyValue @("Server=SERVERNAME.com","Database=DBNAME","SSLMode=require","Username=SOMEONE")

#32bit
RUN Add-OdbcDsn -Name 'DSNNAME' -DriverName 'PostgreSQL Unicode' -DsnType 'System' -Platform '32-bit' -SetPropertyValue @('Server=SERVERNAME.com','Database=DBNAME','SSLMode=require','Username=SOMEONE')
#64bit
RUN Add-OdbcDsn -Name 'DSNNAMEx64' -DriverName 'PostgreSQL Unicode(x64)' -DsnType 'System' -Platform '64-bit' -SetPropertyValue @('Server=SERVERNAME.com','Database=DBNAME','SSLMode=require','Username=SOMEONE')

Après cela, vous pouvez confirmer que l'application conteneur est exécutée localement en exécutant la génération.

Téléchargez l'application conteneurisée dans le registre de conteneurs et publiez-la sur App Service

Maintenant que nous avons une application ASP.NET Framework qui repose sur le pilote ODBC pour s'exécuter sur un conteneur, nous sommes prêts à déployer l'application sur le service d'applications PaaS. Cette fois, nous allons pousser l'image du conteneur vers Azure Container Registry et la configurer pour qu'elle se déploie automatiquement sur App Service. (Bien sûr, la même chose peut être obtenue en poussant l'image vers Docker Hub) Vous pouvez pousser l'image de la commande Docker vers Azure Container Registry sur la ligne de commande, mais cette fois, nous utiliserons Visual Studio pour pousser l'image du conteneur vers Azure Container Registry.

Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet de l'application que vous souhaitez conteneuriser et sélectionnez Publier ... dans le menu.

image.png

Cliquez ensuite sur Docker Container Registry en tant qu'éditeur. image.png

Sélectionnez Azure Container Registry et sélectionnez parmi les abonnements que vous avez pour Azure Container Registry vers lequel vous souhaitez pousser l'image. Ici, vous devrez peut-être vous connecter à votre compte Microsoft. De plus, si votre abonnement Azure ne dispose pas d'Azure Container Registry, créez-en un sur le portail Azure ou dans Visual Studio. (Cliquez ici pour savoir comment créer Azure Container Registry: https://docs.microsoft.com/en-us/azure/container-registry/container-registry-get-started-portal) image.png

Lorsque vous êtes prêt à pousser l'image vers Azure Container Registry, appuyez sur le bouton Publier pour pousser l'image. image.png

Ensuite, créez un App Service qui exécute réellement l'application. [Annonce d'Ignite 2020](https://news.microsoft.com/ignite-2020-book-of-news/#142-azure-app-service-updates-include-new-cost-savings-options-windows- Il est dit que la prise en charge des conteneurs Windows est prise en charge par le SKU Premium V3 dans container-support-github-actions-integration), je voudrais donc l'utiliser cette fois. (Service d'application Voir ici pour plus d'informations sur les mises à jour associées (https://techcommunity.microsoft.com/t5/apps-on-azure/migrate-modernize-net-applications-with-azure/ba-p/1696499) S'il te plait donne moi) Sélectionnez Créer un service d'application sur le portail et sélectionnez le paramètre pour créer un conteneur Docker dont le système d'exploitation est Windows. Pendant la période de prévisualisation, il y avait un SKU App Service Plan pour les conteneurs Windows appelé PC2 à PC4, mais avec cette mise à jour, nous choisissons maintenant le même SKU Premium V3 que les autres. (À l'inverse, les conteneurs Windows ne peuvent être créés qu'avec des instances Premium V3 pour le moment. Pour la vérification, etc., il semble possible d'utiliser le prix Dev / Test fixé à partir de novembre pour maintenir le prix bas.)

image.png

L'onglet Docker suivant spécifie la source d'image du conteneur sur lequel s'exécute App Service. Cette fois, spécifiez le registre de conteneurs Azure que vous avez créé précédemment. Ensuite, déployez l'App Service avec les paramètres par défaut.

image.png

Après avoir déployé l'App Service, vous pouvez spécifier l'image du conteneur hébergé par l'App Service à partir des "Paramètres du conteneur" du portail. Vous pouvez également activer le déploiement continu pour mettre à jour automatiquement l'image du conteneur s'exécutant dans App Service chaque fois que l'image est mise à jour. image.png

Vous avez maintenant exécuté une application ASP.NET Framework qui repose sur le pilote ODBC sur l'App Service.

en conclusion

Cette fois, j'ai utilisé une instance du SKU App Service Premium V3 pour exécuter une application ASP.NET Framework qui repose sur le pilote ODBC en tant que conteneur Windows. Je pense que la bonne nouvelle est que PaaS, qui est très flexible et économique, est devenu une option pour migrer les systèmes existants vers le cloud et fonctionner dans des conteneurs. Avec App Service Premium V3 SKU, vous pouvez également utiliser l'intégration et les options VNET de région pour exécuter des applications telles que Private Link dans un environnement fermé, veuillez donc en tenir compte également.

(Cet article a été créé sur la base des informations d'octobre 2020)

Recommended Posts

Migrer les applications ASP.NET Framework qui reposent sur des pilotes ODBC vers Azure App Service
Essayez Health Check sur Azure App Service.
[Java] Déployer l'application Spring Boot sur Azure App Service