Öğretici: Hizmet Bağlayıcısı'nı kullanarak Django web uygulamasını PostgreSQL'Azure bağlama

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:

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 Azure Identity istemci>< kitaplığının DefaultAzureCredential sınıfını kullanarak yönetilen kimliğin ne zaman var olduğunu otomatik olarak algılar ve diğer kaynaklara erişmek için kullanır.

Ö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:

    1. 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ın az upgrade.
    2. az login kullanarak ve istemleri izleyerek Azure oturum açın.

Ortamınızı ayarlama

  1. Aboneliğinizin Microsoft.ServiceLinker ve Microsoft.DBforPostgreSQL kaynak sağlayıcılarını kullanacak şekilde kayıtlı olduğundan emin olun. Aksi takdirde, sağlayıcıları kaydetmek için az provider register -n Microsoft.[name of service] çalıştırın.

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

  1. Örnek uygulama deposunu kopyalayın.

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

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

  2. Dizini cd serviceconnector-webapp-postgresql-django-passwordless ile 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_PW en 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.
  1. 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>"
    
  2. 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ı.

  1. serviceconnector-webapp-postgresql-django-passwordless repository klasöründe aşağıdaki az webapp up komutu çalıştırın:

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

    Not

    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.

  2. 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 --name belirtilen sunucu adı. Ad, Azure genelinde benzersiz olmalıdır.
  • parametresinde --sku-name belirtilen SKU.
  • --admin-user ve --admin-password parametrelerinde belirtilen yönetici hesabı kullanıcı adı ve parolası.
  1. 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 Enabled
    
  2. Geç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_ADDRESS
    

    Tavsiye

    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.

  3. restaurant komutunu 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_RESOURCEENDPOINT adlı bir ortam değişkeni oluşturur.
  1. 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))
    
  2. 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-access 
    
  3. Az storage container create komutunu kullanarak depolama hesabında adlı photos bir 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 browse kullanabilirsiniz:

    az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAME
    
  • Azure Cloud Shell yerel tarayıcıyı açamaz, bu nedenle az webapp browse komutunu 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:

App Service, PostgreSQL için Azure Veri Tabanı ve Azure Depolama kullanarak restoran inceleme işlevselliğini gösteren örnek uygulamanın ekran görüntüsü.

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: