Share via


Exemplo: usar as bibliotecas do Azure para criar e implantar um aplicativo Web

Este exemplo demonstra como usar as bibliotecas de gerenciamento do SDK do Azure em um script Python para criar e implantar um aplicativo Web no Serviço de Aplicativo do Azure. O código do aplicativo é implantado a partir de um repositório do GitHub.

Com as bibliotecas de gerenciamento (namespaces que começam com azure-mgmt, por exemplo, azure-mgmt-web), você pode criar programas de configuração e implantação para executar as mesmas tarefas que podem ser executadas com o portal do Azure, a CLI do Azure ou outras ferramentas de gerenciamento de recursos. Para obter exemplos, consulte Guia de início rápido: implantar um aplicativo Web Python (Django ou Flask) no Serviço de Aplicativo do Azure. (Comandos de CLI do Azure equivalentes são fornecidos posteriormente neste artigo.)

Todos os comandos neste artigo funcionam da mesma forma no bash do Linux/macOS e nos shells de comando do Windows, a menos que haja uma observação.

1: Configurar seu ambiente de desenvolvimento local

Se você ainda não o fez, configure um ambiente onde você possa executar esse código. Estas são algumas opções:

2: Instalar os pacotes de biblioteca do Azure necessários

Crie um arquivo chamado requirements.txt com o conteúdo abaixo:

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

Em um terminal ou prompt de comando com o ambiente virtual ativado, instale os requisitos:

pip install -r requirements.txt

3: Faça um fork no repositório de amostras

Acesse https://github.com/Azure-Samples/python-docs-hello-world e bifuque o repositório na sua conta do GitHub. Você usará uma bifurcação para garantir que tenha permissões para implantar o repositório no Azure.

Forking the sample repository on GitHub

Em seguida, crie uma variável de ambiente com nome REPO_URL na URL da sua bifurcação. O código de exemplo na próxima seção depende desta variável de ambiente:

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

4: Escrever código para criar e implantar um aplicativo Web

Crie um arquivo Python com o nome provision_deploy_web_app.py e o código a seguir. Os comentários explicam os detalhes do código. Certifique-se de definir as REPO_URL variáveis e AZURE_SUBSCRIPTION_ID ambiente antes de executar o script.

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")

Esse código usa a autenticação baseada na CLI (usando AzureCliCredential), pois demonstra ações que você pode efetuar diretamente com a CLI do Azure. Em ambos os casos, você está usando a mesma identidade para autenticação. Dependendo do seu ambiente, talvez seja necessário executar az login primeiro para autenticar.

Para usar esse código em um script de produção (por exemplo, para automatizar o gerenciamento de VMs), use DefaultAzureCredential (recomendado) com um método baseado em entidade de serviço, conforme descrito em Como autenticar aplicativos Python com serviços do Azure.

5: Execute o script

python provision_deploy_web_app.py

6: Verificar a implantação do aplicativo Web

Para acessar o site da Web implantado, execute o seguinte comando:

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

Substitua o nome do aplicativo Web (opção ) e o nome do grupo de recursos (--name--resource-groupopção ) pelos valores usados no script. Você deve ver "Olá, Mundo!" no navegador.

Se você não vir a saída esperada, aguarde alguns minutos e tente novamente.

Se você ainda não vir a saída esperada, então:

  1. Vá para o Portal do Azure.
  2. Selecione Grupos de recursos e localize o grupo de recursos que você criou.
  3. Selecione o nome do grupo de recursos para exibir os recursos que ele contém. Especificamente, verifique se há um Plano do Serviço de Aplicativo e o Serviço de Aplicativo.
  4. Selecione o Serviço de Aplicativo e selecione Centro de Implantação.
  5. Selecione a guia logs para exibir os logs de implantação.

7: Reimplantar o código do aplicativo Web (opcional)

O script configura os recursos necessários para hospedar seu aplicativo Web e define a origem de implantação para seu fork usando a integração manual. Com a integração manual, você deve acionar o aplicativo Web para extrair do repositório e da ramificação configurados.

O script chama o método WebSiteManagementClient.web_apps.sync_repository para disparar uma extração do aplicativo Web. Se você enviar alterações de código subsequentes para seu repositório, poderá reimplantar seu código invocando essa API ou usando outras ferramentas do Azure, como a CLI do Azure ou o portal do Azure.

Você pode implantar seu código com a CLI do Azure executando o comando az webapp deployment source sync :

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

Substitua o nome do aplicativo Web (opção ) e o nome do grupo de recursos (--name--resource-groupopção ) pelos valores usados no script.

Para implantar seu código do portal do Azure:

  1. Vá para o Portal do Azure.
  2. Selecione Grupos de recursos e localize o grupo de recursos que você criou.
  3. Selecione o nome do grupo de recursos para exibir os recursos que ele contém. Especificamente, verifique se há um Plano do Serviço de Aplicativo e o Serviço de Aplicativo.
  4. Selecione o Serviço de Aplicativo e selecione Centro de Implantação.
  5. No menu superior, selecione Sincronizar para implantar seu código.

8: Limpar recursos

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

Execute o comando az group delete se não precisar manter o grupo de recursos criado neste exemplo. Os grupos de recursos não incorrem em encargos contínuos na sua assinatura, mas recomendamos limpar os grupos que você não esteja usando ativamente. O argumento --no-wait permite que o comando seja retornado imediatamente, em vez de esperar a conclusão da operação.

Você também pode usar o método ResourceManagementClient.resource_groups.begin_delete para excluir um grupo de recursos do código.

Para referência: comandos equivalentes da CLI do Azure

Os comandos a seguir da CLI do Azure executam as mesmas etapas de provisionamento do script Python:

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

Confira também