Python webes és feldolgozói szerepkörök a Visual Studio eszközzel

Fontos

Cloud Services (klasszikus) mostantól elavult az új ügyfelek számára, és 2024. augusztus 31-én minden ügyfél számára megszűnik. Az új üzemelő példányoknak az új Azure Resource Manager-alapú Azure Cloud Services (kiterjesztett támogatás) üzembehelyezési modellt kell használniuk.

Ez a cikk a Python webes és feldolgozói szerepkörök Python Tools for Visual Studio eszközben történő használatát ismerteti. Megtudhatja, hogyan hozhat létre és telepíthet egy Pythont használó alapszintű felhőszolgáltatást a Visual Studióval.

Előfeltételek

Megjegyzés

Az oktatóanyag elvégzéséhez egy Azure-fiókra lesz szüksége. Aktiválhatja Visual Studio-előfizetői előnyeit, vagy regisztrálhat egy ingyenes próbaverzióra.

Mik a Python webes és feldolgozói szerepkörök?

Az Azure három számítási modellt biztosít az alkalmazások futtatásához: Web Apps szolgáltatás az Azure App Service-ben, Azure Virtual Machines és Azure Cloud Services. Mindhárom modell támogatja a Python eszközt. A webes és feldolgozói szerepköröket is tartalmazó Cloud Services platformszolgáltatást (PaaS) kínál. A felhőszolgáltatásban a webes szerepkör egy külön Internet Information Services (IIS) webkiszolgálót biztosít az előtéri webalkalmazásokhoz, míg a feldolgozói szerepkör aszinkron, hosszan futó vagy folyamatos feladatokat futtat függetlenül a felhasználói műveletektől vagy bemenettől.

További információ: Mi az a Cloud Service?.

Megjegyzés

Egyszerű webhelyet szeretne készíteni? Ha egy egyszerű webhely előterét kívánja futtatni, fontolja meg az Azure App Service egyszerűsített Web Apps szolgáltatásának használatát. Könnyedén frissíthet Cloud Service szolgáltatásra, ha a webhely növekszik és a követelmények változnak. A Python fejlesztői központban találhat az Azure App Service Web Apps szolgáltatásának fejlesztését ismertető cikkeket.

Projekt létrehozása

A Visual Studio eszközben válassza az Azure Cloud Service lehetőséget az Új projekt párbeszédpanelen a Python területen.

Új projekt párbeszédpanel

Az Azure Cloud Service varázslóban létrehozhat új webes és feldolgozói szerepköröket.

Azure Cloud Service párbeszédpanel

A feldolgozói szerepkör sablonja sablonkóddal rendelkezik, hogy csatlakozhasson egy Azure-tárfiókhoz vagy az Azure Service Bus szolgáltatáshoz.

Cloud Service megoldás

Egy meglévő felhőszolgáltatáshoz bármikor hozzáadhat webes vagy feldolgozói szerepköröket. Hozzáadhat a megoldásában már meglévő projekteket, vagy létrehozhat újakat.

Szerepkör hozzáadása parancs

A felhőszolgáltatás tartalmazhat különböző nyelveken kialakított szerepköröket. Például kialakíthat egy Python webes szerepkört Django, Python vagy C# feldolgozói szerepkör használatával. A szerepkörök között egyszerűen kommunikálhat Service Bus üzenetsorok vagy tárolási sorok használatával.

A Python telepítése a felhőszolgáltatáson

Figyelmeztetés

A Visual Studióval települt telepítési parancsfájlok (a cikk utolsó frissítésekor) erre a célra nem használhatók. A megoldást ez a szakasz ismerteti.

A telepítési szkriptek fő problémája, hogy nem telepítik a Pythont. Először határozzon meg két indítási feladatot a ServiceDefinition.csdef fájlban. Az első feladat (PrepPython.ps1) letölti és telepíti a Python-futtatókörnyezetet. A második feladat (PipInstaller.ps1) a pipet futtatja a vonatkozó függőségek telepítéséhez.

A következő szkriptek a Python 3.8-at célozták meg. Ha a Python 2.x verzióját szeretné használni, állítsa a PYTHON2 változófájlt be értékre a két indítási és a futtatókörnyezeti feladathoz: <Variable name="PYTHON2" value="<mark>on</mark>" />.

<Startup>

  <Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PrepPython.ps1">
    <Environment>
      <Variable name="EMULATED">
        <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
      </Variable>
      <Variable name="PYTHON2" value="off" />
    </Environment>
  </Task>

  <Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PipInstaller.ps1">
    <Environment>
      <Variable name="EMULATED">
        <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
      </Variable>
      <Variable name="PYTHON2" value="off" />
    </Environment>

  </Task>

</Startup>

A PYTHON2 és a PYPATH változókat hozzá kell adnia a feldolgozó indítási feladatához. A PYPATH változót csak akkor használja a rendszer, ha a PYTHON2 változó be értékű.

<Runtime>
  <Environment>
    <Variable name="EMULATED">
      <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
    </Variable>
    <Variable name="PYTHON2" value="off" />
    <Variable name="PYPATH" value="%SystemDrive%\Python27" />
  </Environment>
  <EntryPoint>
    <ProgramEntryPoint commandLine="bin\ps.cmd LaunchWorker.ps1" setReadyOnProcessStart="true" />
  </EntryPoint>
</Runtime>

Mintául szolgáló ServiceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="AzureCloudServicePython" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
  <WorkerRole name="WorkerRole1" vmsize="Small">
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
      <Setting name="Python2" />
    </ConfigurationSettings>
    <Startup>
      <Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PrepPython.ps1">
        <Environment>
          <Variable name="EMULATED">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
          </Variable>
          <Variable name="PYTHON2" value="off" />
        </Environment>
      </Task>
      <Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PipInstaller.ps1">
        <Environment>
          <Variable name="EMULATED">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
          </Variable>
          <Variable name="PYTHON2" value="off" />
        </Environment>
      </Task>
    </Startup>
    <Runtime>
      <Environment>
        <Variable name="EMULATED">
          <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
        </Variable>
        <Variable name="PYTHON2" value="off" />
        <Variable name="PYPATH" value="%SystemDrive%\Python27" />
      </Environment>
      <EntryPoint>
        <ProgramEntryPoint commandLine="bin\ps.cmd LaunchWorker.ps1" setReadyOnProcessStart="true" />
      </EntryPoint>
    </Runtime>
    <Imports>
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
  </WorkerRole>
</ServiceDefinition>

Ezután hozza létre a PrepPython.ps1 és a PipInstaller.ps1 fájlokat a szerepkör ./bin mappájában.

PrepPython.ps1

Ez a parancsfájl telepíti a Pythont. Ha a PYTHON2 környezeti változó be van kapcsolva, akkor a Python 2.7 van telepítve, ellenkező esetben a Python 3.8 van telepítve.

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
$is_emulated = $env:EMULATED -eq "true"
$is_python2 = $env:PYTHON2 -eq "on"
$nl = [Environment]::NewLine

if (-not $is_emulated){
    Write-Output "Checking if Python is installed...$nl"
    if ($is_python2) {
        & "${env:SystemDrive}\Python27\python.exe"  -V | Out-Null
    }
    else {
        py -V | Out-Null
    }

    if (-not $?) {

        $url = "https://www.python.org/ftp/python/3.8.8/python-3.8.8-amd64.exe"
        $outFile = "${env:TEMP}\python-3.8.8-amd64.exe"

        if ($is_python2) {
            $url = "https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi"
            $outFile = "${env:TEMP}\python-2.7.18.amd64.msi"
        }

        Write-Output "Not found, downloading $url to $outFile$nl"
        Invoke-WebRequest $url -OutFile $outFile
        Write-Output "Installing$nl"

        if ($is_python2) {
            Start-Process msiexec.exe -ArgumentList "/q", "/i", "$outFile", "ALLUSERS=1" -Wait
        }
        else {
            Start-Process "$outFile" -ArgumentList "/quiet", "InstallAllUsers=1" -Wait
        }

        Write-Output "Done$nl"
    }
    else {
        Write-Output "Already installed"
    }
}

PipInstaller.ps1

Ez a parancsfájl meghívja a pipet, és telepíti a requirements.txt fájlban található összes függőséget. Ha a PYTHON2 környezeti változó be van kapcsolva, akkor a Rendszer a Python 2.7-et használja, ellenkező esetben a Python 3.8-at.

$is_emulated = $env:EMULATED -eq "true"
$is_python2 = $env:PYTHON2 -eq "on"
$nl = [Environment]::NewLine

if (-not $is_emulated){
    Write-Output "Checking if requirements.txt exists$nl"
    if (Test-Path ..\requirements.txt) {
        Write-Output "Found. Processing pip$nl"

        if ($is_python2) {
            & "${env:SystemDrive}\Python27\python.exe" -m pip install -r ..\requirements.txt
        }
        else {
            py -m pip install -r ..\requirements.txt
        }

        Write-Output "Done$nl"
    }
    else {
        Write-Output "Not found$nl"
    }
}

A LaunchWorker.ps1 módosítása

Megjegyzés

Feldolgozói szerepkörű projekt esetében az indítófájl végrehajtásához LauncherWorker.ps1 fájl szükséges. Webes szerepkörű projekt esetében az indítófájl definiálása nem ebben a fájlban, hanem a projekt tulajdonságaiban történik.

A bin\LaunchWorker.ps1 eredetileg azért jött létre, hogy előkészítési munkákat végezzen, de nem igazán működik. Cserélje le a fájl tartalmát a következő parancsfájllal.

Ez a szkript meghívja a worker.py fájlt a Python-projektből. Ha a PYTHON2 környezeti változó be van kapcsolva, akkor a Rendszer a Python 2.7-et használja, ellenkező esetben a Python 3.8-at.

$is_emulated = $env:EMULATED -eq "true"
$is_python2 = $env:PYTHON2 -eq "on"
$nl = [Environment]::NewLine

if (-not $is_emulated)
{
    Write-Output "Running worker.py$nl"

    if ($is_python2) {
        cd..
        iex "$env:PYPATH\python.exe worker.py"
    }
    else {
        cd..
        iex "py worker.py"
    }
}
else
{
    Write-Output "Running (EMULATED) worker.py$nl"

    # Customize to your local dev environment

    if ($is_python2) {
        cd..
        iex "$env:PYPATH\python.exe worker.py"
    }
    else {
        cd..
        iex "py worker.py"
    }
}

ps.cmd

A Visual Studio-sablonoknak létre kellett hozniuk egy ps.cmd fájlt a ./bin mappában. Ez a héjparancsfájl kiemeli a fenti PowerShell burkoló parancsfájlokat, és a meghívott PowerShell burkoló neve alapján biztosít naplózást. Ha a fájl nem jött létre, itt láthatja, minek kéne benne lennie.

@echo off

cd /D %~dp0

if not exist "%DiagnosticStore%\LogFiles" mkdir "%DiagnosticStore%\LogFiles"
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -File %* >> "%DiagnosticStore%\LogFiles\%~n1.txt" 2>> "%DiagnosticStore%\LogFiles\%~n1.err.txt"

Helyi futtatás

Ha a felhőszolgáltatási projektet állítja be kiindulási projektnek, és lenyomja az F5 billentyűt, a felhőszolgáltatás a helyi Azure-emulátorban fut.

Bár a PVTS támogatja az emulátorban való indítást, a hibakeresés (például a töréspontok keresése) nem működik.

A webes és feldolgozói szerepkörök hibakereséséhez állítsa be a szerepkörprojektet kiindulási projektként, és végezzen azon hibakeresést Beállíthat több kiindulási projektet is. Kattintson a jobb gombbal a megoldásra, majd válassza az Indítási projektek beállítása lehetőséget.

A megoldás kiindulási projektjének tulajdonságai

Közzététel az Azure-ban

A közzétételhez kattintson a jobb gombbal a felhőszolgáltatási projektre a megoldásban, majd kattintson a Közzététel gombra.

Bejelentkezés a Microsoft Azure közzétételhez

Kövesse a varázsló utasításait. Szükség esetén engedélyezze a távoli asztal használatát. A távoli asztal akkor hasznos, amikor valamilyen okból hibakeresést kell végeznie.

Ha elkészült a beállítások konfigurálásával, kattintson a Közzététel gombra.

Egy folyamatjelző jelenik meg a kimeneti ablakban, majd megnyílik a Microsoft Azure-tevékenységnapló ablak.

Microsoft Azure tevékenységnapló ablak

Az üzembe helyezés néhány percet vesz igénybe, majd a webes és/vagy feldolgozói szerepkörök el is indulnak az Azure-ban!

Naplók vizsgálata

A felhőszolgáltatás virtuális gépének elindulása és a Python telepítése után áttekintheti, hogy vannak-e a naplókban hibaüzenetek. Ezek a naplók a C:\Resources\Directory\{role}\LogFiles mappában találhatók. A PrepPython.err.txt fájlban legalább egy hiba található, amely akkor keletkezik, amikor a szkript megpróbálja észlelni, hogy a Python telepítve van-e. Az is előfordulhat, hogy a PipInstaller.err.txt jelzi a pip elavult verziójának használatát.

Következő lépések

A PVTS dokumentációban további információkat találhat a webes és feldolgozói szerepkörök használatáról Python Tools for Visual Studio eszközben:

Ha további részletekre kíváncsi az Azure-szolgáltatások webes és feldolgozói szerepkörökből történő használatáról, például az Azure Storage vagy a Service Bus használatáról, olvassa el a következő cikkeket: