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.
Dalam tutorial ini, Anda mempelajari cara menyebarkan aplikasi web Python Django berbasis data untuk Azure App Service dan menggunakan Konektor Layanan untuk menyambungkannya ke layanan Azure lainnya. Contoh aplikasi web menyimpan informasi restoran dan ulasan dalam database Azure Database for PostgreSQL dan menyimpan foto dalam kontainer Azure Storage.
Anda menggunakan Azure CLI untuk menyelesaikan tugas berikut:
- Buat aplikasi web Python Django dan sebarkan ke Azure App Service.
- Buat server dan database fleksibel Azure Database for PostgreSQL.
- Buat akun dan kontainer Azure Storage.
- Hubungkan aplikasi web ke database dan kontainer penyimpanan menggunakan Service Connector dengan autentikasi identitas terkelola .
- Berinteraksi dengan aplikasi web.
Catatan
Tutorial ini mirip dengan tutorial App Service Deploy a Python Django web app dengan PostgreSQL di Azure, tetapi menggunakan identitas terkelola tanpa kata sandi yang ditetapkan sistem dengan kontrol akses berbasis peran Azure untuk mengakses sumber daya Azure lainnya. Bagian Buat koneksi layanan tanpa kata sandi di artikel ini memperlihatkan bagaimana Konektor Layanan menyederhanakan proses koneksi.
Aplikasi web menggunakan DefaultAzureCredential kelas pustaka klien Python Azure Identity untuk secara otomatis mendeteksi kapan identitas terkelola ada dan menggunakannya untuk mengakses sumber daya lain.
Prasyarat
Langganan Azure dengan izin tulis dan penugasan peran untuk sumber daya tutorial, di wilayah Azure yang mendukung Service Connector dan memiliki dukungan dan kuota App Service yang memadai.
Azure Cloud Shell untuk menjalankan langkah-langkah tutorial, atau jika Anda lebih suka menjalankan secara lokal:
Atur lingkungan Anda
Daftarkan penyedia sumber daya
Microsoft.ServiceLinkerdanMicrosoft.DBforPostgreSQLuntuk langganan Anda.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLInstal versi terbaru dari ekstensi tanpa kata sandi Service Connector. Parameter
--upgradeakan memperbarui ekstensi jika sudah terpasang:az extension add --name serviceconnector-passwordless --upgrade
Mengkloning aplikasi sampel
Important
Repositori contoh tutorial diarsipkan pada 15 Juni 2026, dan kini tidak lagi dipelihara secara aktif. Gunakan hanya untuk menyelesaikan tutorial ini.
Klon repositori aplikasi sampel.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitSebagai alternatif, Anda dapat mengunduh aplikasi dari repositori serviceconnector-webapp-postgresql-django-passwordless dan mengunzipnya ke dalam folder bernama serviceconnector-webapp-postgresql-django-passwordless.
Ubah direktori ke folder repositori menggunakan
cd serviceconnector-webapp-postgresql-django-passwordlessdan jalankan semua perintah yang tersisa dari folder tersebut.
Di aplikasi contoh, pengaturan produksi aplikasi web ada di file azureproject/production.py . Pengaturan pengembangan menggunakan azureproject/settings.py. Pengaturan produksi mengonfigurasi Django untuk berjalan di lingkungan produksi apa pun dan tidak khusus untuk App Service.
Aplikasi ini menggunakan pengaturan produksi saat variabel lingkungan WEBSITE_HOSTNAME ditetapkan. App Service mengatur variabel ini ke nama host aplikasi, seperti msdocs-django.azurewebsites.net.
Untuk informasi selengkapnya, lihat daftar pemeriksaan implementasi Django. Lihat juga pengaturan Production untuk Django pada Azure.
Menentukan variabel lingkungan awal
Kode berikut mendefinisikan variabel lingkungan yang diperlukan untuk tutorial ini.
-
LOCATIONharus menjadi wilayah Azure di mana langganan Anda memiliki kuota yang cukup untuk membuat resource dan tidak memberikan batasan pada Azure Database untuk PostgreSQL untuk langganan Anda. - Kata sandi administrator PostgreSQL harus terdiri dari 8 hingga 128 karakter dari setidaknya tiga kategori ini: huruf kapital, huruf kecil, angka, dan karakter nonalfanumerik. Jangan gunakan
$kata sandi untuk tutorial ini.
Atur variabel lingkungan berikut, menggantinya
<region>dengan nilai yang valid:LOCATION="<region>" RAND_ID=$RANDOM$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app-$RAND_ID" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" APP_SERVICE_PLAN_NAME="$APP_SERVICE_NAME-plan" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" DATABASE_NAME="restaurant" STORAGE_ACCOUNT_NAME="account$RAND_ID" ADMIN_USER="demoadmin"Baca kata sandi administrator PostgreSQL tanpa menampilkannya atau menambahkannya ke riwayat shell Anda:
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoBuat grup sumber daya untuk berisi semua sumber daya proyek. Nama grup sumber daya di-cache dan secara otomatis diterapkan ke perintah-perintah berikutnya.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Menyebarkan kode aplikasi ke App Service
Buat host aplikasi di App Service, aktifkan otomatisasi build, dan terapkan kode aplikasi contoh. Paket Layanan Aplikasi Basic (B1) yang digunakan dalam tutorial ini dikenakan biaya pada langganan Azure Anda. Untuk harga terkini, lihat harga App Service.
File requirements.txt dari sampel yang diarsipkan tidak menyatakan server Gunicorn yang digunakan oleh start.sh. Tambahkan ke salinan lokal Anda jika belum ada:
grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txtBuat paket Linux App Service di tingkat harga Basic (B1), lalu buat aplikasi web dengan perintah startup sampel:
az appservice plan create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_PLAN_NAME \ --location $LOCATION \ --sku B1 \ --is-linux az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --plan $APP_SERVICE_PLAN_NAME \ --runtime "PYTHON:3.14" \ --startup-file "start.sh"Aktifkan otomatisasi build App Service agar penyebaran menginstal paket dalam requirements.txt:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueDari root repositori, buat file ZIP dari aplikasi contoh dan terapkan menggunakan az webapp deploy:
rm -f app.zip python -m zipfile -c app.zip * az webapp deploy \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --src-path app.zip \ --type zip \ --track-status false rm app.zipPerintah deployment berhasil ketika App Service menerima file ZIP. Proses pembangunan berlanjut di App Service dan dapat memakan waktu beberapa menit.
Buat database PostgreSQL di Azure
Buat Azure Database for PostgreSQL server dan database fleksibel untuk menyimpan data aplikasi.
Buat server Azure Database for PostgreSQL:
az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --sku-name Standard_D2ds_v4 \ --microsoft-entra-auth EnabledPerintah ini berhasil ketika status penyediaan server fleksibel PostgreSQL adalah
Succeeded.Hapus kata sandi administrator dari shell saat ini setelah server dibuat:
unset ADMIN_PWBuat database menggunakan az postgres flexible-server db create:
az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name $DB_SERVER_NAME \ --name $DATABASE_NAME
Membuat koneksi layanan tanpa kata sandi
Gunakan az webapp connection create postgres-flexible untuk menambahkan konektor layanan yang menghubungkan aplikasi web Azure ke basis data PostgreSQL menggunakan autentikasi identitas terkelola tanpa kata sandi. Perintah berikut mengonfigurasi Azure Database for PostgreSQL untuk menggunakan identitas terkelola dan Azure kontrol akses berbasis peran. Output perintah mencantumkan tindakan-tindakan yang dilakukan oleh Service Connector.
Perintah ini membuat pengaturan aplikasi bernama yang AZURE_POSTGRESQL_CONNECTIONSTRING berisi informasi koneksi database. Sampel ini membaca setelan ini dalam azureproject/production.py. Untuk informasi selengkapnya, lihat Mengakses variabel lingkungan.
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--server $DB_SERVER_NAME \
--database $DATABASE_NAME \
--client-type python \
--system-identity \
--yes
Koneksi siap ketika perintah melaporkan koneksi server fleksibel PostgreSQL dan membuat AZURE_POSTGRESQL_CONNECTIONSTRING pengaturan aplikasi.
Hubungkan aplikasi web Django ke Azure Storage dengan Service Connector
Buat akun penyimpanan Azure, lalu gunakan az webapp connection create storage-blob untuk menghubungkannya ke web app. Perintah koneksi melakukan tindakan berikut:
- Mengaktifkan identitas terkelola yang ditetapkan sistem pada aplikasi web.
- Menambahkan aplikasi web dengan peran Storage Blob Data Contributor ke akun penyimpanan tersebut.
- Mengonfigurasi jaringan akun penyimpanan untuk menerima akses dari aplikasi web.
- Membuat variabel lingkungan bernama
AZURE_STORAGEBLOB_RESOURCEENDPOINTuntuk akun Azure Storage.
Buat akun Azure Storage
Buat akun penyimpanan v2 serbaguna dengan penyimpanan lokal yang redundan:
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name $STORAGE_ACCOUNT_NAME \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2
Buat koneksi penyimpanan tanpa kata sandi
Buat koneksi tanpa kata sandi ke akun penyimpanan:
az webapp connection create storage-blob \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--account $STORAGE_ACCOUNT_NAME \
--client-type python \
--system-identity
Koneksi siap ketika perintah melaporkan koneksi akun penyimpanan dan membuat AZURE_STORAGEBLOB_RESOURCEENDPOINT pengaturan aplikasi.
Konfigurasikan kontainer foto contoh
Perbarui akun Azure Storage untuk memungkinkan akses baca publik ke blob untuk aplikasi contoh yang diarsipkan ini.
Catatan
Contoh arsip ini menggunakan URL blob langsung untuk menampilkan foto, sehingga tutorial memungkinkan akses baca anonim ke
photoskontainer. Pengaturan ini spesifik untuk sampel dan tidak diwajibkan oleh Service Connector. Untuk aplikasi produksi, jaga kontainer tetap privat dan gunakan metode pengiriman yang terkontrol, seperti endpoint aplikasi yang terautentikasi.az storage account update \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access trueTetapkan izin pengguna yang masuk untuk membuat kontainer menggunakan autentikasi Microsoft Entra:
SIGNED_IN_USER_ID=$(az ad signed-in-user show --query id --output tsv) STORAGE_ACCOUNT_ID=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query id \ --output tsv) MSYS_NO_PATHCONV=1 az role assignment create \ --assignee-object-id $SIGNED_IN_USER_ID \ --assignee-principal-type User \ --role "Storage Blob Data Contributor" \ --scope $STORAGE_ACCOUNT_IDPengaturan
MSYS_NO_PATHCONVuntuk perintah ini mencegah Git Bash di Windows mengonversi ID sumber daya Azure menjadi jalur Windows. Ini tidak berpengaruh di Azure Cloud Shell atau lingkungan Bash lainnya. Penempatan peran bisa memakan waktu beberapa menit untuk menjadi efektif.Gunakan az storage container create untuk membuat kontainer yang dipanggil
photosdan izinkan akses baca anonim ke blob di kontainer tersebut:BLOB_ENDPOINT=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query primaryEndpoints.blob \ --output tsv) az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINTKontainer siap saat respons muncul
"created": trueuntukphotoskontainer.
Menguji aplikasi web Python di Azure
Buka dan uji aplikasi web Azure Restaurant Review. Aplikasi ini menggunakan paket azure.identity dan kelasnya DefaultAzureCredential . Saat aplikasi berjalan di Azure, DefaultAzureCredential secara otomatis mendeteksi kapan identitas terkelola ada untuk App Service, dan menggunakannya untuk mengakses sumber daya Azure Storage dan Azure Database for PostgreSQL. Aplikasi ini tidak perlu menyediakan kunci penyimpanan, sertifikat, atau kredensial untuk mengakses sumber daya ini.
Untuk penginstalan Azure CLI lokal, Anda dapat menggunakan
az webapp browseuntuk membuka aplikasi di browser default Anda:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell tidak dapat membuka browser lokal, sehingga tidak mendukung perintah
az webapp browse. Dari Cloud Shell, pilih tautan domain Default di pojok kanan atas halaman portal Azure aplikasi.
Diperlukan waktu satu atau dua menit agar aplikasi dapat dimulai. Jika Anda melihat halaman aplikasi default yang bukan aplikasi sampel, tunggu sebentar dan refresh browser.
Uji fungsionalitas aplikasi sampel dengan menambahkan restoran dan beberapa ulasan dengan foto. Aplikasi harus menyerupai cuplikan layar berikut:
Membersihkan sumber daya
Untuk menghindari biaya berkelanjutan, Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini dengan menghapus grup sumber daya yang mencakupnya. Pastikan Anda tidak lagi memerlukan aplikasi atau sumber daya sebelum menjalankan perintah.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Perintah akan segera kembali saat Azure menghapus sumber daya.
Troubleshooting
Jika aplikasi tidak dapat dijalankan atau tidak dapat terhubung ke sumber dayanya, periksa log penyebaran App Service, pastikan pengaturan aplikasi AZURE_POSTGRESQL_CONNECTIONSTRING dan AZURE_STORAGEBLOB_RESOURCEENDPOINT ada, dan tunggu beberapa menit hingga penugasan peran Azure diterapkan. Untuk masalah startup aplikasi Python, lihat artikel berikut: