Tutorial: Usar o Conector de Serviço para criar um aplicativo Django com Postgres no Serviço de Aplicativo do Azure
Observação
Neste tutorial, você usará o Conector de Serviço 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. Confira a seção Criar um conector sem senha para o banco de dados Postgres para ver onde o Conector de Serviço entra em cena e simplifica o processo de conexão descrito no tutorial do Serviço de Aplicativo.
Este tutorial mostra como implantar um aplicativo Web Python Django controlado por dados no Serviço de Aplicativo do Azure e conectá-lo a um Servidor Flexível de Banco de Dados do Azure para PostgreSQL.
Neste tutorial, você usa a CLI do Azure para concluir as seguintes tarefas:
- Configurar o ambiente inicial com Python e a CLI do Azure
- Criar um Servidor Flexível de Banco de Dados do Azure para PostgreSQL
- Implantar um código no Serviço de Aplicativo do Azure e conectar-se ao Servidor Flexível do PostgreSQL
- Atualizar seu código e reimplantar
- Exibir logs de diagnóstico
- Gerenciar o aplicativo Web no portal do Azure
Configurar o 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
Clonar ou baixar 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ê implantará um aplicativo Web Django para o Serviço de Aplicativo do Azure. O aplicativo Web usa uma identidade gerenciada atribuída pelo sistema (conexões sem senha) com controle de acesso baseado em função do Azure para acessar recursos do Armazenamento do Microsoft Azure e do Banco de Dados do Azure para PostgreSQL – Servidor Flexível. O código usa a classe DefaultAzureCredential da biblioteca de clientes de Identidade do Azure para Python. A classe DefaultAzureCredential
detecta automaticamente que uma identidade gerenciada existe 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. Encontre as configurações de desenvolvimento em azuresite/settings.py.
- O aplicativo usa as configurações de produção quando a variável de ambiente
WEBSITE_HOSTNAME
é definida. O Serviço de Aplicativo do Azure define automaticamente essa variável como a URL do aplicativo Web, comomsdocs-django.azurewebsites.net
.
Essas configurações de produção são específicas para configurar o Django para execução em qualquer ambiente de produção e não são específicas do Serviço de Aplicativo. Para saber mais, confira a Lista de verificação de implantação do Django. Confira também Configurações de produção para o Django no Azure para obter detalhes sobre algumas das alterações.
Está com problemas? Fale conosco.
Criar um banco de dados Postgres no Azure
Configurar 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
precisa conter de 8 a 128 caracteres de três das seguintes categorias: letras maiúsculas, letras minúsculas, números e caracteres não alfanuméricos. Ao criar nomes de um ou senhas, não use o$
caractere. Posteriormente, você vai criar variáveis de ambiente com esses valores no qual o caractere$
tem um significado específico no contêiner do Linux usado para executar aplicativos Python.Crie um grupo de recursos (você pode alterar o nome, se desejado). O nome do grupo de recursos é armazenado em cache e aplicado automaticamente aos comandos subsequentes.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Criar o servidor do banco de dados. Se solicitado a habilitar o acesso ao endereço IP do cliente atual, digite
y
para sim. Esse processo leva 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 comando
az
não for reconhecido, verifique se você tem 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, caso ainda não haja um nome armazenado em cache.
- Crie um Servidor Flexível do PostgreSQL:
- Com o nome do servidor especificado com o parâmetro
--name
. O nome precisa ser exclusivo em todo o Azure. - Com a SKU especificada com o parâmetro
--sku-name
.
- Com o nome do servidor especificado com o parâmetro
- Crie uma conta de administrador com um nome de usuário e uma senha especificados com os parâmetros
--admin-user
e--admin-password
. - Crie um banco de dados cujo nome seja especificado com o parâmetro
--database-name
.
Configure uma regra de firewall no servidor usando o comando az postgres flexible-server firewall-rule create. Essa regra permite que seu ambiente local acesse o servidor. (Se for solicitado que você habilite o acesso a partir 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 é o meu endereço IP?.Crie um banco de dados chamados
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ê criará o host do aplicativo do Serviço de Aplicativo, conectará esse aplicativo ao banco de dados Postgres e implantará o código nesse host.
Criar o aplicativo do Serviço de Aplicativo
No terminal, verifique se você está na pasta do repositório serviceconnector-webapp-postgresql-django-passwordless que contém o código do aplicativo.
Execute o seguinte comando
az webapp up
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 custo do plano do Serviço de Aplicativo. O plano de serviço B1 (Básico) gera um pequeno custo em sua assinatura do Azure. Para obter uma lista completa dos planos do Serviço de Aplicativo, exiba a página de Preço do Serviço de Aplicativo.
Esse comando executa as seguintes ações, que podem levar alguns minutos, usando o grupo de recursos e o local armazenado em cache do comando
az group create
anterior (o grupo$RESOURCE_GROUP_NAME
na regiãoeastus
neste exemplo).- Crie um plano do Serviço de Aplicativo no tipo de preço Básico (B1). Você pode omitir
--sku
o uso de valores padrão. - Crie o aplicativo do Serviço de Aplicativo.
- Habilite o registro em log padrão para o aplicativo.
- Carregar o repositório usando a implantação ZIP com a automação do build habilitada.
- Crie um plano do Serviço de Aplicativo no tipo de preço Básico (B1). Você pode omitir
Configure o Serviço de Aplicativo para usar 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 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 chamada AZURE_POSTGRESQL_CONNECTIONSTRING
para o servidor flexível PostgresSQL e uma variável de ambiente chamada AZURE_STORAGEBLOB_RESOURCEENDPOINT
para a conta de Armazenamento do Microsoft Azure.
Os comandos do Conector de Serviço configuram os recursos do Armazenamento do Microsoft Azure e do Banco de Dados do Azure para PostgreSQL para usar a identidade gerenciada e o controle de acesso baseado em função do Azure. Os comandos criam configurações 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 executadas para habilitar o recurso sem senha.
- Adicione um conector de serviço PostgreSQL com o comando az webapp connection create postgres-flexible. A identidade gerenciada atribuída pelo sistema é usada para autenticar o aplicativo Web no recurso de destino, PostgreSQL, nesse 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
Observação
Caso veja a mensagem de erro “A assinatura não está registrada para usar o Microsoft.ServiceLinker”, execute az provider register -n Microsoft.ServiceLinker
para registrar o provedor de recursos do Conector de Serviço e execute o comando de conexão novamente.
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 saber mais, confira Acessar variáveis do ambiente.
Está com problemas? Confira primeiro o Guia de solução de problemas. Caso contrário, fale conosco.
Criar uma conta de armazenamento e se conectar a ela
- Use o comando az webapp connection create storage-blob para criar uma conta de armazenamento e um conector de serviço que faça as seguintes configurações:
Habilita a identidade gerenciada atribuída pelo sistema no aplicativo Web
Adiciona o aplicativo Web com a função Colaborador de dados de blob de armazenamento à conta de armazenamento recém-criada.
Configure a rede da conta de armazenamento para aceitar o 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 usuários do aplicativo de restaurante acessarem 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. Permitir o acesso de leitura anônimo (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 do Python no Azure
O aplicativo Python de exemplo usa o pacote azure.identity e a classe DefaultAzureCredential
. Quando o aplicativo está em execução no Azure, o DefaultAzureCredential
detecta automaticamente se existe uma identidade gerenciada para o Serviço de Aplicativo e, em caso afirmativo, a utiliza para acessar outros recursos do Azure (armazenamento e PostgreSQL neste caso). Não há necessidade de fornecer chaves de armazenamento, certificados ou credenciais para o Serviço de Aplicativo para acessar esses recursos.
Navegue até o aplicativo implantado no URL
http://$APP_SERVICE_NAME.azurewebsites.net
.Pode levar um ou dois minutos para o aplicativo iniciar. Se você vir uma página de aplicativo padrão que não seja a página de aplicativo de exemplo padrão, aguarde um minuto e atualize o navegador.
Teste a funcionalidade do aplicativo de exemplo adicionando um restaurante e algumas avaliações com fotos do restaurante. As informações de restaurante e avaliaçã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:
Limpar os recursos
Se quiser manter o aplicativo ou prosseguir para mais tutoriais, vá para Próximas etapas. 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. Antes de usar o comando, verifique se os recursos contidos no grupo não serão mais necessários.
A exclusão de todos os recursos pode levar algum tempo. O argumento --no-wait
permite que o comando seja retornado imediatamente.
Está com problemas? Fale conosco.