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 web uygulaması oluşturma ve Azure Uygulaması Hizmeti'ne dağıtma işlemleri gösterilmektedir. Uygulama kodu bir GitHub deposundan dağıtılır.

Yönetim kitaplıklarıyla (örneğin, azure-mgmt-webile azure-mgmtbaşlayan ad alanları) Azure portalı, Azure CLI veya diğer kaynak yönetimi araçları aracılığıyla gerçekleştirebileceğiniz görevlerin aynısını gerçekleştirmek için yapılandırma ve dağıtım programları yazabilirsiniz. Örnekler için bkz. Hızlı Başlangıç: Azure Uygulaması Hizmetine Python (Django veya Flask) web uygulaması dağıtma. (Eşdeğer Azure CLI komutları bu makalenin ilerleyen bölümlerinde verilmiştir.)

Bu makaledeki tüm komutlar, not edilmediği sürece Linux/macOS bash ve Windows komut kabuklarında aynı şekilde çalışır.

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:

  • veya seçtiğiniz aracı kullanarak venv bir Python sanal ortamı yapılandırın. Sanal ortamı yerel olarak veya Azure Cloud Shell'de oluşturabilir ve kodu orada çalıştırabilirsiniz. Kullanmaya başlamak için sanal ortamı etkinleştirdiğinizden emin olun.

  • Conda ortamı kullanın.

  • Visual Studio Code veya GitHub Codespaces'ta Geliş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

Sanal ortamın etkinleştirildiği bir terminalde veya komut isteminde gereksinimleri yükleyin:

pip install -r requirements.txt

3: Örnek deponun çatalını oluşturma

Depoyu ziyaret edin https://github.com/Azure-Samples/python-docs-hello-world ve kendi GitHub hesabınıza çatal oluşturun. Depoyu Azure'a dağıtma izinlerine sahip olduğunuzdan emin olmak için çatal kullanacaksınız.

GitHub'da örnek deponun çatalını oluşturma

Ardından çatalınızın URL'si ile adlı REPO_URL bir ortam değişkeni oluşturun. Sonraki bölümdeki örnek kod şu ortam değişkenine bağlıdır:

set REPO_URL=<url_of_your_fork>
set AZURE_SUBSCRIPTION_ID=<subscription_id>

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

Aşağıdaki kodla provision_deploy_web_app.py adlı bir Python dosyası oluşturun. Açıklamalar, kodun ayrıntılarını açıklar. Betiği çalıştırmadan önce ve AZURE_SUBSCRIPTION_ID ortam değişkenlerini tanımladığınızdan REPO_URL emin olun.

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 CLI tabanlı kimlik doğrulamasını (kullanarak AzureCliCredential) kullanır çünkü azure CLI ile doğrudan başka türlü yapabileceğiniz eylemleri gösterir. 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), Azure hizmetleriyle Python uygulamalarının kimliğini doğrulama bölümünde açıklandığı gibi hizmet sorumlusu tabanlı bir yöntemle kullanın DefaultAzureCredential (önerilir).

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

python provision_deploy_web_app.py

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

Aşağıdaki komutu çalıştırarak dağıtılan web sitesini ziyaret edin:

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

Web uygulaması adını (--name seçenek) ve kaynak grubu adını (--resource-group seçenek) betikte kullandığınız değerlerle değiştirin. Tarayıcıda "Merhaba Dünya!" ifadesini görmeniz gerekir.

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

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

  1. Azure portalına gidin.
  2. Kaynak grupları'nı seçin ve oluşturduğunuz kaynak grubunu bulun.
  3. kaynak grubu adını seçerek içerdiği kaynakları görüntüleyin. Özellikle, bir App Service Planı ve App Service olduğunu doğrulayın.
  4. App Service'i ve ardından Dağıtım Merkezi'ni seçin.
  5. Dağıtım günlüklerini görüntülemek için günlükler sekmesini seçin.

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

Betik, web uygulamanızı barındırmak için gereken kaynakları ayarlar ve el ile tümleştirmeyi kullanarak dağıtım kaynağını çatalınıza ayarlar. El ile tümleştirme ile, web uygulamasını yapılandırılan depodan ve daldan çekmek için tetiklemeniz gerekir.

Betik, web uygulamasından çekme işlemini tetikleme amacıyla WebSiteManagementClient.web_apps.sync_repository yöntemini çağırır. Sonraki kod değişikliklerini deponuza gönderiyorsanız, bu API'yi çağırarak veya Azure CLI veya Azure portalı gibi diğer Azure araçlarını kullanarak kodunuzu yeniden dağıtabilirsiniz.

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

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

Web uygulaması adını (--name seçenek) ve kaynak grubu adını (--resource-group seçenek) betikte kullandığınız değerlerle değiştirin.

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

  1. Azure portalına gidin.
  2. Kaynak grupları'nı seçin ve oluşturduğunuz kaynak grubunu bulun.
  3. kaynak grubu adını seçerek içerdiği kaynakları görüntüleyin. Özellikle, bir App Service Planı ve App Service olduğunu doğrulayın.
  4. App Service'i ve ardından Dağıtım Merkezi'ni seçin.
  5. Kodunuzu dağıtmak için üstteki menüde Eşitle'yi seçin.

8: Kaynakları temizleme

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

Bu örnekte oluşturulan kaynak grubunu tutmanız gerekmiyorsa az group delete komutunu çalıştırın. Kaynak grupları aboneliğinizde devam eden bir ücret ödemez, ancak etkin olarak kullanmadığınız tüm grupları temizlemek iyi bir uygulamadır. --no-wait bağımsız değişkeni, işlemin bitmesini beklemek yerine komutun hemen döndürülmesini sağlar.

Bir kaynak grubunu koddan silmek için yöntemini de kullanabilirsiniz ResourceManagementClient.resource_groups.begin_delete .

Başvuru için: eşdeğer Azure CLI komutları

Aşağıdaki Azure CLI komutları, Python betiğiyle aynı sağlama adımlarını tamamlar:

rem Replace <your_github_user_name> with the account name of the fork.

set repoUrl=https://github.com/<your_github_user_name>/python-docs-hello-world
set appName=PythonAzureExample-WebApp-%random%

az group create -l centralus -n PythonAzureExample-WebApp-rg

az appservice plan create -n PythonAzureExample-WebApp-plan -g PythonAzureExample-WebApp-rg ^
     --is-linux --sku F1

echo Creating app: %appName%

az webapp create -g PythonAzureExample-WebApp-rg -n %appName% ^
    --plan PythonAzureExample-WebApp-plan --runtime "python|3.8"

rem You can use --deployment-source-url with the first create command. It is shown here
rem to match the sequence of the Python code.

az webapp create -n %appName% -g PythonAzureExample-WebApp-rg ^
    --plan PythonAzureExample-WebApp-plan --runtime "python|3.8" ^
    --deployment-source-url %repoUrl% 

rem The previous command sets up External Git deployment from the specified repository. This 
rem command triggers a pull from the repository.

az webapp deployment source sync --name %appName% --resource-group PythonAzureExample-WebApp-rg

Ayrıca bkz.