Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. 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 ARM. 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.
1: Configure seu ambiente de desenvolvimento local
Se ainda não o fez, configure um ambiente onde possa executar este código. Seguem-se algumas opções:
Configure um ambiente virtual Python usando
venv
ou sua ferramenta de preferência. Para começar a usar o ambiente virtual, não deixe de ativá-lo. 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)
Use um ambiente de conda. Para instalar o Conda, consulte Instalar o Miniconda.
Use um contêiner de desenvolvimento no Visual Studio Code ou GitHub Codespaces.
2: Instale 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: Fork o repositório de exemplo
Visite https://github.com/Azure-Samples/python-docs-hello-world e copie o repositório para a sua conta pessoal no GitHub. Utilizar um fork assegura que o utilizador tenha as permissões necessárias para desplegar a aplicação no Azure.
Em seguida, crie uma variável de ambiente chamada
REPO_URL
e defina-a como a URL do seu repositório bifurcado. Essa variável é exigida pelo código de exemplo na próxima seção.
- bash
- do powershell
export REPO_URL=<url_of_your_fork>
export AZURE_SUBSCRIPTION_ID=<subscription_id>
4: Escreva 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, de outra forma, 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 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 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.
Não é necessário alterar o nome do grupo de recursos (--resource-group
), a menos que o tenha alterado no script. Ao abrir o site, você verá "Olá, Mundo!" no seu navegador.
Sugestão
Se não vir a saída esperada, aguarde alguns minutos e tente novamente.
Se você ainda não estiver vendo a saída esperada:
- Vá para 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 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 usando integração manual. Com a integração manual, você precisa acionar manualmente o aplicativo Web para obter atualizações do repositório e da ramificação especificados.
O script usa o método WebSiteManagementClient.web_apps.sync_repository para acionar o aplicativo Web para extrair código do 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
Não é necessário alterar o nome do grupo de recursos (--resource-group
), a menos que o tenha alterado no script.
Para implantar seu código do portal do Azure:
- Vá para 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 Centro de Implantação.
- No menu superior, selecione Sincronizar para acionar a implantação do seu código.
8: Limpar recursos
az group delete --name PythonAzureExample-WebApp-rg --no-wait
Não é necessário 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 cobranças contínuas, é uma boa prática limpar quaisquer recursos não utilizados. Use o --no-wait
argumento para retornar imediatamente o controle à linha de comando sem esperar que a exclusão seja concluída.
Você também pode excluir um grupo de recursos programaticamente usando o ResourceManagementClient.resource_groups.begin_delete
método.
Ver também
- Exemplo: Criar um grupo de recursos
- Exemplo: Listar grupos de recursos em uma assinatura
- Exemplo: Criar 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
- Conclua uma breve pesquisa sobre o SDK do Azure para Python