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.
Not
Bu öğreticide, bir web uygulamasını bir veritabanı hizmetine bağlamak için Service Connector'ı kullanacaksınız. Bu öğretici, App Service öğreticisinin bir değişikliğidir, bu nedenle bazı benzerlikler görebilirsiniz. Service Connector'ın nerede devreye girdiğine ve App Service öğreticisinde verilen bağlantı işlemini basitleştirdiğini görmek için Postgres veritabanına parolasız bağlayıcı oluşturma bölümüne bakın.
Bu öğreticide, Azure Uygulaması Hizmeti'neveri temelli bir Python Django web uygulamasının nasıl dağıtılacağı ve PostgreSQL için Azure Veritabanı Esnek sunucu veritabanına nasıl bağlanılacağı gösterilmektedir.
Bu öğreticide, aşağıdaki görevleri tamamlamak için Azure CLI'yi kullanacaksınız:
- Python ve Azure CLI ile ilk ortamınızı ayarlama
- PostgreSQL için Azure Veritabanı Esnek sunucu veritabanı oluşturma
- Azure Uygulaması Hizmeti'ne kod dağıtma ve PostgreSQL Esnek sunucusuna bağlanma
- Kodunuzu güncelleştirme ve yeniden dağıtma
- Tanılama günlüklerini görüntüleme
- Azure portalında web uygulamasını yönetme
İlk ortamınızı ayarlama
Azure Portal'da Azure Cloud Shell'den başlatın ve Azure CLI için hizmet bağlayıcısı parolasız uzantısını yükleyin.
az extension add --name serviceconnector-passwordless --upgrade
Örnek uygulamayı kopyalama veya indirme
Örnek depoyu kopyalayın:
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
Aşağıdaki klasöre gidin:
cd serviceconnector-webapp-postgresql-django-passwordless
Bu öğreticide, Azure Uygulaması Hizmeti'ne bir Django web uygulaması dağıtacaksınız. Web uygulaması, Azure Depolama ve PostgreSQL için Azure Veritabanı - Esnek Sunucu kaynaklarına erişmek için Azure rol tabanlı erişim denetimine sahip sistem tarafından atanan yönetilen kimliği (parolasız bağlantılar) kullanır. Kod, Python için Azure Identity istemci kitaplığının DefaultAzureCredential sınıfını kullanır. sınıfı, DefaultAzureCredential App Service için yönetilen bir kimliğin mevcut olduğunu otomatik olarak algılar ve bunu diğer Azure kaynaklarına erişmek için kullanır.
- Üretim ayarları azuresite/production.py dosyasında bulunur. Geliştirme ayarları azuresite/settings.py içindedir.
- Ortam değişkeni ayarlandığında uygulama üretim ayarlarını
WEBSITE_HOSTNAMEkullanır. Azure Uygulaması Hizmeti bu değişkeni web uygulamasının URL'sine (gibi) otomatik olarakmsdocs-django.azurewebsites.netayarlar.
Üretim ayarları, Django'yu herhangi bir üretim ortamında çalışacak şekilde yapılandırmaya özeldir ve App Service'e özgü değildir. Daha fazla bilgi için bkz . Django dağıtım denetim listesi. Ayrıca bazı değişikliklerle ilgili ayrıntılar için bkz . Azure'da Django için üretim ayarları.
Sorun mu yaşıyorsunuz? Bize bildirin.
Azure'da Postgres veritabanı oluşturma
Öğretici için gereken ortam değişkenlerini ayarlayın.
LOCATION="eastus" 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="{your database password}"Önemli
aşağıdaki
ADMIN_PWüç kategoriden 8 ila 128 karakter içermelidir: İngilizce büyük harfler, İngilizce küçük harfler, sayılar ve büyük harf olmayan karakterler. Kullanıcı adları veya parolalar oluşturulurken karakteri kullanmayın$. Daha sonra, karakterin$Python uygulamalarını çalıştırmak için kullanılan Linux kapsayıcısı içinde belirli bir anlamı olduğu bu değerlerle ortam değişkenleri oluşturursunuz.Bir kaynak grubu oluşturun (isterseniz adı değiştirebilirsiniz). Kaynak grubu adı önbelleğe alınır ve sonraki komutlara otomatik olarak uygulanır.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATIONVeritabanı sunucusunu oluşturun. Geçerli istemci IP adresine erişimi etkinleştirmeniz istenirse evet yazın
y. Bu işlem birkaç dakika sürer: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 --active-directory-auth EnabledKomut tanınmıyorsa
az, İlk ortamınızı ayarlama bölümünde açıklandığı gibi Azure CLI'nın yüklü olduğundan emin olun.az postgres flexible-server create komutu aşağıdaki eylemleri gerçekleştirir ve bu işlem birkaç dakika sürer:
- Önceden önbelleğe alınmış bir ad yoksa varsayılan bir kaynak grubu oluşturun.
- PostgreSQL Esnek sunucusu oluşturma:
-
--nameparametresiyle belirtilen sunucu adı. Bu ad Azure genelinde benzersiz olmalıdır. - parametresiyle belirtilen sku ile
--sku-name.
-
- Yönetici hesabı oluşturmak için,
--admin-userve--admin-passwordparametreleriyle belirtilen kullanıcı adı ve parolayı kullanın. - İsmi
--database-nameparametresiyle belirtilen bir veritabanı oluşturun.
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. (Önceki adımda istemci IP adresinizden erişimi etkinleştirmeniz istenirse, bu adımı atlayabilirsiniz.)
IP_ADDRESS=<your IP> 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_ADDRESSKomutta
<your IP>yerine IP adresinizi koymak için IP adresinizi gösteren herhangi bir araç veya web sitesi kullanın. Örneğin, IP Adresim Nedir? web sitesini kullanabilirsiniz.az postgres flexible-server execute
restaurantadlı 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;'
Kodu Azure Uygulaması Hizmetine dağıtma
Bu bölümde App Service uygulamasında uygulama konağı oluşturacak, bu uygulamayı Postgres veritabanına bağlayacak ve ardından kodunuzu bu konağa dağıtacaksınız.
App Service uygulamasını oluşturma
Terminalde, uygulama kodunu içeren serviceconnector-webapp-postgresql-django-passwordless depo klasöründe olduğunuzdan emin olun.
az webapp upAşağıdaki komutu çalıştırarak uygulama için App Service konağı oluşturun:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1Sku, App Service planının boyutunu (CPU, bellek) ve maliyetini tanımlar. B1 (Temel) hizmet planı, Azure aboneliğinizde küçük bir maliyete neden olur. App Service planlarının tam listesi için App Service fiyatlandırma sayfasını görüntüleyin.
Bu komut, önceki
az group createkomuttan önbelleğe alınan kaynak grubunu ve konumu (bu örnekteki$RESOURCE_GROUP_NAMEbölgedeki grupeastus) kullanarak birkaç dakika sürebilecek aşağıdaki eylemleri gerçekleştirir.- Temel fiyatlandırma katmanında (B1) bir App Service planı oluşturun. Varsayılan değerleri kullanmak için
--skuöğesini çıkarabilirsiniz. - App Service uygulamasını oluşturun.
- Uygulama için varsayılan günlüğü etkinleştirin.
- Derleme otomasyonu etkinken ZIP dağıtımı kullanarak depoyu yükleyin.
- Temel fiyatlandırma katmanında (B1) bir App Service planı oluşturun. Varsayılan değerleri kullanmak için
App Service'i, depodaki start.sh'i kullanacak şekilde az webapp config set komutuyla yapılandırın.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Postgres veritabanına parolasız bağlayıcı oluşturma
Kod artık App Service'e dağıtıldığında, sonraki adım uygulamayı Azure'daki Postgres veritabanına bağlamaktır. Uygulama kodu, PostgreSQL esnek sunucusu için adlı AZURE_POSTGRESQL_CONNECTIONSTRING bir ortam değişkeninde ve Azure Depolama hesabı için adlı AZURE_STORAGEBLOB_RESOURCEENDPOINT bir ortam değişkeninde veritabanı bilgilerini bulmayı bekler.
Hizmet Bağlayıcısı komutları Azure Depolama'yı ve PostgreSQL için Azure Veritabanı kaynaklarını yönetilen kimliği ve Azure rol tabanlı erişim denetimini kullanacak şekilde yapılandırmaktadır. Komutlar App Service'te web uygulamanızı bu kaynaklara bağlayan uygulama ayarlarını oluşturur. Komut çıktısı, parolasız özelliği etkinleştirmek için gerçekleştirilen hizmet bağlayıcı eylemlerini listeler.
az webapp connection create postgres-flexible komutunu kullanarak bir PostgreSQL hizmet bağlayıcısı ekleyin. Sistem tarafından atanan yönetilen kimlik, bu durumda hedef kaynak olan PostgreSQL'de web uygulamasının kimliğini doğrulamak için kullanılır.
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
Not
"Abonelik Microsoft.ServiceLinker kullanacak şekilde kaydedilmedi" hata iletisini görürseniz, lütfen Service Connector kaynak sağlayıcısını kaydetmek için komutunu çalıştırın az provider register -n Microsoft.ServiceLinker ve bağlantı komutunu yeniden çalıştırın.
Python kodunuzda bu ayarlara gibi os.environ.get('AZURE_POSTGRESQL_HOST')deyimlerle ortam değişkenleri olarak erişeceksiniz. Daha fazla bilgi için bkz . Ortam değişkenlerine erişme.
Sorun mu yaşıyorsunuz? Sorun giderme kılavuzuna bakın, aksi takdirde bize bildirin.
Depolama hesabı oluşturma ve buna bağlanma
- Depolama hesabı oluşturmak ve aşağıdaki yapılandırmaları kullanan bir hizmet bağlayıcısı oluşturmak için az webapp connection create storage-blob komutunu kullanın:
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 oluşturulan depolama hesabına ekler.
Depolama hesabı ağını web uygulamasından erişimi kabul etmek için yapılandı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ı, restoran uygulaması kullanıcılarının görüntülere 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 komutuyla depolama hesabında adlı
photosbir kapsayıcı oluşturun. Yeni oluşturulan kapsayıcıdaki bloblara anonim okuma (genel) 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
Örnek Python uygulaması azure.identity. Uygulama Azure'da çalışırken, DefaultAzureCredential App Service için yönetilen bir kimliğin mevcut olup olmadığını otomatik olarak algılar ve varsa diğer Azure kaynaklarına (bu durumda depolama ve PostgreSQL) erişmek için bu kimliği kullanır. Bu kaynaklara erişmek için App Service'e depolama anahtarları, sertifikalar veya kimlik bilgileri sağlamanız gerekmez.
URL'sinde
http://$APP_SERVICE_NAME.azurewebsites.netdağıtılan uygulamaya göz atın.Uygulamanın başlatılması bir veya iki dakika sürebilir. Varsayılan örnek uygulama sayfası olmayan bir varsayılan uygulama sayfası görürseniz, bir dakika bekleyin ve tarayıcıyı yenileyin.
Restoran ekleyerek örnek uygulamanın işlevselliğini test edin ve restoran için fotoğraflarla bazı incelemeler yapın. Restoran ve inceleme bilgileri PostgreSQL için Azure Veritabanı ve fotoğraflar Azure Depolama'da depolanır. Aşağıda örnek bir ekran görüntüsü verilmişti:
Kaynakları temizleme
Uygulamayı korumak veya daha fazla öğreticiye devam etmek istiyorsanız Sonraki adımlar bölümüne atlayın. Aksi takdirde, devam eden ücretlerden kaçınmak için bu öğretici için oluşturulan kaynak grubunu silin:
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Kaynak grubunu silerek, içindeki tüm kaynakları serbest bırakmanız ve silmeniz de gerekir. komutunu kullanmadan önce gruptaki kaynaklara artık ihtiyacınız olmadığından emin olun.
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 mu yaşıyorsunuz? Bize bildirin.