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 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 ver exemplos, consulte Início Rápido: Implantar um aplicativo Web Python (Django ou Flask) para o 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
Caso ainda não tenha feito isso, configure um ambiente onde você possa executar esse código. Estas são algumas opções:
Configure um ambiente virtual Python usando o
venv
ou sua ferramenta de escolha. Você pode criar o ambiente virtual localmente ou no Azure Cloud Shell e executar o código lá. Não esqueça de ativar o ambiente virtual para começar a usá-lo.Use um ambiente conda.
Use um Contêiner de Desenvolvimento no Visual Studio Code ou no GitHub Codespaces.
2: Instalar os pacotes da 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: Criar fork do repositório de exemplo
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 você tenha permissões para implantar o repositório no Azure.
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:
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 variáveis de ambiente REPO_URL
e AZURE_SUBSCRIPTION_ID
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ê usará a mesma identidade para autenticação. Dependendo do seu ambiente, talvez você precise executar az login
primeiro para autenticar.
Para colocar esse código em um script de produção (por exemplo, para automatizar o gerenciamento da VM), você deve usar DefaultAzureCredential
(recomendado) ou com um método baseado na entidade de serviço, como descrito em Como autenticar aplicativos Python com os 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 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 --name
) e o nome do grupo de recursos (opção --resource-group
) pelos valores usados no script. Você deverá 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:
- Acesse o portal do Azure.
- Selecione Grupos de recursos e encontre o grupo de recursos que você criou.
- 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.
- Selecione o Serviço de Aplicativo e então selecione Centro de Implantação.
- 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 sua bifurcação 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 acionar um pull do aplicativo Web. Se enviar alterações de código subsequentes por push para o repositório, você poderá reimplantar o 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 --name
) e o nome do grupo de recursos (opção --resource-group
) pelos valores usados no script.
Para implantar seu código do portal do Azure:
- Acesse o portal do Azure.
- Selecione Grupos de recursos e encontre o grupo de recursos que você criou.
- 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.
- Selecione o Serviço de Aplicativo e então selecione Centro de Implantação.
- 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 você 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
- Exemplo: criar um grupo de recursos
- Exemplo: listar os grupos de recursos de 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 o Managed Disks do Azure com máquinas virtuais
- Conclua uma breve pesquisa sobre o SDK do Azure para Python