Tutorial: Usando o Service Connector para criar um aplicativo Django com o Postgres no Serviço de Aplicativo do Azure
Nota
Neste tutorial, você usa o Service Connector para conectar um aplicativo Web a um serviço de banco de dados. Este tutorial é uma modificação do tutorial do Serviço de Aplicativo, portanto, você pode ver algumas semelhanças. Consulte a seção Criar um conector sem senha para o banco de dados Postgres para ver onde o Service Connector entra em ação e simplifica o processo de conexão fornecido no tutorial do Serviço de Aplicativo.
Este tutorial mostra como implantar um aplicativo Web Python Django orientado por dados no Serviço de Aplicativo do Azure e conectá-lo a um Banco de Dados do Azure para banco de dados de servidor flexível PostgreSQL.
Neste tutorial, você usa a CLI do Azure para concluir as seguintes tarefas:
- Configure seu ambiente inicial com Python e a CLI do Azure
- Criar um Banco de Dados do Azure para banco de dados de servidor flexível PostgreSQL
- Implantar código no Serviço de Aplicativo do Azure e conectar-se ao servidor flexível PostgreSQL
- Atualize seu código e reimplante
- Ver registos de diagnóstico
- Gerenciar o aplicativo Web no portal do Azure
Configurar seu ambiente inicial
Inicie a partir do Azure Cloud Shell no Portal do Azure e instale a extensão sem senha do conector de serviço para a CLI do Azure.
az extension add --name serviceconnector-passwordless --upgrade
Clone ou baixe o aplicativo de exemplo
Clone o repositório de exemplo:
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
Navegue até a seguinte pasta:
cd serviceconnector-webapp-postgresql-django-passwordless
Neste tutorial, você implanta um aplicativo Web Django no Serviço de Aplicativo do Azure. O aplicativo Web usa uma identidade gerenciada atribuída ao sistema (conexões sem senha) com controle de acesso baseado em função do Azure para acessar o Armazenamento do Azure e o Banco de Dados do Azure para recursos do PostgreSQL - Servidor Flexível. O código usa a classe DefaultAzureCredential da biblioteca de cliente do Azure Identity para Python. A DefaultAzureCredential
classe deteta automaticamente que existe uma identidade gerenciada para o Serviço de Aplicativo e a usa para acessar outros recursos do Azure.
- As configurações de produção estão no arquivo azuresite/production.py . As configurações de desenvolvimento estão em azuresite/settings.py.
- O aplicativo usa configurações de produção quando a variável de
WEBSITE_HOSTNAME
ambiente é definida. O Serviço de Aplicativo do Azure define automaticamente essa variável para a URL do aplicativo Web, comomsdocs-django.azurewebsites.net
.
As configurações de produção são específicas para configurar o Django para ser executado em qualquer ambiente de produção e não são específicas do Serviço de Aplicativo. Para obter mais informações, consulte a lista de verificação de implantação do Django. Consulte também Configurações de produção do Django no Azure para obter detalhes sobre algumas das alterações.
Tem problemas? Deixe-nos saber.
Criar banco de dados Postgres no Azure
Configure as variáveis de ambiente necessárias para o tutorial.
LOCATION="eastus" RAND_ID=$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" ADMIN_USER="demoadmin" ADMIN_PW="{your database password}"
Importante
O
ADMIN_PW
deve conter de 8 a 128 caracteres de três das seguintes categorias: letras maiúsculas em inglês, letras minúsculas em inglês, números e caracteres não alfanuméricos. Ao criar nomes de usuário ou senhas , não use o$
caractere. Mais tarde, você cria variáveis de ambiente com esses valores, onde o$
caractere tem um significado específico dentro do contêiner Linux usado para executar aplicativos Python.Crie um grupo de recursos (você pode alterar o nome, se desejar). O nome do grupo de recursos é armazenado em cache e aplicado automaticamente aos comandos subsequentes.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Crie o servidor de banco de dados. Se solicitado a habilitar o acesso ao endereço IP do cliente atual, digite
y
sim. Este processo demora alguns minutos: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 --active-directory-auth Enabled
Se o
az
comando não for reconhecido, certifique-se de ter a CLI do Azure instalada conforme descrito em Configurar seu ambiente inicial.O comando az postgres flexible-server create executa as seguintes ações, que levam alguns minutos:
- Crie um grupo de recursos padrão se ainda não houver um nome armazenado em cache.
- Crie um servidor flexível PostgreSQL:
- Com o nome do servidor especificado com o
--name
parâmetro. O nome tem de ser exclusivo em todo o Azure. - Com o sku especificado com o
--sku-name
parâmetro.
- Com o nome do servidor especificado com o
- Crie uma conta de administrador com um nome de usuário e senha especificados com os
--admin-user
parâmetros e--admin-password
. - Crie um banco de dados cujo nome é especificado com o
--database-name
parâmetro.
Configure uma regra de firewall no seu servidor com o comando az postgres flexible-server firewall-rule create . Esta regra permite que seu ambiente local acesse o servidor. (Se você for solicitado a habilitar o acesso do endereço IP do cliente na etapa anterior, ignore esta etapa.)
IP_ADDRESS=<your IP> az postgres flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --rule-name AllowMyIP \ --start-ip-address $IP_ADDRESS \ --end-ip-address $IP_ADDRESS
Use qualquer ferramenta ou site que mostre seu endereço IP para substituir
<your IP>
no comando. Por exemplo, você pode usar o site Qual é meu endereço IP?Crie um banco de dados nomeado
restaurant
usando o comando az postgres flexible-server execute .az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Implantar o código no Serviço de Aplicativo do Azure
Nesta seção, você cria um host de aplicativo no aplicativo do Serviço de Aplicativo, conecta esse aplicativo ao banco de dados Postgres e implanta seu código nesse host.
Criar o aplicativo do Serviço de Aplicativo
No terminal, verifique se você está na pasta serviceconnector-webapp-postgresql-django-passwordless repository que contém o código do aplicativo.
Execute o seguinte
az webapp up
comando para criar o host do Serviço de Aplicativo para o aplicativo:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1
A sku define o tamanho (CPU, memória) e o custo do plano do Serviço de Aplicativo. O plano de serviço B1 (Básico) incorre em um pequeno custo em sua assinatura do Azure. Para obter uma lista completa dos planos do Serviço de Aplicativo, consulte a página de preços do Serviço de Aplicativo .
Este comando executa as seguintes ações, que podem levar alguns minutos, usando o grupo de recursos e o local armazenados em cache do comando anterior
az group create
(o grupo$RESOURCE_GROUP_NAME
naeastus
região neste exemplo).- Crie um plano do Serviço de Aplicativo na camada de preço Básico (B1). Você pode omitir
--sku
o uso de valores padrão. - Crie o aplicativo Serviço de Aplicativo.
- Habilite o log padrão para o aplicativo.
- Carregue o repositório usando a implantação ZIP com a automação de compilação habilitada.
- Crie um plano do Serviço de Aplicativo na camada de preço Básico (B1). Você pode omitir
Configure o Serviço de Aplicativo para usar o start.sh no repositório com o comando az webapp config set .
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Criar um conector sem senha para o banco de dados Postgres
Com o código agora implantado no Serviço de Aplicativo, a próxima etapa é conectar o aplicativo ao banco de dados Postgres no Azure. O código do aplicativo espera encontrar informações de banco de dados em uma variável de ambiente nomeada AZURE_POSTGRESQL_CONNECTIONSTRING
para servidor flexível PostgresSQL e uma variável de ambiente nomeada AZURE_STORAGEBLOB_RESOURCEENDPOINT
para conta de Armazenamento do Azure.
Os comandos do Service Connector configuram o Armazenamento do Azure e o Banco de Dados do Azure para recursos do PostgreSQL para usar a identidade gerenciada e o controle de acesso baseado em função do Azure. Os comandos criam configurações de aplicativo no Serviço de Aplicativo que conectam seu aplicativo Web a esses recursos. A saída dos comandos lista as ações do conector de serviço tomadas para habilitar a capacidade sem senha.
- Adicione um conector de serviço PostgreSQL com o comando az webapp connection create postgres-flexible . A identidade gerenciada atribuída ao sistema é usada para autenticar o aplicativo Web no recurso de destino, o PostgreSQL, neste caso.
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 restaurant \ --client-type python \ --system-identity
Nota
Se vir a mensagem de erro "A subscrição não está registada para utilizar Microsoft.ServiceLinker", execute az provider register -n Microsoft.ServiceLinker
para registar o fornecedor de recursos do Service Connector e execute novamente o comando de ligação.
Em seu código Python, você acessa essas configurações como variáveis de ambiente com instruções como os.environ.get('AZURE_POSTGRESQL_HOST')
. Para obter mais informações, consulte Variáveis de ambiente do Access.
Tem problemas? Consulte primeiro o Guia de solução de problemas, caso contrário, informe-nos.
Crie uma conta de armazenamento e conecte-se a ela
- Use o comando az webapp connection create storage-blob para criar uma conta de armazenamento e cria um conector de serviço que faz as seguintes configurações:
Habilita a identidade gerenciada atribuída ao sistema no aplicativo Web
Adiciona o aplicativo Web com a função Storage Blob Data Contributor à conta de armazenamento recém-criada.
Configure a rede da conta de armazenamento para aceitar acesso do aplicativo Web.
STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \ --new true \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --client-type python \ --system-identity \ --query configurations[].value \ --output tsv) STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))
Atualize a conta de armazenamento para permitir o acesso público de blob para que os usuários do aplicativo de restaurante acessem as imagens.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access
Crie um contêiner chamado
photos
na conta de armazenamento com o comando az storage container create . Permita acesso de leitura anônima (público) a blobs no contêiner recém-criado.# Set the BLOB_ENDPOINT variable BLOB_ENDPOINT=$(az storage account show --name $STORAGE_ACCOUNT_NAME --query "primaryEndpoints.blob" | sed 's/"//g') echo $BLOB_ENDPOINT # Create the storage container using the BLOB_ENDPOINT variable az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINT
Testar o aplicativo Web Python no Azure
O aplicativo Python de exemplo usa o pacote azure.identity e sua DefaultAzureCredential
classe. Quando o aplicativo está sendo executado no Azure, DefaultAzureCredential
deteta automaticamente se existe uma identidade gerenciada para o Serviço de Aplicativo e, em caso afirmativo, usa-o para acessar outros recursos do Azure (armazenamento e PostgreSQL, neste caso). Não há necessidade de fornecer chaves de armazenamento, certificados ou credenciais ao Serviço de Aplicativo para acessar esses recursos.
Navegue até o aplicativo implantado na URL
http://$APP_SERVICE_NAME.azurewebsites.net
.Pode levar um ou dois minutos para o aplicativo iniciar. Se vir uma página de aplicação predefinida que não seja a página de aplicação de exemplo predefinida, aguarde um minuto e atualize o browser.
Teste a funcionalidade do aplicativo de exemplo adicionando um restaurante e algumas avaliações com fotos do restaurante. As informações de restaurante e revisão são armazenadas no Banco de Dados do Azure para PostgreSQL e as fotos são armazenadas no Armazenamento do Azure. Aqui está um exemplo de captura de tela:
Clean up resources (Limpar recursos)
Se quiser manter a aplicação ou continuar com mais tutoriais, avance para os próximos passos. Caso contrário, para evitar incorrer em cobranças contínuas, exclua o grupo de recursos criado para este tutorial:
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Ao excluir o grupo de recursos, você também desaloca e exclui todos os recursos contidos nele. Certifique-se de que você não precisa mais dos recursos no grupo antes de usar o comando.
Excluir todos os recursos pode levar algum tempo. O --no-wait
argumento permite que o comando retorne imediatamente.
Tem problemas? Deixe-nos saber.