[DOCKER] Migrieren Sie ASP.NET Framework-Apps, die auf ODBC-Treibern basieren, zu Azure App Service

Einführung

(Dieser Artikel wurde basierend auf den Informationen im Oktober 2020 erstellt.) Ich denke, eines der Dinge, die bei der Migration vorhandener interner Systeme vor Ort in die Cloud berücksichtigt werden müssen, ist die Wahl der Migration auf IaaS oder PaaS. Angesichts der Vor- und Nachteile von IaaS und PaaS ist es meines Erachtens nicht ungewöhnlich, PaaS einzuführen und Entscheidungen zu treffen, um mit dem Geschäft fortzufahren. Wenn die App jedoch stark von den Funktionen des Betriebssystems usw. abhängig ist, kann die App möglicherweise nicht auf PaaS migriert werden und muss auf eine virtuelle Maschine auf IaaS migriert werden. Lassen Sie uns als eine der Lösungen darüber nachdenken, die Anwendung zu containerisieren, den betriebssystemabhängigen Teil in den Container zu setzen und den Container mit PaaS zu betreiben. Azure App Service bietet seit langem Unterstützung für Windows-Container als Vorschau, aber Ignite 2020-Ankündigung (https://news.microsoft.com/ignite-2020-book-of-news/#142- In Azure-App-Service-Updates enthalten neue Kosteneinsparungsoptionen (Windows-Container-Support-Github-Actions-Integration) ist die Windows-Container-Unterstützung für App Service jetzt allgemein verfügbar (GA). Ich möchte dies als Beispiel für die Migration eines internen Systems betrachten, das lokal auf Azure PaaS ausgeführt wird.

Wie in der folgenden Abbildung gezeigt, ist diesmal ein Beispiel für die Migration einer ASP.NET Framework-App, die von ODBC abhängt, auf einem IIS-Server, der in einer lokalen Umgebung ausgeführt wird, zu App Service (Webapp), einem Azure PaaS mit minimalen Änderungen in der App. Wird aufgenommen. image.png

Containerisieren Sie eine vorhandene ASP.NET Framework-App

Wenn Sie Ihre aktuelle ASP.NET Framework-App in Visual Studio entwickeln, können Sie Ihre App mit nur wenigen einfachen Schritten in einen Windows-Container verwandeln. Wenn Sie Visual Studio 2019 / Visual Studio 2017 (Version 15.7 oder höher) verwenden, können Sie die Docker-Unterstützung verwenden, indem Sie einfach die erforderlichen Komponenten im Visual Studio-Installationsprogramm installieren und Docker Desktop vorbereiten. (Weitere Informationen finden Sie unter https://docs.microsoft.com/ja-jp/visualstudio/containers/overview?view=vs-2019.) Außerdem unterstützen ASP.NET Framework-Apps keine Linux-Container und Windows Es sind nur Container verfügbar. Um die Docker-Unterstützung tatsächlich zu verwenden, öffnen Sie das ASP.NET Framework-Projekt, das Sie containerisieren möchten, und fügen Sie die Docker-Unterstützung über den Projektmappen-Explorer hinzu (siehe Abbildung unten). image.png

Durch Hinzufügen der Docker-Unterstützung wird der Start von Docker für Windows überprüft und der Windows-Container gestartet, wenn er nicht ausgeführt wird oder wenn der Linux-Container ausgeführt wird. Danach wird die folgende Docker-Datei automatisch im Projekt generiert und die Vorbereitung für die Erstellung des Images des Docker-Containers ist abgeschlossen.

Dockerfile


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

Zu diesem Zeitpunkt wurde die ASP.NET Framework-App für Windows containerisiert. In diesem Status wird die App jedoch nur unter Windows ausgeführt, sodass ODBC-abhängige Apps keine Verbindung zur Datenbank herstellen können. Fügen Sie dann einen Prozess in die Docker-Datei ein, um den ODBC-Treiber im Container zu installieren. Ich denke, dass Sie ODBC mit dem folgenden Powershell Add-OdbcDsn usw. unter Windows usw. installieren werden, aber wenn Sie den Prozess so schreiben, wie er sich in der Docker-Datei befindet, funktioniert er nicht gut. Seien Sie also vorsichtig.

Powershell


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

Das Folgende ist ein Beschreibungsbeispiel in der tatsächlichen Docker-Datei. Schreiben Sie einen Powershell-Befehl direkt aus dem RUN-Befehl mit SHELL [" Powershell "," -command "], anstatt Powershell im RUN-Befehl anzugeben und den normalen Powershell-Befehl nach -command auszuführen. In diesem Fall können Sie ein fehlerfreies Bild erstellen.

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"]

#Laden Sie den ODBC-Treiber für PostgreSQL herunter
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 /

#Extrahieren Sie die Zip-Datei und installieren Sie den Treiber
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 -Wenn der Befehl verwendet wird, tritt im Parameterspezifikationsteil ein Fehler auf.
#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')

Danach können Sie bestätigen, dass die Containeranwendung lokal ausgeführt wird, indem Sie den Build ausführen.

Laden Sie die containerisierte App in die Containerregistrierung hoch und veröffentlichen Sie sie im App Service

Nachdem wir nun eine ASP.NET Framework-App haben, die auf dem ODBC-Treiber basiert, um auf einem Container ausgeführt zu werden, können wir die App für den App Service bereitstellen, bei dem es sich um ein PaaS handelt. Dieses Mal übertragen wir das Container-Image in die Azure Container Registry und konfigurieren es für die automatische Bereitstellung im App Service. (Das Gleiche kann natürlich erreicht werden, indem das Image an Docker Hub gesendet wird.) Sie können das Image vom Docker-Befehl in die Azure Container Registry in der Befehlszeile übertragen. Dieses Mal verwenden wir Visual Studio, um das Container-Image in die Azure Container Registry zu übertragen.

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt für die App, die Sie containerisieren möchten, und wählen Sie im Menü die Option Veröffentlichen ... aus.

image.png

Klicken Sie dann als Herausgeber auf Docker Container Registry. image.png

Wählen Sie die Azure Container-Registrierung aus und wählen Sie aus den Abonnements für die Azure Container-Registrierung aus, in die Sie das Image übertragen möchten. Hier müssen Sie sich möglicherweise bei Ihrem Microsoft-Konto anmelden. Wenn Ihr Azure-Abonnement nicht über die Azure-Containerregistrierung verfügt, erstellen Sie eine im Azure-Portal oder in Visual Studio. (Klicken Sie hier, um eine Azure Container-Registrierung zu erstellen: https://docs.microsoft.com/en-us/azure/container-registry/container-registry-get-started-portal) image.png

Wenn Sie bereit sind, das Bild in die Azure Container-Registrierung zu übertragen, klicken Sie auf die Schaltfläche Veröffentlichen, um das Bild zu übertragen. image.png

Erstellen Sie als Nächstes einen App-Dienst, der die App tatsächlich ausführt. [Ankündigung von Ignite 2020](https://news.microsoft.com/ignite-2020-book-of-news/#142-azure-app-service-updates-include-new-cost-savings-options-windows- Es wird gesagt, dass die Windows-Containerunterstützung von der Premium V3-SKU bei der Integration von Containerunterstützung (Github-Aktionen) unterstützt wird. Daher möchte ich diesmal darauf zurückgreifen. (App-Service Weitere Informationen zu verwandten Updates finden Sie hier (https://techcommunity.microsoft.com/t5/apps-on-azure/migrate-modernize-net-applications-with-azure/ba-p/1696499). Bitte gib mir) Wählen Sie im Portal App Service erstellen aus und wählen Sie die Einstellung zum Erstellen eines Docker-Containers mit dem Betriebssystem Windows. Während des Vorschauzeitraums gab es eine App Service Plan-SKU für Windows-Container mit den Namen PC2 bis PC4. Mit diesem Update wählen wir jetzt dieselbe Premium V3-SKU wie die anderen. (Umgekehrt können Windows-Container derzeit nur mit Premium V3-Instanzen erstellt werden. Zur Überprüfung usw. scheint es möglich zu sein, den ab November festgelegten Entwicklungs- / Testpreis zu verwenden, um den Preis niedrig zu halten.)

image.png

Die folgende Registerkarte Docker gibt die Bildquelle für den Container an, auf dem App Service ausgeführt wird. Geben Sie dieses Mal die zuvor erstellte Azure-Containerregistrierung an. Stellen Sie dann den App Service mit den Standardeinstellungen bereit.

image.png

Nach der Bereitstellung des App-Dienstes können Sie das Image des vom App-Dienst gehosteten Containers in den "Container-Einstellungen" des Portals angeben. Sie können auch die fortlaufende Bereitstellung aktivieren, um das Image des Containers, der im App Service ausgeführt wird, bei jeder Aktualisierung des Images automatisch zu aktualisieren. image.png

Sie haben jetzt eine ASP.NET Framework-App ausgeführt, die auf dem ODBC-Treiber im App Service basiert.

abschließend

Dieses Mal habe ich eine Instanz der App Service Premium V3-SKU verwendet, um eine ASP.NET Framework-App auszuführen, die auf dem ODBC-Treiber als Windows-Container basiert. Ich denke, die gute Nachricht ist, dass PaaS, das sehr flexibel und wirtschaftlich ist, eine Option für die Migration vorhandener Systeme in die Cloud und die Ausführung in Containern geworden ist. Die App Service Premium V3-SKU bietet auch regionale VNET-Integration und Optionen zum Ausführen von Apps in geschlossenen Umgebungen, z. B. Private Link. Berücksichtigen Sie dies ebenfalls.

(Dieser Artikel wurde basierend auf den Informationen im Oktober 2020 erstellt.)

Recommended Posts

Migrieren Sie ASP.NET Framework-Apps, die auf ODBC-Treibern basieren, zu Azure App Service
Versuchen Sie Health Check für Azure App Service.
[Java] Stellen Sie die Spring Boot-Anwendung für den Azure App Service bereit