Tutorial: Hubungkan aplikasi web Django ke Azure Database for PostgreSQL menggunakan Service Connector

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:

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:

    1. Instal Azure CLI 2.87.0 atau versi yang lebih baru. Untuk memeriksa versi Anda, jalankan az version. Untuk meningkatkan, jalankan az upgrade.
    2. Instal Python 3.
    3. Pasang Git.
    4. Masuk ke Azure dengan menggunakan az login dan mengikuti perintah.

Atur lingkungan Anda

  1. Daftarkan penyedia sumber daya Microsoft.ServiceLinker dan Microsoft.DBforPostgreSQL untuk langganan Anda.

    az provider register --namespace Microsoft.ServiceLinker
    az provider register --namespace Microsoft.DBforPostgreSQL
    
  2. Instal versi terbaru dari ekstensi tanpa kata sandi Service Connector. Parameter --upgrade akan 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.

  1. Klon repositori aplikasi sampel.

    git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
    

    Sebagai alternatif, Anda dapat mengunduh aplikasi dari repositori serviceconnector-webapp-postgresql-django-passwordless dan mengunzipnya ke dalam folder bernama serviceconnector-webapp-postgresql-django-passwordless.

  2. Ubah direktori ke folder repositori menggunakan cd serviceconnector-webapp-postgresql-django-passwordless dan 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.

  • LOCATION harus 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.
  1. 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"
    
  2. Baca kata sandi administrator PostgreSQL tanpa menampilkannya atau menambahkannya ke riwayat shell Anda:

    read -s -p "PostgreSQL administrator password: " ADMIN_PW && echo
    
  3. Buat 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.

  1. 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.txt
    
  2. Buat 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"
    
  3. 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=true
    
  4. Dari 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.zip
    

    Perintah 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.

  1. 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 Enabled
    

    Perintah ini berhasil ketika status penyediaan server fleksibel PostgreSQL adalah Succeeded.

  2. Hapus kata sandi administrator dari shell saat ini setelah server dibuat:

    unset ADMIN_PW
    
  3. Buat 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_RESOURCEENDPOINT untuk 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

  1. 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 photos kontainer. 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 true
    
  2. Tetapkan 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_ID
    

    Pengaturan MSYS_NO_PATHCONV untuk 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.

  3. Gunakan az storage container create untuk membuat kontainer yang dipanggil photos dan 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_ENDPOINT
    

    Kontainer siap saat respons muncul "created": true untuk photos kontainer.

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 browse untuk membuka aplikasi di browser default Anda:

    az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME
    
  • Azure 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:

Tangkapan layar aplikasi web ulasan restoran contoh yang menampilkan entri restoran dengan ulasan pelanggan dan foto yang diunggah.

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: