Aracılığıyla paylaş


Örnek: Web uygulaması oluşturmak ve dağıtmak için Azure kitaplıklarını kullanma

Bu örnekte, Bir Python betiğinde Azure SDK yönetim kitaplıklarını kullanarak GitHub deposundan alınan uygulama koduyla Azure App Service'e bir web uygulaması oluşturma ve dağıtma adımları gösterilmektedir.

Python için Azure SDK'sı, Azure portalı, Azure CLI veya ARM şablonlarıyla yapabileceğinize benzer şekilde kaynak yapılandırmasını ve dağıtımını otomatikleştirmenize olanak sağlayan yönetim kitaplıklarını (ile başlayan azure-mgmtad alanları) içerir. Örnekler için bkz . Hızlı Başlangıç: Azure App Service'e Python (Django veya Flask) web uygulaması dağıtma.

1: Yerel geliştirme ortamınızı ayarlama

Henüz yapmadıysanız, bu kodu çalıştırabileceğiniz bir ortam ayarlayın. Aşağıda bazı seçenekleri görebilirsiniz:

  • venv veya seçtiğiniz aracı kullanarak bir Python sanal ortamı yapılandırın. Sanal ortamı kullanmaya başlamak için etkinleştirmeyi unutmayın. Python'ı yüklemek için bkz. Python'ı yükleme.

    #!/bin/bash
    # Create a virtual environment
    python -m venv .venv
    # Activate the virtual environment
    source .venv/Scripts/activate # only required for Windows (Git Bash)
    
  • Conda ortamı kullanın. Conda'yı yüklemek için bkz. Miniconda'yı yükleme.

  • Visual Studio Code veya GitHub Codespaces'taGeliştirme Kapsayıcısı kullanın.

2: Gerekli Azure kitaplık paketlerini yükleme

aşağıdaki içeriklere sahip requirements.txt adlı bir dosya oluşturun:

azure-mgmt-resource
azure-mgmt-web
azure-identity

Yerel geliştirme ortamınızda aşağıdaki kodu kullanarak gereksinimleri yükleyin:

pip install -r requirements.txt

3: Örnek depoyu çatallayın

  1. Depoyu ziyaret edin https://github.com/Azure-Samples/python-docs-hello-world ve kendi GitHub hesabınıza çatal oluşturun. Çatal kullanmak, uygulamayı Azure'a dağıtmak için gerekli izinlere sahip olduğunuzdan emin olun.

    GitHub'da örnek depoyu fork etme

  2. Ardından adlı REPO_URL bir ortam değişkeni oluşturun ve bunu çatallanmış deponuzun URL'sine ayarlayın. Bu değişken, sonraki bölümdeki örnek kod için gereklidir.

export REPO_URL=<url_of_your_fork>
export AZURE_SUBSCRIPTION_ID=<subscription_id>

4: Web uygulaması oluşturmak ve dağıtmak için kod yazma

provision_deploy_web_app.py adlı bir Python dosyası oluşturun ve aşağıdaki kodu ekleyin. Satır içi açıklamalar, betiğin her bir bölümünün ne yaptığını açıklar. REPO_URL ve AZURE_SUBSCRIPTION_ID ortam değişkenleri önceki adımda ayarlanmış olmalıdır.

import random, os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.web import WebSiteManagementClient

# Acquire a credential object using CLI-based authentication.
credential = AzureCliCredential()

# Retrieve subscription ID from environment variable
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = 'PythonAzureExample-WebApp-rg'
LOCATION = "centralus"

# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)

rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
    { "location": LOCATION })

print(f"Provisioned resource group {rg_result.name}")

# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group


#Step 2: Provision the App Service plan, which defines the underlying VM for the web app.

# Names for the App Service plan and App Service. We use a random number with the
# latter to create a reasonably unique name. If you've already provisioned a
# web app and need to re-run the script, set the WEB_APP_NAME environment 
# variable to that name instead.
SERVICE_PLAN_NAME = 'PythonAzureExample-WebApp-plan'
WEB_APP_NAME = os.environ.get("WEB_APP_NAME", f"PythonAzureExample-WebApp-{random.randint(1,100000):05}")

# Obtain the client object
app_service_client = WebSiteManagementClient(credential, subscription_id)

# Provision the plan; Linux is the default
poller = app_service_client.app_service_plans.begin_create_or_update(RESOURCE_GROUP_NAME,
    SERVICE_PLAN_NAME,
    {
        "location": LOCATION,
        "reserved": True,
        "sku" : {"name" : "B1"}
    }
)

plan_result = poller.result()

print(f"Provisioned App Service plan {plan_result.name}")


# Step 3: With the plan in place, provision the web app itself, which is the process that can host
# whatever code we want to deploy to it.

poller = app_service_client.web_apps.begin_create_or_update(RESOURCE_GROUP_NAME,
    WEB_APP_NAME,
    {
        "location": LOCATION,
        "server_farm_id": plan_result.id,
        "site_config": {
            "linux_fx_version": "python|3.8"
        }
    }
)

web_app_result = poller.result()

print(f"Provisioned web app {web_app_result.name} at {web_app_result.default_host_name}")

# Step 4: deploy code from a GitHub repository. For Python code, App Service on Linux runs
# the code inside a container that makes certain assumptions about the structure of the code.
# For more information, see How to configure Python apps,
# https://docs.microsoft.com/azure/app-service/containers/how-to-configure-python.
#
# The create_or_update_source_control method doesn't provision a web app. It only sets the
# source control configuration for the app. In this case we're simply pointing to
# a GitHub repository.
#
# You can call this method again to change the repo.

REPO_URL = os.environ["REPO_URL"]

poller = app_service_client.web_apps.begin_create_or_update_source_control(RESOURCE_GROUP_NAME,
    WEB_APP_NAME, 
    { 
        "location": "GitHub",
        "repo_url": REPO_URL,
        "branch": "master",
        "is_manual_integration": True
    }
)

sc_result = poller.result()

print(f"Set source control on web app to {sc_result.branch} branch of {sc_result.repo_url}")

# Step 5: Deploy the code using the repository and branch configured in the previous step.
#
# If you push subsequent code changes to the repo and branch, you must call this method again
# or use another Azure tool like the Azure CLI or Azure portal to redeploy. 
# Note: By default, the method returns None.

app_service_client.web_apps.sync_repository(RESOURCE_GROUP_NAME, WEB_APP_NAME)

print(f"Deploy code")

Bu kod, Azure CLI ile doğrudan yapabileceğiniz eylemleri göstermesi nedeniyle CLI tabanlı kimlik doğrulamayı (kullanarak AzureCliCredential) kullanır. Her iki durumda da kimlik doğrulaması için aynı kimliği kullanıyorsunuz. Ortamınıza bağlı olarak, kimlik doğrulaması yapmak için önce çalıştırmanız az login gerekebilir.

Bu kodu üretim betiğinde kullanmak için (örneğin, VM yönetimini otomatikleştirmek için), DefaultAzureCredential bölümünde açıklandığı gibi hizmet sorumlusu tabanlı bir yöntemle kullanın (önerilir).

5: Betiği çalıştır

python provision_deploy_web_app.py

6: Web uygulaması dağıtımını doğrulama

Dağıtılan web sitesini görüntülemek için aşağıdaki komutu çalıştırın:

az webapp browse --name <PythonAzureExample-WebApp-12345> --resource-group PythonAzureExample-WebApp-rg

Web uygulaması adını (--name) betik tarafından oluşturulan değerle değiştirin. Betikte değiştirmediğiniz sürece kaynak grubu adını (--resource-group) değiştirmeniz gerekmez. Siteyi açtığınızda "Merhaba Dünya!" ifadesini görmeniz gerekir tarayıcınızda.

Tavsiye

Beklenen çıkışı görmüyorsanız, birkaç dakika bekleyin ve yeniden deneyin.

Beklenen çıkışı hala görmüyorsanız:

  1. Azure portalına gidin.
  2. Kaynak grupları'na gidin ve oluşturduğunuz kaynak grubunu bulun.
  3. Kaynaklarını görüntülemek için kaynak grubunu seçin. Hem App Service Planı hem de App Service içerdiğine emin olun.
  4. App Service'i seçin ve ardından Dağıtım Merkezi'ne gidin.
  5. Dağıtım günlüklerini hataları veya durum güncelleştirmelerini denetlemek için günlükler sekmesini açın.

7: Web uygulaması kodunu yeniden dağıtma (isteğe bağlı)

Betik, web uygulamanızı barındırmak için gereken tüm kaynakları temin eder ve dağıtım kaynağını manuel entegrasyon kullanarak forkladığınız depo kullanılacak şekilde yapılandırır. Manuel entegrasyonla, belirtilen depodan ve daldan güncellemeleri çekmek için web uygulamasını manuel olarak tetiklemeniz gerekir.

Betik, web uygulamasının deponuzdan kod çekmesini tetikleyen WebSiteManagementClient.web_apps.sync_repository yöntemini kullanır. Kodunuzda daha fazla değişiklik yaparsanız, bu API'yi yeniden çağırarak veya Azure CLI veya Azure portalı gibi diğer Azure araçlarını kullanarak yeniden dağıtabilirsiniz.

az webapp deployment source sync komutunu çalıştırarak Azure CLI kullanarak kodunuzu yeniden dağıtabilirsiniz:

az webapp deployment source sync --name <PythonAzureExample-WebApp-12345> --resource-group PythonAzureExample-WebApp-rg

Betikte değiştirmediğiniz sürece kaynak grubu adını (--resource-group) değiştirmeniz gerekmez.

Kodunuzu Azure portalından dağıtmak için:

  1. Azure portalına gidin.
  2. Kaynak grupları'na gidin ve oluşturduğunuz kaynak grubunu bulun.
  3. Kaynaklarını görüntülemek için kaynak grubu adını seçin. Hem App Service Planı hem de App Service içerdiğine emin olun.
  4. App Service'i seçin ve ardından Dağıtım Merkezi'ne gidin.
  5. Üstteki menüde Eşitle'yi seçerek kodunuzun dağıtımını tetikleyin.

8: Kaynakları temizleme

az group delete --name PythonAzureExample-WebApp-rg --no-wait

Betikte değiştirmediğiniz sürece kaynak grubu adını (--resource-group seçenek) değiştirmeniz gerekmez.

Bu örnekte oluşturulan kaynak grubuna artık ihtiyacınız yoksa az group delete komutunu çalıştırarak grubu silebilirsiniz . Kaynak grupları sürekli ücretlendirilmese de, kullanılmayan kaynakları temizlemek iyi bir alışkanlıktır. Silme işleminin tamamlanmasını beklemeden denetimi hemen komut satırına döndürmek için --no-wait bağımsız değişkenini kullanın.

Ayrıca kaynak grubunu programlı olarak ResourceManagementClient.resource_groups.begin_delete yöntemini kullanarak silebilirsiniz.

Ayrıca bakınız