Aracılığıyla paylaş


Öğretici: Azure Uygulaması Service'te Postgres ile Django uygulaması oluşturmak için Hizmet Bağlayıcısı'nı kullanma

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_HOSTNAME kullanır. Azure Uygulaması Hizmeti bu değişkeni web uygulamasının URL'sine (gibi) otomatik olarak msdocs-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

  1. Öğ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.

  2. 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 $LOCATION
    
  3. Veritabanı 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 Enabled
    

    Komut tanınmıyorsaaz, İ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:
      • --name parametresiyle 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-user ve --admin-password parametreleriyle belirtilen kullanıcı adı ve parolayı kullanın.
    • İsmi --database-name parametresiyle belirtilen bir veritabanı oluşturun.
  4. 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_ADDRESS
    

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

  5. az postgres flexible-server executerestaurantadlı 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

  1. Terminalde, uygulama kodunu içeren serviceconnector-webapp-postgresql-django-passwordless depo klasöründe olduğunuzdan emin olun.

  2. az webapp up Aş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 B1
    

    Sku, 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 create komuttan önbelleğe alınan kaynak grubunu ve konumu (bu örnekteki $RESOURCE_GROUP_NAME bö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.
  3. 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

  1. 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))
    
  1. 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-access 
    
  2. az storage container create komutuyla depolama hesabında adlı photos bir 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.

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

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

    Azure Uygulaması Hizmeti, Azure Postgre SQL Veritabanı ve Azure Depolama kullanarak restoran inceleme işlevselliğini gösteren örnek uygulamanın ekran görüntüsü.

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.

Sonraki adım