Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este exemplo mostra 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, com o código do aplicativo extraído de um repositório GitHub.
O SDK do Azure para Python inclui bibliotecas de gerenciamento (namespaces começando com azure-mgmt
) que permitem automatizar a configuração e a implantação de recursos , semelhante ao que você pode fazer com o portal do Azure, a CLI do Azure ou os modelos do ARM. Para obter exemplos, consulte Início Rápido: Implantar um aplicativo Web Python (Django ou Flask) no Serviço de Aplicativo do Azure.
1: Configurar seu ambiente de desenvolvimento local
Caso ainda não tenha feito isso, configure um ambiente em que você possa executar esse código. Aqui estão algumas opções:
Configure um ambiente virtual do Python usando
venv
ou sua ferramenta de escolha. Para começar a usar o ambiente virtual, ative-o. Para instalar o Python, consulte Instalar o Python.#!/bin/bash # Create a virtual environment python -m venv .venv # Activate the virtual environment source .venv/Scripts/activate # only required for Windows (Git Bash)
Usar um ambiente Conda. Para instalar o Conda, consulte Instalar o Miniconda.
Use um contêiner de desenvolvimento no Visual Studio Code ou no GitHub Codespaces.
2: Instalar os pacotes de biblioteca do Azure necessários
Crie um arquivo chamado requirements.txt com o seguinte conteúdo:
azure-mgmt-resource
azure-mgmt-web
azure-identity
Em seu ambiente de desenvolvimento local, instale os requisitos usando o seguinte código:
pip install -r requirements.txt
3: Criar fork do repositório de exemplo
Visite https://github.com/Azure-Samples/python-docs-hello-world e faça um fork do repositório em sua conta no GitHub. O uso de um fork garante que você tenha as permissões necessárias para implantar o aplicativo no Azure.
Em seguida, crie uma variável de ambiente nomeada
REPO_URL
e defina-a como a URL do repositório bifurcado. Essa variável é exigida pelo código de exemplo na próxima seção.
export REPO_URL=<url_of_your_fork>
export AZURE_SUBSCRIPTION_ID=<subscription_id>
4: Escrever código para criar e implantar um aplicativo Web
Crie um arquivo Python chamado provision_deploy_web_app.py e adicione o código a seguir. Os comentários em linha explicam o que cada parte do script faz. As variáveis de ambiente REPO_URL
e AZURE_SUBSCRIPTION_ID
já devem estar definidas na etapa anterior.
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 em CLI (usando AzureCliCredential
) porque demonstra ações que você poderia fazer diretamente com a CLI do Azure. Em ambos os casos, você está usando a mesma identidade para autenticação. Dependendo do seu ambiente, talvez você precise executar az login
primeiro para autenticar.
Para usar esse código em um script de produção (por exemplo, para automatizar o gerenciamento de VM), 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.
Links de referência para classes usadas no código
- AzureCliCredential (azure.identity)
- ResourceManagementClient (azure.mgmt.resource)
- WebSiteManagementClient (azure.mgmt.web import)
5: Executar o script
python provision_deploy_web_app.py
6: Verificar a implantação do aplicativo Web
Para exibir o site implantado, execute o seguinte comando:
az webapp browse --name <PythonAzureExample-WebApp-12345> --resource-group PythonAzureExample-WebApp-rg
Substitua o nome do aplicativo Web (--name
) pelo valor gerado pelo script.
Você não precisa alterar o nome do grupo de recursos (--resource-group
) a menos que o tenha alterado no script. Ao abrir o site, você deverá ver "Olá, Mundo!" em seu navegador.
Dica
Se você não vir o resultado esperado, aguarde alguns minutos e tente novamente.
Se você ainda não estiver vendo a saída esperada:
- Acesse o portal do Azure.
- Navegue até grupos de recursos e localize o grupo de recursos que você criou.
- Selecione o grupo de recursos para exibir seus recursos. Verifique se ele inclui um Plano do Serviço de Aplicativo e um Serviço de Aplicativo.
- Selecione o Serviço de Aplicativo e vá para o Centro de Implantação.
- Abra a guia logs para verificar se há erros ou atualizações de status nos logs de implantação.
7: Reimplantar o código do aplicativo Web (opcional)
O script provisiona todos os recursos necessários para hospedar seu aplicativo web e configura a fonte de implantação para usar seu repositório bifurcado por meio de integração manual. Com a integração manual, você precisa acionar manualmente o aplicativo web para buscar atualizações do repositório e branch especificados.
O script usa o método WebSiteManagementClient.web_apps.sync_repository para fazer com que o aplicativo web busque código do seu repositório. Se você fizer mais alterações em seu código, poderá reimplantar chamando essa API novamente ou usando outras ferramentas do Azure, como a CLI do Azure ou o portal do Azure.
Você pode reimplantar seu código usando 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
Você não precisa alterar o nome do grupo de recursos (--resource-group
) a menos que o tenha alterado no script.
Para implantar seu código no portal do Azure:
- Acesse o portal do Azure.
- Navegue até grupos de recursos e localize o grupo de recursos que você criou.
- Selecione o nome do grupo de recursos para exibir seus recursos. Verifique se ele inclui um Plano do Serviço de Aplicativo e um Serviço de Aplicativo.
- Selecione o Serviço de Aplicativo e vá para o Centro de Implantação.
- No menu superior, selecione Sincronizar para disparar a implantação do código.
8: Limpar recursos
az group delete --name PythonAzureExample-WebApp-rg --no-wait
Você não precisa alterar o nome do grupo de recursos (--resource-group
opção), a menos que o tenha alterado no script.
Se você não precisar mais do grupo de recursos criado neste exemplo, poderá excluí-lo executando o comando az group delete . Embora os grupos de recursos não incorram em encargos contínuos, é uma boa prática limpar todos os recursos não utilizados. Use o --no-wait
argumento para retornar imediatamente o controle à linha de comando sem aguardar a conclusão da exclusão.
Você também pode excluir um grupo de recursos programaticamente usando o ResourceManagementClient.resource_groups.begin_delete
método.
Consulte também
- Exemplo: criar um grupo de recursos
- Exemplo: listar grupos de recursos em uma assinatura
- Exemplo: criar o Armazenamento do Azure
- Exemplo: usar o Armazenamento do Azure
- Exemplo: criar e consultar um banco de dados MySQL
- Exemplo: criar uma máquina virtual
- Usar discos gerenciados do Azure com máquinas virtuais
- Concluir uma breve pesquisa sobre o SDK do Azure para Python