Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide, Azure App Service için veri temelli bir Python Django web uygulaması dağıtmayı ve bunu diğer Azure hizmetlerine bağlamak için Hizmet Bağlayıcısı'nı kullanmayı öğreneceksiniz. Örnek web uygulaması, restoran ve inceleme bilgilerini bir PostgreSQL için Azure Veri Tabanı veritabanında, fotoğrafları ise bir Azure Depolama kapsayıcısında depolar.
Aşağıdaki görevleri tamamlamak için Azure CLI kullanırsınız:
- Python Django web uygulaması oluşturun ve Azure App Service'e dağıtın.
- PostgreSQL için Azure Veri Tabanı esnek bir sunucu ve veritabanı oluşturun.
- Azure Depolama hesabı ve kapsayıcısı oluşturun.
- Web uygulamasını, Service Connector kullanarak yönetilen kimlik doğrulama ile veritabanı ve depolama konteynerine bağlayın.
- Web uygulamasıyla etkileşime geçin.
Not
Bu öğretici, App Service Deploy a Python Django web app with PostgreSQL in Azure öğreticisine benzer, ancak diğer Azure kaynaklarına erişmek için Azure rol tabanlı erişim denetimine sahip sistem tarafından atanan parolasız yönetilen kimliği kullanır. Bu makalenin Parolasız hizmet bağlantısı oluşturma bölümünde, Service Connector'ın bağlantı işlemini nasıl kolaylaştıracağı gösterilir.
Web uygulaması Python
Önkoşullar
Service Connector'ı destekleyen ve yeterli App Service desteği ve kotasına sahip bir Azure bölgesinde, öğretici kaynakları için yazma ve rol atama izinlerine sahip bir Azure aboneliği.
Öğretici adımlarını çalıştırmak için Azure Cloud Shell veya yerel olarak çalıştırmayı tercih ediyorsanız:
-
Azure CLI 2.87.0 veya daha sonrasını kurun. Sürümünüzü denetlemek için komutunu çalıştırın
az version. Yükseltmek için komutunu çalıştırınaz upgrade. - Python 3'ü yükleyin.
- Git'i yükleyin.
-
az loginkullanarak ve istemleri izleyerek Azure oturum açın.
-
Azure CLI 2.87.0 veya daha sonrasını kurun. Sürümünüzü denetlemek için komutunu çalıştırın
Ortamınızı ayarlama
Aboneliğiniz için
Microsoft.ServiceLinkerveMicrosoft.DBforPostgreSQLkaynak sağlayıcılarını kaydedin.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLService Connector şifresiz uzantısının en son sürümünü yükleyin. Parametre
--upgrade, zaten yüklüyse uzantını günceller:az extension add --name serviceconnector-passwordless --upgrade
Örnek uygulamayı kopyalama
Important
Eğitimin örnek deposu 15 Haziran 2026'da arşivlendi ve artık aktif olarak tutulmamaktadır. Sadece bu eğitimi tamamlamak için kullanın.
Örnek uygulama deposunu kopyalayın.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternatif olarak, uygulamayı serviceconnector-webapp-postgresql-django-passwordless deposundan indirebilir ve serviceconnector-webapp-postgresql-django-passwordless adlı bir klasöre indirebilirsiniz.
Dizini
cd serviceconnector-webapp-postgresql-django-passwordlessile depo dizinine değiştirin ve bu dizinden kalan tüm komutları çalıştırın.
Örnek uygulamada, web uygulaması üretim ayarları azureproject/production.py dosyasındadır. Geliştirme ayarları azureproject/settings.py'da. Üretim ayarları, Django'yu herhangi bir üretim ortamında çalışacak şekilde yapılandırabilir ve App Service'e özgü değildir.
Ortam değişkeni ayarlandığında uygulama üretim ayarlarını WEBSITE_HOSTNAME kullanır. App Service bu değişkeni uygulamanın ana ismine ayarlıyor, örneğin msdocs-django.azurewebsites.net.
Daha fazla bilgi için bkz. Django dağıtım denetim listesi. Ayrıca bkz. Azure üzerinde Django için Üretim ayarları.
İlk ortam değişkenlerini tanımlama
Aşağıdaki kod, bu öğretici için gerekli ortam değişkenlerini tanımlar.
-
LOCATION, aboneliğinizin kaynakları oluşturmak için yeterli kotaya sahip olduğu ve PostgreSQL için Azure Veri Tabanı için herhangi bir kısıtlama olmadığı bir Azure bölgesi olmalıdır. - PostgreSQL yönetici şifresi, bu kategorilerden en az üçünden 8 ila 128 karakter içermelidir: büyük harfler, küçük harfler, rakamlar ve alfanumerik olmayan karakterler. Bu eğitimde şifrede
$kullanmayın.
Aşağıdaki ortam değişkenlerini ayarlayın, yerine geçerli bir değer verin
<region>: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"PostgreSQL yöneticisi şifresini göstermeden veya shell geçmişinize eklemeden okuyun:
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoTüm proje kaynaklarını içerecek bir kaynak grubu oluşturun. Kaynak grubu adı önbelleğe alınır ve sonraki komutlara otomatik olarak uygulanır.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Uygulama kodunu App Service'e dağıtma
App Service'te uygulama barındırıcısını oluşturun, derleme otomasyonunu etkinleştirin ve örnek uygulama kodunu dağıtın. Bu eğitimde kullanılan Basic (B1) App Service planı, Azure aboneliğinizde bir maliyet taşır. Güncel fiyatlar için bkz. App Service fiyatlandırması.
Arşivlenen örneklemin requirements.txt dosyası, start.sh tarafından kullanılan Gunicorn sunucusunu belirtmez. Eğer mevcut değilse, yerel kopyanıza ekleyin:
grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txtBasic (B1) fiyatlandırma katmanında bir Linux App Service planı oluşturun ve ardından örnekin başlangıç komutuyla web uygulamasını oluşturun:
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"Dağıtımın requirements.txt içindeki paketleri yüklemesi için App Service derleme otomasyonunu etkinleştirin:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueDepo kökünden, örnek uygulamanın bir ZIP dosyasını oluşturun ve az webapp deploy kullanarak dağıtın:
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.zipDağıtım komutu App Service ZIP dosyasını kabul ettiğinde başarılı olur. Yapı App Service'te devam ediyor ve birkaç dakika sürebilir.
Azure'da PostgreSQL veritabanı oluştur
PostgreSQL için Azure Veri Tabanı esnek sunucu ve uygulama verilerini depolamak için veritabanı oluşturun.
PostgreSQL için Azure Veri Tabanı sunucusunu oluşturun:
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 EnabledPostgreSQL esnek sunucu sağlama durumu
Succeededolduğunda komut başarılı olur.Sunucu oluşturulduktan sonra mevcut shell'den yönetici şifresini kaldırın:
unset ADMIN_PWAz postgres flexible-server db kullanarak veritabanını oluştur:
az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name $DB_SERVER_NAME \ --name $DATABASE_NAME
Parolasız hizmet bağlantısı oluşturma
Azure web uygulamasını PostgreSQL veritabanına parolasız yönetilen kimlik doğrulaması kullanarak bağlayan bir hizmet bağlayıcısı eklemek için az webapp connection create postgres-flexible komutunu kullanın. Aşağıdaki komut, PostgreSQL için Azure Veri Tabanı'yi yönetilen kimlik ve Azure rol tabanlı erişim kontrolünü kullanacak şekilde yapılandırır. Komut çıktısı, Service Connector'ın gerçekleştirdiği eylemleri listeler.
Komut, veritabanı bağlantı bilgilerini içeren bir uygulama ayarı oluşturur AZURE_POSTGRESQL_CONNECTIONSTRING . Örnek bu ayarı azureproject/production.py dosyasında okuyor. Daha fazla bilgi için bkz. Ortam değişkenlerine erişme.
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
Bağlantı komut PostgreSQL esnek sunucu bağlantısını raporlayıp uygulama ayarını oluşturduğunda AZURE_POSTGRESQL_CONNECTIONSTRING hazır olur.
Django web uygulamasını Service Connector ile Azure Depolama'a bağlama
Bir Azure depolama hesabı oluşturun ve ardından az webapp bağlantısı ile web uygulamasına bağlanmak için storage blob oluşturun. Bağlantı komutu aşağıdaki işlemleri yapar:
- Web uygulamasında sistem tarafından atanan yönetilen kimliği etkinleştirir.
- Depolama hesabına Storage Blob Data Contributor rolüne sahip web uygulamasını ekliyor.
- Depolama hesabı ağını web uygulamasından erişimi kabul etmek üzere yapılandırılır.
- Azure Depolama hesabı için
AZURE_STORAGEBLOB_RESOURCEENDPOINTadlı bir ortam değişkeni oluşturur.
Azure Depolama hesabı oluşturma
Yerel olarak yedekli depolama ile genel amaçlı bir v2 depolama hesabı oluşturun:
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name $STORAGE_ACCOUNT_NAME \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2
Şifresiz bir depolama bağlantısı oluşturun
Depolama hesabına şifresiz bağlantı oluşturun:
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
Komut depolama hesabı bağlantısını bildirdiğinde ve AZURE_STORAGEBLOB_RESOURCEENDPOINT uygulama ayarını oluşturduğunda bağlantı hazırdır.
Örnek fotoğraf konteynerini yapılandırın
Bu arşivlenmiş örnek uygulama için bloblara genel okuma erişimi sağlamak üzere Azure Depolama hesabını güncelledin.
Not
Bu arşivlenmiş örnek, fotoğrafları görüntülemek için doğrudan blob URL'leri kullanır; bu nedenle öğretici,
photoskapsayıcısı için anonim okuma erişimini etkinleştirir. Bu ayar örnekle özgüdür ve Service Connector tarafından zorunlu değildir. Üretim uygulamaları için konteynerleri gizli tutun ve kontrollü bir teslimat yöntemi kullanın; örneğin kimlik doğrulamalı uygulama uç noktası.az storage account update \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access trueOturum açılmış kullanıcı izninizi Microsoft Entra kimlik doğrulaması kullanarak konteyneri oluşturmak için atayin:
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_IDBu komut için ayar,
MSYS_NO_PATHCONVWindows'ta Git Bash'in Azure kaynak kimliğini Windows yoluna dönüştürmesini engeller. Azure Cloud Shell veya diğer Bash ortamlarında hiçbir etkisi yoktur. Rol atamalarının etkili hale gelmesi birkaç dakika sürebilir.az storage container create komutunu kullanarak
photosadlı bir kapsayıcı oluşturun ve bu kapsayıcıdaki bloblara anonim okuma erişimine izin verin: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_ENDPOINTYanıt,
photoskonteyneri için"created": truegösterdiğinde konteyner hazırdır.
Azure'da Python web uygulamasını test edin
Azure Restaurant Review web uygulamasını açın ve test edin. Uygulama azure.identity paketini ve sınıfını DefaultAzureCredential kullanır. Uygulama Azure çalışırken, DefaultAzureCredential App Service için yönetilen bir kimliğin ne zaman mevcut olduğunu otomatik olarak algılar ve Azure Depolama ve PostgreSQL için Azure Veri Tabanı kaynaklarına erişmek için bunu kullanır. Uygulamanın bu kaynaklara erişmek için depolama anahtarları, sertifikalar veya kimlik bilgileri sağlaması gerekmez.
Yerel Azure CLI yüklemesi için, uygulamayı varsayılan tarayıcınızda açmak için
az webapp browsekullanabilirsiniz:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell yerel tarayıcıyı açamaz, bu nedenle
az webapp browsekomutunu desteklemez. Cloud Shell'ten, uygulamanın Azure portal sayfasının sağ üst köşesindeki Varsayılan alan alanı bağlantısını seçin.
Uygulamanın başlatılması bir veya iki dakika sürebilir. Örnek uygulama olmayan bir varsayılan uygulama sayfası görürseniz, bir dakika bekleyin ve tarayıcıyı yenileyin.
Bir restoran ve fotoğraflarla bazı incelemeler ekleyerek örnek uygulamanın işlevselliğini test edin. Uygulama aşağıdaki ekran görüntüsüne benzemelidir:
Kaynakları temizleme
Devam eden ücretlendirmelerden kaçınmak için, bu öğretici için oluşturduğunuz kaynakları, bunları içeren kaynak grubunu silerek silebilirsiniz. Komutu çalıştırmadan önce artık uygulamaya veya kaynaklara ihtiyacınız olmadığından emin olun.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Komut hemen dönerken, Azure kaynakları siler.
Sorun giderme
Uygulama başlamazsa veya kaynaklarına bağlanmazsa App Service dağıtım günlüklerini denetleyin, AZURE_STORAGEBLOB_RESOURCEENDPOINT ve AZURE_POSTGRESQL_CONNECTIONSTRING uygulama ayarlarının mevcut olduğunu doğrulayın ve Azure rol atamalarının etkili olması için birkaç dakika bekleyin. Python uygulaması başlatma sorunları için aşağıdaki makaleye bakınız:
İlgili içerik
- Hızlı Başlangıç: Azure App Service'i Service Connector ile veritabanlarına ve hizmetlere bağlama
- IaC araçlarını kullanarak hizmet bağlantıları oluşturma
- Azure'da PostgreSQL ile Python Django web uygulaması dağıtın