Compartilhar via


Tutorial: Usando o Service Connector para criar um aplicativo Django com o Postgres no Azure App Service

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. Examine a seção Criar um conector sem senha para o banco de dados Postgres para ver onde o Service Connector entra em jogo 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 baseado em dados para Azure App Service e conectá-lo a um servidor flexível Azure Database for PostgreSQL banco de dados.

Neste tutorial, você usará o Azure CLI para concluir as seguintes tarefas:

  • Configurar seu ambiente inicial com Python e o Azure CLI
  • Criar um banco de dados em servidor flexível do Azure Database for PostgreSQL
  • Implantar código para Azure App Service 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 para autenticação sem senha do conector de serviço para o Azure CLI.

az extension add --name serviceconnector-passwordless --upgrade

Clonar ou baixar o aplicativo de exemplo

Clonar 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 Azure App Service. 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 Azure Storage e do Azure Database for PostgreSQL - Servidor Flexível. O código usa a classe DefaultAzureCredential da biblioteca de clientes Azure Identity para Python. A classe DefaultAzureCredential detecta automaticamente que existe uma identidade gerenciada para o Serviço de Aplicativo e a usa para acessar outros recursos 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. Azure App Service define automaticamente essa variável como a URL do aplicativo Web, como msdocs-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 obter mais informações, consulte a lista de verificação de implantação do Django. Consulte também as configurações de Produção do Django no Azure para obter detalhes sobre algumas das alterações.

Está com problemas? Fale conosco.

Criar banco de dados postgres no Azure

  1. 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 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 $. Posteriormente, você cria variáveis de ambiente com esses valores em que o caractere $ tem um significado específico dentro do contêiner do Linux usado para executar aplicativos Python.

  2. 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
    
  3. Criar o servidor do banco de dados. Se solicitado a habilitar o acesso ao endereço IP do cliente atual, digite y 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 o Azure CLI instalado conforme descrito em Constale 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 --name parâmetro. O nome deve ser exclusivo em todo o Azure.
      • Com o SKU especificado pelo parâmetro --sku-name.
    • Crie uma conta de administrador com um nome de usuário e uma senha especificados pelos parâmetros --admin-user e --admin-password.
    • Crie um banco de dados que nome é especificado com o --database-name parâmetro.
  4. 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 IP?.

  5. Crie um banco de dados chamado 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 para Azure App Service

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

  1. No terminal, verifique se você está na pasta do repositório serviceconnector-webapp-postgresql-django-passwordless que contém o código do aplicativo.

  2. 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
    

    O sku define o tamanho (CPU, memória) e o custo do plano de serviço de aplicativo. O plano de serviço B1 (Básico) gera um pequeno custo em sua assinatura de 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 armazenados em cache do comando anterior az group create (o grupo $RESOURCE_GROUP_NAME na eastus região neste exemplo).

    • Crie um plano do Serviço de Aplicativo na camada de preços Básica (B1). Você pode omitir --sku para usar valores padrão.
    • Crie o aplicativo do Serviço de Apps.
    • Habilite o registro em log padrão para o aplicativo.
    • Carregar o repositório usando a implantação ZIP com a automação de compilação habilitada.
  3. 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 chamada AZURE_POSTGRESQL_CONNECTIONSTRING para o servidor flexível postgreSQL e uma variável de ambiente chamada AZURE_STORAGEBLOB_RESOURCEENDPOINT para Azure Storage conta.

Os comandos do Conector de Serviço configuram os recursos do Azure Storage e do Azure Database para PostgreSQL para utilizar identidade gerenciada e o controle de acesso baseado em funções 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.

No 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.

Está com problemas? Veja primeiro o Guia de solução de problemas. Caso contrário, fale conosco.

Criar uma conta de armazenamento e se conectar a ela

  1. Use o comando az webapp connection create storage-blob para criar uma conta de armazenamento e crie 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 Blobs 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))
    
  1. Atualize a conta de armazenamento para permitir acesso público aos blobs, permitindo que os usuários do aplicativo de restaurante acessem as imagens.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  2. 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 Python no Azure

O aplicativo Python de exemplo usa o pacote azure.identity e sua classe DefaultAzureCredential. Quando o aplicativo está em execução no Azure, DefaultAzureCredential detecta automaticamente se existe uma identidade gerenciada para o Serviço de Aplicativo e, nesse caso, usa-a para acessar outros recursos de Azure (armazenamento e PostgreSQL nesse caso). Não há necessidade de fornecer chaves de armazenamento, certificados ou credenciais para o Serviço de Aplicativo para acessar esses recursos.

  1. 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.

  2. 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 em Azure Database for PostgreSQL e as fotos são armazenadas em Azure Storage. Aqui está um exemplo de captura de tela:

    Screenshot do aplicativo de exemplo mostrando a funcionalidade de revisão de restaurante usando Azure App Service, Azure Banco de Dados PostgreSQL e Azure Storage.

Limpar os recursos

Se você quiser manter o aplicativo ou continuar com mais tutoriais, vá para as 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 --no-wait argumento permite que o comando retorne imediatamente.

Está com problemas? Fale conosco.

Próxima etapa