Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Cloud Services (klasik) sekarang tidak digunakan lagi untuk semua pelanggan per 1 September 2024. Setiap penyebaran yang sedang berjalan akan dihentikan dan dimatikan oleh Microsoft dan data akan hilang secara permanen mulai Oktober 2024. Penyebaran baru harus menggunakan model penyebaran berbasis Azure Resource Manager baru Azure Cloud Services (dukungan yang diperluas).
Artikel ini memberikan gambaran umum tentang penggunaan peran web dan pekerja dengan menggunakan Python Tools for Visual Studio. Pelajari cara menggunakan Visual Studio untuk membuat dan menerapkan Cloud Service dasar yang menggunakan Python.
Prasyarat
- Visual Studio 2013, 2015, atau 2017
- Alat Python untuk Visual Studio (PTVS)
-
Alat Azure SDK untuk Visual Studio (VS) 2013 atau
Azure SDK Tools untuk Visual Studio 2015 atau
Alat Azure SDK untuk VS 2017 - Python 2,7 32-bit atau Python 3,8 32-bit
Nota
Untuk menyelesaikan tutorial ini, Anda memerlukan akun Azure. Anda dapat mengaktifkan manfaat pelanggan Visual Studio atau mendaftar untuk uji coba gratis.
Apa itu peran web dan pekerja Python?
Azure menyediakan tiga model komputasi untuk menjalankan aplikasi: fitur Web Apps di Azure App Service, Azure Virtual Machines, dan Azure Cloud Services. Ketiga model mendukung Python. Cloud Services, yang mencakup peran web dan peran pekerja, menyediakan Platform as a Service (PaaS). Dalam layanan cloud, peran web menyediakan server web Layanan Informasi Internet (IIS) yang khusus untuk menghosting aplikasi web frontend. Peran kerja dapat menjalankan tugas asinkron, berjalan dalam waktu lama, atau berkelanjutan yang independen dari interaksi atau input pengguna.
Untuk informasi selengkapnya, lihat Apa itu Cloud Service?.
Nota
Ingin membuat situs web sederhana?
Jika skenario Anda hanya melibatkan front-end situs web sederhana, pertimbangkan untuk menggunakan fitur Web Apps yang ringan di Azure App Service. Anda dapat dengan mudah meningkatkan ke Cloud Service saat aplikasi web Anda berkembang dan persyaratan Anda berubah. Lihat Pusat Pengembang Python untuk artikel yang membahas pengembangan fitur Web Apps di Azure App Service.
Pembuatan proyek
Di Visual Studio, Anda dapat memilih Azure Cloud Service dalam kotak dialog Proyek Baru , di bawah Python.
Dalam wizard Azure Cloud Service, Anda bisa membuat peran web dan pekerja baru.
Templat peran pekerja dilengkapi dengan kode boilerplate untuk terhubung ke akun penyimpanan Azure atau Azure Service Bus.
Anda dapat menambahkan peran web atau pekerja ke layanan awan yang ada kapan saja. Anda dapat memilih untuk menambahkan proyek yang ada dalam solusi Anda, atau membuat proyek baru.
Layanan awan Anda dapat berisi peran yang diterapkan dalam berbagai bahasa. Misalnya, Anda dapat menerapkan peran web Python menggunakan Django, dengan Python, atau dengan peran pekerja C#. Anda dapat dengan mudah berkomunikasi antara peran Anda menggunakan antrean Service Bus atau antrean penyimpanan data.
Instal Python di layanan awan
Peringatan
Skrip pengaturan yang diinstal dengan Visual Studio (pada saat artikel ini terakhir diperbarui) tidak berfungsi. Bagian ini menjelaskan solusinya.
Masalah utama dengan skrip penyiapan adalah bahwa mereka tidak menginstal Python. Pertama, tentukan dua tugas startup dalam file ServiceDefinition.csdef . Tugas pertama (PrepPython.ps1) mengunduh dan menginstal runtime Python. Tugas kedua (PipInstaller.ps1) menjalankan pip untuk menginstal dependensi apa pun yang mungkin Anda miliki.
Skrip berikut ditulis menargetkan Python 3.8. Jika Anda ingin menggunakan python versi 2.x, atur file variabel PYTHON2 ke aktif untuk dua tugas startup dan tugas runtime: <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>
Variabel PYTHON2 dan PYPATH harus ditambahkan ke tugas startup pekerja. Variabel PYPATH hanya digunakan jika variabel PYTHON2 diatur ke aktif.
<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>
Sampel 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>
Selanjutnya, buat file PrepPython.ps1 dan PipInstaller.ps1 di folder ./bin peran Anda.
PrepPython.ps1
Skrip ini menginstal python. Jika variabel lingkungan PYTHON2 diatur ke aktif, maka Python 2.7 diinstal, jika tidak, Python 3.8 diinstal.
[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
Skrip ini memanggil pip dan menginstal semua dependensi dalam file requirements.txt . Jika variabel lingkungan PYTHON2 diatur ke aktif, maka Python 2.7 digunakan, jika tidak, Python 3.8 digunakan.
$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"
}
}
Modifikasi LaunchWorker.ps1
Nota
Dalam proyek dengan peran pekerja, file LauncherWorker.ps1 dibutuhkan untuk menjalankan file startup. Dalam proyek peran web , file startup didefinisikan dalam properti proyek.
Bin\LaunchWorker.ps1 awalnya dibuat untuk melakukan banyak pekerjaan persiapan, tetapi tidak benar-benar berfungsi. Ganti konten dalam file tersebut dengan skrip berikut.
Skrip ini memanggil file worker.py dari proyek Python Anda. Jika variabel lingkungan PYTHON2 diatur ke aktif, maka Python 2.7 digunakan, jika tidak, Python 3.8 digunakan.
$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
Templat Visual Studio mungkin membuat file ps.cmd di folder ./bin . Skrip shell ini memanggil skrip pembungkus PowerShell sebelumnya dan menyediakan pengelogan berdasarkan nama pembungkus PowerShell yang disebut. Jika file ini tidak dibuat, skrip berikut akan ada di dalamnya:
@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"
Jalankan secara lokal
Jika Anda menetapkan proyek layanan awan sebagai proyek startup dan menekan F5, layanan awan berjalan di emulator Azure lokal.
Meskipun PTVS mendukung peluncuran di emulator, debugging (seperti titik henti) tidak berfungsi.
Untuk memeriksa kesalahan pada peran web dan peran pekerja, Anda dapat menetapkan proyek peran sebagai proyek awal dan periksa kesalahan itu sebagai gantinya. Anda juga dapat mengatur beberapa proyek startup. Klik kanan solusi lalu pilih Atur Proyek StartUp.
Menerbitkan ke Azure
Untuk menerbitkan, klik kanan proyek layanan awan dalam solusi lalu pilih Terbitkan.
Ikuti panduannya. Jika perlu, aktifkan desktop jarak jauh. Desktop jarak jauh berguna ketika Anda harus memecahkan masalah sesuatu.
Saat Anda selesai mengonfigurasi pengaturan, pilih Terbitkan.
Beberapa kemajuan muncul di jendela output, lalu Anda melihat jendela Log Aktivitas Microsoft Azure.
Penerapan membutuhkan waktu beberapa menit untuk diselesaikan, lalu peran web dan/atau pekerja Anda berjalan di Azure!
Menyelidiki log
Setelah mesin virtual layanan cloud dimulai dan menginstal Python, Anda dapat melihat log untuk menemukan pesan kegagalan. Log ini terletak di folder C:\Resources\Directory\{role}\LogFiles . PrepPython.err.txt memiliki setidaknya satu kesalahan di dalamnya dari ketika skrip mencoba mendeteksi apakah Python diinstal dan PipInstaller.err.txt mungkin mengeluh tentang versi pip yang sudah kedaluarsa.
Langkah berikutnya
Untuk informasi selengkapnya tentang bekerja dengan peran web dan peran pekerja di "Python Tools for Visual Studio", Anda dapat melihat dokumentasi PTVS.
Untuk detail selengkapnya tentang menggunakan layanan Azure dari peran web dan pekerja Anda, seperti menggunakan Azure Storage atau Azure Service Bus, lihat artikel berikut ini: