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.
Neste tutorial, aprende a implementar uma aplicação web Python orientada por dados para o Serviço de Aplicações do Azure e usar o Service Service para a ligar a outros serviços Azure. A aplicação web de exemplo armazena informações de restaurantes e avaliações numa base de dados Base de Dados do Azure para PostgreSQL e armazena fotografias num contentor Armazenamento do Azure.
Utiliza o CLI do Azure para completar as seguintes tarefas:
- Crie uma aplicação web Python Django e implemente-a no Serviço de Aplicações do Azure.
- Crie um servidor e base de dados Base de Dados do Azure para PostgreSQL flexíveis.
- Cria uma conta Armazenamento do Azure e um contentor.
- Ligue a aplicação web à base de dados e ao contentor de armazenamento usando o Service Connector com autenticação de identidade gerida .
- Interaja com a aplicação web.
Nota
Este tutorial é semelhante ao tutorial do App Service Deploy uma aplicação web Python Django com PostgreSQL no Azure, mas utiliza uma identidade gerida sem palavra-passe atribuída pelo sistema com controlo de acesso baseado em função do Azure para aceder a outros recursos do Azure. A secção Criar uma ligação de serviço sem palavra-passe deste artigo mostra como o Service Connector simplifica o processo de ligação.
A aplicação web utiliza a classe DefaultAzureCredential da biblioteca cliente Python Azure Identity para detetar automaticamente quando existe uma identidade gerida e utilizá-la para aceder aos outros recursos.
Pré-requisitos
Uma subscrição Azure com permissões de escrita e atribuição de funções para os recursos do tutorial, numa região Azure que suporta Service Connector e tenha suporte suficiente para App Service e quota.
Azure Cloud Shell para executar os passos do tutorial, ou se preferires correr localmente:
- Instale o CLI do Azure 2.87.0 ou posterior. Para verificar a sua versão, execute
az version. Para atualizar, executeaz upgrade. - Instala Python 3.
- Instale o Git.
- Inicie sessão no Azure usando
az logine seguindo as indicações.
- Instale o CLI do Azure 2.87.0 ou posterior. Para verificar a sua versão, execute
Configurar o ambiente
Registe os
Microsoft.ServiceLinkerfornecedores de recursosMicrosoft.DBforPostgreSQLpara a sua subscrição.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLInstale a versão mais recente da extensão sem palavra-passe Service Connector. O
--upgradeparâmetro atualiza a extensão se já estiver instalada:az extension add --name serviceconnector-passwordless --upgrade
Clonar a aplicação de exemplo
Importante
O repositório de exemplos do tutorial foi arquivado a 15 de junho de 2026 e já não é mantido ativamente. Usa-o apenas para completar este tutorial.
Clona o repositório da app de exemplo.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitEm alternativa, pode descarregar a aplicação do repositório serviceconnector-webapp-postgresql-django-passwordless e descompactá-la numa pasta chamada serviceconnector-webapp-postgresql-django-passwordless.
Muda diretórios para a pasta repositório usando
cd serviceconnector-webapp-postgresql-django-passwordlesse executa todos os comandos restantes dessa pasta.
Na aplicação de exemplo, as definições de produção da aplicação web estão no ficheiro azureproject/production.py . As definições de desenvolvimento estão no Azureproject/settings.py. As definições de produção configuram o Django para correr em qualquer ambiente de produção e não são específicas do App Service.
A aplicação utiliza definições de produção quando a WEBSITE_HOSTNAME variável de ambiente está definida. O App Service define esta variável para o nome do host da aplicação, como msdocs-django.azurewebsites.net.
Para mais informações, consulte a lista de verificação de implementação do Django. Veja também Definições de produção para Django em Azure.
Definir variáveis iniciais do ambiente
O código seguinte define as variáveis de ambiente necessárias para este tutorial.
-
LOCATIONdeve ser uma região do Azure onde a sua subscrição tenha quota suficiente para criar os recursos e não restringe o Azure Database para PostgreSQL para a sua subscrição. - A palavra-passe de administrador do PostgreSQL deve conter entre 8 a 128 caracteres de pelo menos três destas categorias: letras maiúsculas, minúsculas, numerais e caracteres não alfanuméricos. Não utilizes
$na palavra-passe deste tutorial.
Configure as seguintes variáveis de ambiente, substituindo
<region>por um valor válido:LOCATION="<region>" RAND_ID=$RANDOM$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app-$RAND_ID" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" APP_SERVICE_PLAN_NAME="$APP_SERVICE_NAME-plan" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" DATABASE_NAME="restaurant" STORAGE_ACCOUNT_NAME="account$RAND_ID" ADMIN_USER="demoadmin"Leia a palavra-passe de administrador do PostgreSQL sem a mostrar ou adicionar ao histórico do seu shell:
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoCrie um grupo de recursos para conter todos os recursos do projeto. O nome do grupo de recursos é armazenado em cache e aplicado automaticamente aos comandos subsequentes.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Implementar o código da aplicação no App Service
Crie o anfitrião da aplicação no App Service, ative a automação da construção e implemente o código de exemplo da aplicação. O plano Basic (B1) de App Service utilizado neste tutorial tem um custo na sua subscrição do Azure. Para os preços atuais, consulte preços de Serviços de Aplicações.
O ficheirorequirements.txt do exemplo arquivado não declara o servidor Gunicorn usado por start.sh. Adicione-o à sua cópia local se ainda não estiver presente:
grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txtCrie um plano de Serviço de Aplicações Linux na faixa de preços Básica (B1) e depois crie a aplicação web com o comando de arranque do exemplo:
az appservice plan create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_PLAN_NAME \ --location $LOCATION \ --sku B1 \ --is-linux az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --plan $APP_SERVICE_PLAN_NAME \ --runtime "PYTHON:3.14" \ --startup-file "start.sh"Ative a automatização da compilação do App Service para que a implementação instale os pacotes listados em requirements.txt:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueA partir da raiz do repositório, crie um ficheiro ZIP da aplicação de exemplo e implemente-a usando o az webapp deploy:
rm -f app.zip python -m zipfile -c app.zip * az webapp deploy \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --src-path app.zip \ --type zip \ --track-status false rm app.zipO comando de implementação é bem-sucedido quando o App Service aceita o ficheiro ZIP. A construção continua no App Service e pode demorar vários minutos.
Criar a base de dados PostgreSQL no Azure
Crie um servidor e base de dados flexíveis Base de Dados do Azure para PostgreSQL para armazenar os dados da aplicação.
Criar o servidor do Base de Dados do Azure para PostgreSQL:
az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --sku-name Standard_D2ds_v4 \ --microsoft-entra-auth EnabledO comando tem sucesso quando o estado de provisionamento do servidor flexível PostgreSQL é
Succeeded.Remover a palavra-passe de administrador da shell atual após a criação do servidor:
unset ADMIN_PWCrie a base de dados com az postgres flexible-server db create:
az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name $DB_SERVER_NAME \ --name $DATABASE_NAME
Criar uma ligação de serviço sem palavra-passe
Utilize az webapp connection create postgres-flexible para adicionar um conector de serviço que liga a aplicação Web do Azure à base de dados PostgreSQL através de autenticação sem palavra-passe com identidade gerida. O comando seguinte configura o Base de Dados do Azure para PostgreSQL para usar identidade gerida e controlo de acesso baseado em funções no Azure. A saída do comando lista as ações que o Service Connector realiza.
O comando cria uma configuração de aplicação chamada AZURE_POSTGRESQL_CONNECTIONSTRING que contém a informação da ligação à base de dados. O exemplo lê esta definição no azureproject/production.py. Para obter mais informações, consulte Variáveis de ambiente do Access.
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--server $DB_SERVER_NAME \
--database $DATABASE_NAME \
--client-type python \
--system-identity \
--yes
A ligação está pronta quando o comando reporta a ligação ao servidor flexível PostgreSQL e cria a configuração da AZURE_POSTGRESQL_CONNECTIONSTRING aplicação.
Ligue a aplicação web Django ao Armazenamento do Azure com o Service Connector
Crie uma conta de armazenamento no Azure e, em seguida, utilize az webapp connection create storage-blob para ligá-la à aplicação Web. O comando de ligação executa as seguintes ações:
- Ativa a identidade gerida atribuída ao sistema na aplicação web.
- Adiciona a aplicação Web com a função Storage Blob Data Contributor à conta de armazenamento.
- Configura a rede de contas de armazenamento para aceitar acesso a partir da aplicação web.
- Cria uma variável de ambiente chamada
AZURE_STORAGEBLOB_RESOURCEENDPOINTpara a conta Armazenamento do Azure.
Criar uma conta no Armazenamento do Azure
Crie uma conta de armazenamento v2 de uso geral com armazenamento localmente redundante:
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name $STORAGE_ACCOUNT_NAME \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2
Criar uma ligação de armazenamento sem palavra-passe
Crie a ligação sem palavra-passe à conta de armazenamento:
az webapp connection create storage-blob \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--account $STORAGE_ACCOUNT_NAME \
--client-type python \
--system-identity
A ligação está pronta quando o comando indica a ligação à conta de armazenamento e cria a definição AZURE_STORAGEBLOB_RESOURCEENDPOINT da aplicação.
Configure o recipiente da fotografia de amostra
Atualize a conta de armazenamento do Azure para permitir o acesso público de leitura aos blobs para esta aplicação de exemplo arquivada.
Nota
Este exemplo arquivado utiliza URLs diretos de blobs para mostrar fotografias, pelo que o tutorial ativa o acesso de leitura anónimo ao contentor
photos. Esta configuração é específica para a amostra e não é exigida pelo Service Connector. Para aplicações de produção, mantenha os contentores privados e utilize um método de entrega controlado, como um endpoint de aplicação autenticado.az storage account update \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access trueAtribua ao utilizador com sessão iniciada a permissão para criar o contentor através da autenticação Microsoft Entra:
SIGNED_IN_USER_ID=$(az ad signed-in-user show --query id --output tsv) STORAGE_ACCOUNT_ID=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query id \ --output tsv) MSYS_NO_PATHCONV=1 az role assignment create \ --assignee-object-id $SIGNED_IN_USER_ID \ --assignee-principal-type User \ --role "Storage Blob Data Contributor" \ --scope $STORAGE_ACCOUNT_IDA definição
MSYS_NO_PATHCONVdeste comando impede que o Git Bash no Windows converta o ID de recurso do Azure num caminho do Windows. Não tem efeito no Azure Cloud Shell ou noutros ambientes Bash. As atribuições de funções podem demorar alguns minutos a tornar-se eficazes.Utilize az storage container create para criar um contentor chamado
photose permitir o acesso de leitura anónimo aos blobs nesse contentor:BLOB_ENDPOINT=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query primaryEndpoints.blob \ --output tsv) az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINTO contentor está pronto quando a resposta mostra
"created": truepara o contentorphotos.
Teste a aplicação web em Python no Azure
Abra e teste a aplicação web Azure Restaurant Review. A aplicação utiliza o pacote azure.identity e a sua DefaultAzureCredential classe. Quando a aplicação está a correr em Azure, o DefaultAzureCredential deteta automaticamente quando existe uma identidade gerida para o Serviço de Aplicação e usa-a para aceder aos recursos Armazenamento do Azure e Base de Dados do Azure para PostgreSQL. A aplicação não precisa de fornecer chaves de armazenamento, certificados ou credenciais para aceder a estes recursos.
Para uma instalação CLI do Azure local, podes usar
az webapp browsepara abrir a aplicação no teu navegador predefinido:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell não consegue abrir um navegador local, por isso não suporta o comando
az webapp browse. A partir do Cloud Shell, selecione o link de domínio predefinido no canto superior direito da página do portal Azure da aplicação.
Pode levar um ou dois minutos para o aplicativo iniciar. Se vires uma página de aplicação padrão que não seja a aplicação de exemplo, aguarda um minuto e atualiza o navegador.
Testa a funcionalidade da aplicação de exemplo adicionando um restaurante e algumas avaliações com fotos. A aplicação deve assemelhar-se à seguinte captura de ecrã:
Limpar recursos
Para evitar cobranças contínuas, pode eliminar os recursos que criou para este tutorial eliminando o grupo de recursos que os contém. Certifica-te de que já não precisas da aplicação nem dos recursos antes de executares o comando.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
O comando retorna imediatamente enquanto o Azure apaga os recursos.
Troubleshooting
Se a aplicação não iniciar ou não conseguir ligar-se aos respetivos recursos, verifique os registos de implementação do App Service, confirme que as definições da aplicação AZURE_POSTGRESQL_CONNECTIONSTRING e AZURE_STORAGEBLOB_RESOURCEENDPOINT existem e aguarde alguns minutos para que as atribuições de função do Azure entrem em vigor. Para problemas de arranque de aplicações Python, veja o seguinte artigo: