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.
- Yönetilen kimlik kimlik doğrulaması ile Hizmet Bağlayıcısı'nı kullanarak web uygulamasını veritabanına ve depolama kapsayıcısına 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.30.0 veya üzerini yükleyin. 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. -
az loginkullanarak ve istemleri izleyerek Azure oturum açın.
-
Azure CLI 2.30.0 veya üzerini yükleyin. Sürümünüzü denetlemek için komutunu çalıştırın
Ortamınızı ayarlama
Aboneliğinizin
Microsoft.ServiceLinkerveMicrosoft.DBforPostgreSQLkaynak sağlayıcılarını kullanacak şekilde kayıtlı olduğundan emin olun. Aksi takdirde, sağlayıcıları kaydetmek içinaz provider register -n Microsoft.[name of service]çalıştırın.Aşağıdaki Azure CLI uzantılarını yükleyin:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connect
Örnek uygulamayı kopyalama
Örnek uygulama deposunu kopyalayın.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternatif olarak, uygulamayı https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless'dan indirebilir ve serviceconnector-webapp-postgresql-django-passwordless adlı bir klasöre açabilirsiniz.
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ı azuresite/production.py dosyasındadır. Geliştirme ayarları azuresite/settings.py içindedir. Ü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. Azure Postgres bağlantı dizeleri için App Service bu değişkeni otomatik olarak https://msdocs-django.azurewebsites.net gibi web uygulamasının URL'sine ayarlar.
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. -
ADMIN_PWen azından büyük harfler, küçük harfler, rakamlar ve alfanümerik olmayan karakterler kategorilerinin dördünden üçünde 8 ila 128 karakter içermeli ve$hariç tutmalıdır.
Aşağıdaki ortam değişkenlerini ayarlayın,
<region>ve<database password>yer tutucularını geçerli değerlerle değiştirerek.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>"Tü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 ana bilgisayarını oluşturun ve örnek uygulama kodunu bu konağa dağıtın. Komut az webapp up aşağıdaki eylemleri gerçekleştirir:
- Temel (B1) fiyatlandırma katmanında bir App Service planı oluşturur.
- App Service uygulamasını oluşturur.
- Uygulama için varsayılan günlüğe kaydetmeyi etkinleştirir.
- Derleme otomasyonu etkinken ZIP dağıtımını kullanarak depoyu karşıya yükler.
- Uygulamayı oluşturur.
kodda, sku App Service planının CPU'sunu, belleğini ve maliyetini tanımlar. Temel (B1) hizmet planı, Azure aboneliğinizde küçük bir maliyete neden olur. Varsayılan SKU'yu, genellikle P1v3 (Premium v3) olanı kullanmak için --sku parametresini atlayabilirsiniz. App Service planlarının tam listesi için bkz. App Service fiyatlandırması.
serviceconnector-webapp-postgresql-django-passwordless repository klasöründe aşağıdaki
az webapp upkomutu çalıştırın:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.10 \ --sku B1Not
Dağıtım birkaç dakika sürer ve komut, özellikle Temel SKU'da takılabilir veya zaman aşımına uğrayabilir. Uygulama başarıyla derlenip çıktı gösterildikten
Starting the sitesonra Ctrl+C tuşlarını seçerek komutun dışından çıkabilirsiniz.az webapp config set komutunu çalıştırarak uygulamayı depo start.sh dosyasını kullanacak şekilde yapılandırın.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Azure'de Postgres veritabanını oluşturma
Uygulama bilgilerini depolamak için PostgreSQL için Azure Veri Tabanı veritabanını oluşturun. az postgres flexible-server create komutu, belirtilen kaynak grubunda aşağıdakilere sahip PostgreSQL için Azure Veri Tabanı esnek bir sunucu oluşturur:
- parametresinde
--namebelirtilen sunucu adı. Ad, Azure genelinde benzersiz olmalıdır. - parametresinde
--sku-namebelirtilen SKU. -
--admin-userve--admin-passwordparametrelerinde belirtilen yönetici hesabı kullanıcı adı ve parolası.
PostgreSQL için Azure Veri Tabanı sunucusunu oluşturun. Geçerli istemci IP adresine erişimi etkinleştirmeniz istenirse evet olarak girin
y.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 EnabledGeçerli istemci IP adresinize erişimi etkinleştirmeniz istenmezse az postgres flexible-server firewall-rule create komutuyla sunucunuzda bir güvenlik duvarı kuralı yapılandırın. Bu kural, yerel ortamınızın sunucuya erişmesine izin verir.
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_ADDRESSTavsiye
IP adresinizi gösteren herhangi bir aracı veya web sitesini kullanarak komut içerisine
<your IP address>ifadesi yerine IP adresinizi geçirin. Örneğin, IP Adresim Nedir? seçeneğini kullanabilirsiniz.restaurantkomutunu kullanarak sunucuda adlı bir veritabanı oluşturun.az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Parolasız hizmet bağlantısı oluşturma
az webapp connection create postgres-flexible kullanarak Azure web uygulamasını Parolasız yönetilen kimlik doğrulaması kullanarak Postgres veritabanına bağlayan bir hizmet bağlayıcısı ekleyin. 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.
komutu, uygulama için veritabanı bağlantı bilgilerini sağlayan adlı AZURE_POSTGRESQL_CONNECTIONSTRING bir ortam değişkeni oluşturur. Uygulama kodu, gibi os.environ.get('AZURE_POSTGRESQL_HOST')deyimlerle uygulama ortamı değişkenlerine erişir. 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 restaurant \
--client-type python \
--system-identity
Depolama hesabı oluşturma ve bu hesaba bağlanma
az webapp connection create storage-blob kullanarak Azure depolama hesabı ve hizmet bağlayıcısı oluşturun. komutu aşağıdaki eylemleri gerçekleştirir:
- Web uygulamasında sistem tarafından atanan yönetilen kimliği etkinleştirir.
- Depolama Blobu Veri Katkıda Bulunanı rolüne sahip web uygulamasını yeni depolama hesabına ekler.
- 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.
Depolama hesabını ve bağlantısını oluşturmak için aşağıdaki komutu çalıştırın:
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))Depolama hesabını, uygulama kullanıcılarının fotoğraflara erişmesi için blob genel erişimine izin verecek şekilde güncelleştirin.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessAz storage container create komutunu kullanarak depolama hesabında adlı
photosbir kapsayıcı oluşturun ve yeni kapsayıcıdaki bloblara anonim genel okuma erişimine izin verin.# 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
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.azurewebsites.net --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell yerel tarayıcıyı açamaz, bu nedenle
az webapp browsekomutunu desteklemez. Cloud Shell web uygulamasını açmanın en kolay yolu, uygulamanın Azure portalı sayfasının sağ üst kısmındaki Default etki alanı bağlantısını seçmektir.
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
Tüm kaynakların silinmesi biraz zaman alabilir.
--no-wait bağımsız değişkeni komutun hemen döndürülmesini sağlar.
Sorun giderme
Bu öğreticiyi çalıştırırken sorun yaşıyorsanız aşağıdaki kaynaklara bakın:
İ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