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.
Neste tutorial, você aprenderá a implantar um aplicativo Web Python Django controlado por dados para Serviço de Aplicativo do Azure e usar o Service Connector para conectá-lo a outros serviços Azure. O aplicativo web de exemplo armazena informações de restaurante e avaliação em um banco de dados do Banco de Dados do Azure para PostgreSQL e armazena fotos em um contêiner do Armazenamento do Azure.
Você usa CLI do Azure para concluir as seguintes tarefas:
- Crie um aplicativo Web Python Django e implante-o em Serviço de Aplicativo do Azure.
- Crie um servidor e um banco de dados flexíveis Banco de Dados do Azure para PostgreSQL.
- Crie uma conta e um contêiner Armazenamento do Azure.
- Conecte o aplicativo web ao banco de dados e ao contêiner de armazenamento usando o Service Connector com autenticação de identidade gerenciada .
- Interaja com o aplicativo Web.
Observação
Este tutorial é semelhante ao tutorial do Serviço de Aplicativo Implantar um aplicativo web Python Django com PostgreSQL no Azure, mas usa uma identidade gerenciada sem senha atribuída pelo sistema com controle de acesso baseado em função do Azure para acessar outros recursos do Azure. A seção Criar uma conexão de serviço sem senha deste artigo mostra como o Service Connector simplifica o processo de conexão.
O aplicativo Web usa a classe DefaultAzureCredential da biblioteca de clientes Python Azure Identity para detectar automaticamente quando uma identidade gerenciada existe e a usa para acessar os outros recursos.
Pré-requisitos
Uma assinatura do Azure com permissões de gravação e atribuição de função para os recursos do tutorial, em uma região do Azure que suporta o Conector de Serviço e tem suporte e cota suficientes para Serviço de Aplicativo.
Azure Cloud Shell para executar as etapas do tutorial ou se preferir executar localmente:
- Instale o CLI do Azure 2.87.0 ou versão posterior. Para verificar sua versão, execute
az version. Para atualizar, executeaz upgrade. - Instale Python 3.
- Instale o Git.
- Entre no Azure usando
az logine seguindo os prompts.
- Instale o CLI do Azure 2.87.0 ou versão posterior. Para verificar sua versão, execute
Configure seu ambiente
Registre os provedores de recursos
Microsoft.ServiceLinkereMicrosoft.DBforPostgreSQLna sua assinatura.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLInstale a versão mais recente da extensão sem senha do Service Connector. O
--upgradeparâmetro atualiza a extensão se já estiver instalada:az extension add --name serviceconnector-passwordless --upgrade
Clonar o aplicativo de exemplo
Importante
O repositório de amostras do tutorial foi arquivado em 15 de junho de 2026 e não é mais mantido ativamente. Use apenas para completar este tutorial.
Clone o repositório do aplicativo de exemplo.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternativamente, você pode baixar o aplicativo do repositório serviceconnector-webapp-postgresql-django-passwordless e descompactá-lo em uma pasta chamada serviceconnector-webapp-postgresql-django-passwordless.
Altere os diretórios para a pasta de repositório usando
cd serviceconnector-webapp-postgresql-django-passwordlesse execute todos os comandos restantes dessa pasta.
No aplicativo de exemplo, as configurações de produção do aplicativo web estão no arquivo azureproject/production.py . As configurações de desenvolvimento estão no Azureproject/settings.py. As configurações de produção configuram o Django para ser executado em qualquer ambiente de produção e não são específicas do Serviço de Aplicativo.
O aplicativo usa configurações de produção quando a variável de WEBSITE_HOSTNAME ambiente é definida. O App Service define essa variável para o nome do host do app, como msdocs-django.azurewebsites.net.
Para obter mais informações, consulte a lista de verificação de implantação do Django. Consulte também as configurações de Produção para o Django no Azure.
Definir variáveis de ambiente iniciais
O código a seguir define as variáveis de ambiente necessárias para este tutorial.
-
LOCATIONdeve ser uma região do Azure onde sua assinatura possui quota suficiente para a criação de recursos e não restrinja o uso do Banco de Dados do Azure para PostgreSQL para sua assinatura. - A senha do administrador do PostgreSQL deve conter de 8 a 128 caracteres de pelo menos três dessas categorias: letras maiúsculas, minúsculas, numerais e caracteres não alfanuméricos. Não use
$na senha 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 senha do administrador do PostgreSQL sem exibi-la ou adicioná-la 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
Implantar o código do aplicativo no Serviço de Aplicativo
Crie o host do app no App Service, ative a automação da construção e implante o código de exemplo do app. O plano Basic (B1) de App Service usado neste tutorial tem um custo na sua assinatura do Azure. Para preços atuais, veja preços de serviços de aplicativos.
O arquivo requirements.txt do sample 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 Aplicativos Linux na faixa de preços Básica (B1) e então crie o aplicativo web com o comando de inicialização 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 automação de compilação do App Service para que a implantação instale os pacotes de requirements.txt:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueNa raiz do repositório, crie um arquivo ZIP do aplicativo de exemplo e implante-o usando o comando 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 implantação é bem-sucedido quando o App Service aceita o arquivo ZIP. A build continua no App Service e pode levar vários minutos.
Crie o banco de dados PostgreSQL no Azure
Crie um servidor e banco de dados flexíveis no Banco de Dados do Azure para PostgreSQL para armazenar os dados do app.
Crie o servidor do Banco 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 de servidores flexíveis do PostgreSQL é
Succeeded.Remova a senha de administrador do shell atual após a criação do servidor:
unset ADMIN_PWCrie o banco de dados usando 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 conexão de serviço sem senha
Use az webapp connection create postgres-flexible para adicionar um conector de serviço que conecta o aplicativo Web do Azure ao banco de dados PostgreSQL usando autenticação por identidade gerenciada sem senha. O comando a seguir configura o Banco de Dados do Azure para PostgreSQL para usar a identidade gerenciada e o controle de acesso baseado em função do Azure. A saída do comando lista as ações que o Service Connector executa.
O comando cria uma configuração de aplicativo chamada AZURE_POSTGRESQL_CONNECTIONSTRING que contém as informações de conexão com o banco de dados. O exemplo mostra essa configuraçã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 conexão está pronta quando o comando reporta a conexão do servidor flexível PostgreSQL e cria a AZURE_POSTGRESQL_CONNECTIONSTRING configuração do app.
Conecte o aplicativo web Django ao Armazenamento do Azure com Service Connector
Crie uma conta de armazenamento do Azure e, em seguida, use az webapp connection create storage-blob para conectá-la ao aplicativo Web. O comando de conexão executa as seguintes ações:
- Habilita a identidade gerenciada atribuída pelo sistema no aplicativo Web.
- Adiciona o aplicativo Web com a função Storage Blob Data Contributor à conta de armazenamento.
- Configura a rede da conta de armazenamento para aceitar o acesso do aplicativo Web.
- Cria uma variável de ambiente chamada
AZURE_STORAGEBLOB_RESOURCEENDPOINTpara a conta Armazenamento do Azure.
Criar uma conta 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 conexão de armazenamento sem senha
Crie a conexão sem senha para a 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 conexão está pronta quando o comando reporta a conexão da conta de armazenamento e cria a configuração do AZURE_STORAGEBLOB_RESOURCEENDPOINT app.
Configure o contêiner de fotos de amostra
Atualize a conta de armazenamento do Azure para permitir acesso de leitura pública aos blobs para este aplicativo de exemplo arquivado.
Observação
Este exemplo arquivado usa URLs diretas de blob para exibir fotos, então o tutorial habilita acesso de leitura anônimo ao contêiner
photos. Essa configuração é específica para o exemplo e não é exigida pelo Service Connector. Para aplicativos de produção, mantenha os contêineres 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 sua permissão de usuário logado para criar o container usando 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 configuração
MSYS_NO_PATHCONVpara esse comando impede que o Git Bash no Windows converta o ID de recurso do Azure em um caminho do Windows. Isso não tem efeito no Azure Cloud Shell ou em outros ambientes Bash. Atribuições de funções podem levar alguns minutos para se tornarem eficazes.Use az storage container create para criar um contêiner chamado
photose permitir acesso de leitura anônimo aos blobs nesse contêiner: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 contêiner está pronto quando a resposta aparece
"created": truepara ophotoscontêiner.
Testar o aplicativo Web Python no Azure
Abra e teste o aplicativo Web Azure Restaurant Review. O aplicativo usa o pacote azure.identity e sua DefaultAzureCredential classe. Quando o aplicativo está em execução no Azure, o DefaultAzureCredential detecta automaticamente quando existe uma identidade gerenciada para o Serviço de Aplicativo e o usa para acessar os recursos de Armazenamento do Azure e Banco de Dados do Azure para PostgreSQL. O aplicativo não precisa fornecer chaves de armazenamento, certificados ou credenciais para acessar esses recursos.
Para uma instalação de CLI do Azure local, você pode usar
az webapp browsepara abrir o aplicativo no navegador padrão:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell não pode abrir um navegador local, portanto, ele não dá suporte ao comando
az webapp browse. No Cloud Shell, selecione o link Domínio padrão no canto superior direito da página do portal do Azure do aplicativo.
Pode levar um ou dois minutos para o aplicativo iniciar. Se você vir uma página de aplicativo padrão que não é o aplicativo de exemplo, aguarde um minuto e atualize o navegador.
Teste a funcionalidade do aplicativo de exemplo adicionando um restaurante e algumas avaliações com fotos. O aplicativo deve ser semelhante à seguinte captura de tela:
Limpar os recursos
Para evitar encargos contínuos, você pode excluir os recursos criados para este tutorial excluindo o grupo de recursos que os contém. Verifique se você não precisa mais do aplicativo ou dos recursos antes de executar o comando.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
O comando retorna imediatamente enquanto Azure exclui os recursos.
Solução de problemas
Se o app não iniciar ou não se conectar aos seus recursos, verifique os logs de implantação do App Service, confirme que as AZURE_POSTGRESQL_CONNECTIONSTRINGconfigurações do appAZURE_STORAGEBLOB_RESOURCEENDPOINT existem e aguarde alguns minutos para que as atribuições de função do Azure entrem em vigor. Para problemas de inicialização de aplicativos em Python, veja o seguinte artigo: