Tutorial: Menyambungkan aplikasi web Django ke Azure PostgreSQL menggunakan Konektor Layanan

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.30.0 atau yang lebih tinggi. Untuk memeriksa versi Anda, jalankan az --version. Untuk meningkatkan, jalankan az upgrade.
    2. Masuk ke Azure dengan menggunakan az login dan mengikuti perintah.

Atur lingkungan Anda

  1. Pastikan langganan Anda terdaftar untuk menggunakan penyedia sumber daya Microsoft.ServiceLinker dan Microsoft.DBforPostgreSQL. Jika tidak, jalankan az provider register -n Microsoft.[name of service] untuk mendaftarkan penyedia.

  2. Instal ekstensi Azure CLI berikut:

    az extension add --name serviceconnector-passwordless --upgrade
    az extension add --name rdbms-connect
    

Mengkloning aplikasi sampel

  1. Klon repositori aplikasi sampel.

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

    Atau, Anda dapat mengunduh aplikasi dari https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless dan membuka zipnya ke folder yang disebut 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 sampel, pengaturan produksi aplikasi web ada di file azuresite/production.py . Pengaturan pengembangan berada di azuresite/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. Untuk string koneksi Azure Postgres, App Service secara otomatis mengatur variabel ini ke URL aplikasi web, seperti https://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.
  • ADMIN_PW harus berisi 8 hingga 128 karakter dalam setidaknya tiga dari empat kategori huruf besar, huruf kecil, angka, dan karakter non-infanumerik, tidak termasuk $.
  1. Siapkan variabel lingkungan berikut, ganti placeholder <region> dan <database password> dengan nilai yang valid.

    LOCATION="<region>"
    RAND_ID=$RANDOM
    RESOURCE_GROUP_NAME="msdocs-mi-web-app"
    APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID"
    DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID"
    ADMIN_USER="demoadmin"
    ADMIN_PW="<database password>"
    
  2. 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 dan sebarkan kode aplikasi sampel ke host tersebut. Perintah az webapp up melakukan tindakan berikut:

  • Membuat paket App Service di tingkat harga Dasar (B1).
  • Membuat aplikasi App Service.
  • Mengaktifkan pengelogan default untuk aplikasi.
  • Mengunggah repositori menggunakan penyebaran ZIP dengan otomatisasi pembangunan diaktifkan.
  • Membangun aplikasi.

Dalam kode, sku menentukan CPU, memori, dan biaya paket App Service. Paket layanan Dasar (B1) dikenakan biaya kecil dalam langganan Azure Anda. Anda dapat menghilangkan --sku parameter untuk menggunakan SKU default, biasanya P1v3 (Premium v3). Untuk daftar lengkap paket App Service, lihat Harga App Service.

  1. Dari folder repositori serviceconnector-webapp-postgresql-django-passwordless , jalankan perintah berikut az webapp up :

    az webapp up \
      --resource-group $RESOURCE_GROUP_NAME \
      --location $LOCATION \
      --name $APP_SERVICE_NAME \
      --runtime PYTHON:3.10 \
      --sku B1
    

    Catatan

    Penyebaran membutuhkan waktu beberapa menit, dan perintah dapat menggantung atau kehabisan waktu, terutama pada SKU Dasar. Setelah aplikasi berhasil dibangun dan output menunjukkan Starting the site, Anda dapat keluar dari perintah dengan memilih Ctrl+C.

  2. Konfigurasikan aplikasi untuk menggunakan file start.sh repositori dengan menjalankan perintah az webapp config set .

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --startup-file "start.sh"
    

Membuat database Postgres di Azure

Buat database Azure Database for PostgreSQL untuk menyimpan informasi aplikasi. Perintah az postgres flexible-server create membuat server fleksibel Azure Database for PostgreSQL dalam grup sumber daya yang ditentukan yang memiliki:

  • Nama server yang ditentukan dalam --name parameter . Nama harus unik di seluruh Azure.
  • SKU ditentukan dalam --sku-name parameter .
  • Nama pengguna dan kata sandi akun administrator yang ditentukan dalam parameter --admin-user dan --admin-password.
  1. Buat server Azure Database for PostgreSQL. Jika diminta untuk mengaktifkan akses ke alamat IP klien saat ini, masukkan y untuk ya.

    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
    
  2. Jika Anda tidak diminta untuk mengaktifkan akses ke alamat IP klien Anda saat ini, konfigurasikan aturan firewall di server Anda dengan perintah az postgres flexible-server firewall-rule create . Aturan ini memungkinkan akses lingkungan lokal Anda ke server.

    IP_ADDRESS=<your IP address>
    az postgres flexible-server firewall-rule create \
       --resource-group $RESOURCE_GROUP_NAME \
       --name $DB_SERVER_NAME \
       --rule-name AllowMyIP \
       --start-ip-address $IP_ADDRESS \
       --end-ip-address $IP_ADDRESS
    

    Petunjuk / Saran

    Gunakan alat atau situs web apa pun yang menunjukkan alamat IP Anda untuk menggantikan <your IP address> di dalam perintah. Misalnya, Anda dapat menggunakan Apa Alamat IP Saya?.

  3. Buat database bernama restaurant di server dengan menggunakan perintah az postgres flexible-server execute .

    az postgres flexible-server execute \
      --name $DB_SERVER_NAME \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --database-name postgres \
      --querytext 'create database restaurant;'
    

Membuat koneksi layanan tanpa kata sandi

Gunakan az webapp connection create postgres-flexible untuk menambahkan konektor layanan yang menghubungkan aplikasi web Azure ke database Postgres menggunakan autentikasi identitas terkelola tanpa 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 membuat variabel lingkungan bernama AZURE_POSTGRESQL_CONNECTIONSTRING yang menyediakan informasi koneksi database untuk aplikasi. Kode aplikasi mengakses variabel lingkungan aplikasi dengan pernyataan seperti os.environ.get('AZURE_POSTGRESQL_HOST'). 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 restaurant \
  --client-type python \
  --system-identity

Membuat dan menyambungkan ke akun penyimpanan

Gunakan az webapp connection create storage-blob untuk membuat akun penyimpanan Azure dan konektor layanan. Perintah mengambil tindakan berikut:

  • Mengaktifkan identitas terkelola yang ditetapkan sistem pada aplikasi web.
  • Menambahkan aplikasi web dengan peran Storage Blob Data Contributor ke akun penyimpanan baru.
  • Mengonfigurasi jaringan akun penyimpanan untuk menerima akses dari aplikasi web.
  • Membuat variabel lingkungan bernama AZURE_STORAGEBLOB_RESOURCEENDPOINT untuk akun Azure Storage.
  1. Jalankan perintah berikut untuk membuat akun penyimpanan dan koneksi:

    STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \
      --new true \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --target-resource-group $RESOURCE_GROUP_NAME \
      --client-type python \
      --system-identity \
      --query configurations[].value \
      --output tsv)
    STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))
    
  2. Perbarui akun penyimpanan untuk mengizinkan akses publik blob bagi pengguna aplikasi untuk mengakses foto.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  3. Gunakan az storage container create untuk membuat kontainer yang disebut photos di akun penyimpanan, dan izinkan akses baca publik anonim ke blob di kontainer baru.

    # Set the BLOB_ENDPOINT variable
    BLOB_ENDPOINT=$(az storage account show --name $STORAGE_ACCOUNT_NAME --query "primaryEndpoints.blob" | sed 's/"//g')
    echo $BLOB_ENDPOINT
    
    # Create the storage container using the BLOB_ENDPOINT variable
    az storage container create \
      --account-name $STORAGE_ACCOUNT_NAME \
      --name photos \
      --public-access blob \
      --auth-mode login \
      --blob-endpoint $BLOB_ENDPOINT
    

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.azurewebsites.net --resource-group $RESOURCE_GROUP_NAME
    
  • Azure Cloud Shell tidak dapat membuka browser lokal, sehingga tidak mendukung perintah az webapp browse. Dari Cloud Shell, cara termudah untuk membuka aplikasi web adalah memilih tautan domain Default di kanan atas halaman portal Azure dari 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:

Screenshot aplikasi sampel memperlihatkan fungsionalitas ulasan restoran menggunakan App Service, Azure Database for PostgreSQL, dan Azure Storage.

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

Menghapus semua sumber daya bisa memakan waktu. Argumen --no-wait memungkinkan perintah untuk segera kembali.

Troubleshooting

Jika Anda mengalami masalah dalam menjalankan tutorial ini, lihat sumber daya berikut: