Aracılığıyla paylaş


Sistem tarafından atanan yönetilen kimlikle Flask Python web uygulaması oluşturma ve Azure'a dağıtma

Bu öğreticide, Azure Uygulaması Hizmetinde çalışan bir web uygulaması oluşturmak ve dağıtmak için Python Flask kodunu dağıtacaksınız. Web uygulaması, Azure rol tabanlı erişim denetimiyle sistem tarafından atanan yönetilen kimliğini (parolasız bağlantılar) kullanarak Azure Depolama ve PostgreSQL için Azure Veritabanı - Esnek Sunucu kaynaklarına erişir. 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.

Hizmet Bağlan kullanarak Azure hizmetlerine parolasız bağlantılar yapılandırabilir veya bunları el ile yapılandırabilirsiniz. Bu öğreticide Service Bağlan or'ın nasıl kullanılacağı gösterilmektedir. Parolasız bağlantılar hakkında daha fazla bilgi için bkz . Azure hizmetleri için parolasız bağlantılar. Service Bağlan or hakkında bilgi için Hizmet Bağlan veya belgelerine bakın.

Bu öğreticide, Azure CLI kullanarak Python web uygulaması oluşturma ve dağıtma adımları gösterilmektedir. Bu öğreticideki komutlar bash kabuğunda çalıştırılacak şekilde yazılmıştır. Öğretici komutlarını YEREL ortamınız veya Azure Cloud Shell gibi CLI yüklü herhangi bir Bash ortamında çalıştırabilirsiniz. Bazı değişikliklerle (örneğin, ortam değişkenlerini ayarlama ve kullanma) bu komutları Windows komut kabuğu gibi diğer ortamlarda çalıştırabilirsiniz. Kullanıcı tarafından atanan yönetilen kimlik kullanma örnekleri için bkz . Kullanıcı tarafından atanan yönetilen kimlikle Django web uygulaması oluşturma ve Azure'a dağıtma.

Örnek uygulamayı alma

Flask çerçevesini kullanan örnek bir Python uygulaması, bu öğreticiyi izlemenize yardımcı olabilir. Örnek uygulamalardan birini yerel iş istasyonunuza indirin veya kopyalayın.

  1. Örneği bir Azure Cloud Shell oturumunda kopyalayın.

    git clone https://github.com/Azure-Samples/msdocs-flask-web-app-managed-identity.git
    
  2. Uygulama klasörüne gidin.

    cd msdocs-flask-web-app-managed-identity
    

Azure PostgreSQL sunucusu 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="ChAnG33#ThsPssWD$RAND_ID"
    

    Ö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 özel bir anlamı olduğu bu değerlerle ortam değişkenleri oluşturursunuz.

  2. az group create komutuyla bir kaynak grubu oluşturun.

    az group create --location $LOCATION --name $RESOURCE_GROUP_NAME
    
  3. az postgres flexible-server create komutuyla bir PostgreSQL sunucusu oluşturun . (Bu ve sonraki komutlar Bash Kabuğu ('\') için satır devamlılığı karakterini kullanır. Gerekirse kabuğunuz için satır devamlılığı karakterini değiştirin.)

    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
    

    Sku-name, fiyatlandırma katmanının ve işlem yapılandırmasının adıdır. Daha fazla bilgi için bkz. fiyatlandırma PostgreSQL için Azure Veritabanı. Kullanılabilir SKU'ları listelemek için kullanın az postgres flexible-server list-skus --location $LOCATION.

  4. az postgres flexible-server execute komutunu kullanarak adlı restaurant 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;'
    

Azure Uygulaması Hizmeti oluşturma ve kodu dağıtma

  1. az webapp up komutunu kullanarak bir uygulama hizmeti oluşturun.

    az webapp up \
      --resource-group $RESOURCE_GROUP_NAME \
      --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.

  2. App Service'i az webapp config set komutuyla depodaki start.sh kullanacak şekilde yapılandırın.

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --startup-file "start.sh"
    

Azure kaynaklarına parolasız bağlayıcılar oluşturma

Hizmet Bağlan or komutları, Yönetilen kimlik ve Azure rol tabanlı erişim denetimini kullanmak için Azure Depolama ve PostgreSQL için Azure Veritabanı kaynaklarını yapılandırmaktadır. Komutlar App Service'te web uygulamanızı bu kaynaklara bağlayan uygulama ayarlarını oluşturur. Komutlardan elde edilirken, parolasız özelliği etkinleştirmek için gerçekleştirilir hizmet bağlayıcısı eylemleri listelenir.

  1. az webapp connection create postgres-flexible komutuyla 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
    
  2. az webapp connection create storage-blob komutuyla bir depolama hizmeti bağlayıcısı ekleyin.

    Bu komut ayrıca bir depolama hesabı ekler ve blob veri katkıda bulunanı rolüne sahip web uygulamasını depolama hesabına Depolama ekler.

    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ında kapsayıcı oluşturma

Örnek Python uygulaması, gözden geçirenler tarafından blob olarak gönderilen fotoğrafları depolama hesabınızdaki bir kapsayıcıda depolar.

  • Kullanıcı gözden geçirmesiyle birlikte bir fotoğraf gönderdiğinde örnek uygulama, kimlik doğrulaması ve yetkilendirme için sistem tarafından atanan yönetilen kimliğini kullanarak görüntüyü kapsayıcıya yazar. Bu işlevi son bölümde yapılandırmıştınız.

  • Bir kullanıcı bir restoranın incelemelerini görüntülediğinde uygulama, kendisiyle ilişkilendirilmiş olan her inceleme için blob depolamadaki fotoğrafın bağlantısını döndürür. Tarayıcının fotoğrafı görüntüleyebilmesi için fotoğrafa depolama hesabınızdan erişebilmesi gerekir. Blob verilerinin anonim (kimliği doğrulanmamış) erişim aracılığıyla genel olarak okunabilmesi gerekir.

Güvenliği artırmak için depolama hesapları blob verilerine anonim erişim varsayılan olarak devre dışı bırakılarak oluşturulur. Bu bölümde, depolama hesabınızda anonim okuma erişimini etkinleştirecek ve ardından bloblarına genel (anonim) erişim sağlayan photos adlı bir kapsayıcı oluşturacaksınız.

  1. az storage account update komutuyla bloblara anonim okuma erişimine izin vermek için depolama hesabını güncelleştirin.

    az storage account update \
      --name $STORAGE_ACCOUNT_NAME \
      --resource-group $RESOURCE_GROUP_NAME \
      --allow-blob-public-access true
    

    Depolama hesabında anonim erişimin etkinleştirilmesi, tek tek blobların erişimini etkilemez. Kapsayıcı düzeyinde bloblara genel erişimi açıkça etkinleştirmeniz gerekir.

  2. az storage container create komutuyla depolama hesabında photos adlı bir kapsayıcı oluşturun. Yeni oluşturulan kapsayıcıdaki bloblara anonim okuma (genel) erişimine izin verin.

    az storage container create \
      --account-name $STORAGE_ACCOUNT_NAME \
      --name photos \
      --public-access blob \
      --account-key $(az storage account keys list --account-name $STORAGE_ACCOUNT_NAME \
          --query [0].value --output tsv) 
    

    Not

    Bu komut, kısa bir süre için depolama hesabı anahtarını kullanarak depolama hesabıyla yetkilendirmeyi kullanır. Çoğu senaryoda, Microsoft'un önerilen yaklaşımı Microsoft Entra Id ve Azure (RBAC) rollerini kullanmaktır. Hızlı yönergeler için bkz . Hızlı Başlangıç: Azure CLI ile blob oluşturma, indirme ve listeleme. Depolama hesabında "Sahip", "Katkıda Bulunan", "Depolama Blob Veri Sahibi" ve "Depolama Blob Verileri Katkıda Bulunanı" gibi kapsayıcılar oluşturmanıza izin veren birkaç Azure rolü olduğunu unutmayın.

Blob verilerine anonim okuma erişimi hakkında daha fazla bilgi edinmek için bkz . Kapsayıcılar ve bloblar için anonim okuma erişimini yapılandırma.

Azure'da Python web uygulamasını test edin

Örnek Python uygulaması azure.identity paketini ve sınıfını DefaultAzureCredential kullanır. 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'de 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ü.

Temizleme

Bu öğreticide, tüm Azure kaynakları aynı kaynak grubunda oluşturulmuştur. Az group delete komutuyla kaynak grubunun kaldırılması, kaynak grubundaki tüm kaynakları kaldırır ve uygulamanız için kullanılan tüm Azure kaynaklarını kaldırmanın en hızlı yoludur.

az group delete  --name $RESOURCE_GROUP_NAME 

İsteğe bağlı olarak, işlem tamamlanmadan önce komutun döndürülmesi için bağımsız değişkenini ekleyebilirsiniz --no-wait .

Sonraki adımlar