Partilhar via


Tutorial: Usar o Service Connector para construir uma aplicação Django com o Postgres no Azure App Service

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 App Service, por isso pode ver algumas semelhanças. Consulta a secção Criar um conector sem palavra-passe para a base de dados Postgres para ver onde o Service Connector entra em jogo e simplifica o processo de ligação dado no tutorial do App Service.

Este tutorial mostra como implementar uma aplicação web orientada por dados Python Django para Azure App Service e ligá-la a uma base de dados Azure Database for PostgreSQL Flexible server.

Neste tutorial, utiliza a Azure CLI para completar as seguintes tarefas:

  • Configura o teu ambiente inicial com Python e a Azure CLI
  • Criar um servidor flexível do Azure Database for PostgreSQL
  • Deploye código para Azure App Service e conecte-se ao servidor PostgreSQL Flexible
  • Atualize seu código e reimplante
  • Ver registos de diagnóstico
  • Gerir a aplicação web no portal do Azure

Configurar seu ambiente inicial

Inicie a partir de Azure Cloud Shell no portal Azure e instale a extensão sem palavra-passe do conector de serviço para o Azure CLI.

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, implementas uma aplicação web Django para Azure App Service. A aplicação web utiliza uma identidade gerida atribuída pelo sistema (ligações sem palavra-passe) com controlo de acesso baseado em funções do Azure para aceder a Azure Storage e Azure Database for PostgreSQL - Servidor Flexível. O código utiliza a classe DefaultAzureCredential da biblioteca cliente Azure Identity para Python. A classe DefaultAzureCredential deteta automaticamente que existe uma identidade gerida para o Serviço de Aplicações e usa-a para aceder a outros recursos Azure.

  • As definições de produção estão no ficheiro azuresite/production.py . As definições de desenvolvimento são em Azuresite/settings.py.
  • A aplicação utiliza definições de produção quando a WEBSITE_HOSTNAME variável de ambiente está definida. Azure App Service define automaticamente esta variável para a URL da aplicação web, como msdocs-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 mais informações, consulte a lista de verificação de implementação do Django. Veja também Definições de produção para Django no Azure para detalhes sobre algumas das alterações.

Tem problemas? Deixe-nos saber.

Criar base de dados Postgres no Azure

  1. 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 utilizador ou senhas não use o $ caractere. Mais tarde, cria-se variáveis de ambiente com estes valores onde o carácter $ tem um significado específico dentro do contentor Linux usado para executar Python aplicações.

  2. Cria um grupo de recursos (podes mudar o nome, se quiseres). 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. Crie o servidor de banco de dados. Se for solicitado para ativar o acesso ao endereço IP atual do cliente, escreva 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 comando az não for reconhecido, certifique-se de que tem o Azure CLI instalado conforme descrito em Configurar o seu ambiente inicial.

    O comando az postgres flexible-server create executa as seguintes ações, que demoram 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 único em toda a Azure.
      • Com o SKU especificado com o parâmetro --sku-name.
    • Crie uma conta de administrador com um nome de utilizador e uma palavra-passe especificados pelos parâmetros --admin-user e --admin-password.
    • Crie uma base de dados cujo nome seja especificado com o --database-name parâmetro.
  4. 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 o seu endereço IP para substituir <your IP> no comando. Por exemplo, pode-se usar o site What's My IP Address?.

  5. Crie uma base de dados nomeada 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;'
    

Implemente o código no Azure App Service

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

  1. No terminal, certifica-te de que estás na pasta do repositório serviceconnector-webapp-postgresql-django-passwordless que contém o código da aplicação.

  2. Execute o seguinte az webapp up comando para criar o alojamento do App Service para a aplicação:

    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 de Serviço de Aplicativo. O plano de serviço B1 (Basic) implica um pequeno custo na sua subscrição 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 demorar alguns minutos, usando o grupo de recursos e a localização armazenados em cache do comando anterior az group create (o grupo $RESOURCE_GROUP_NAME na eastus região neste exemplo).

    • Crie um plano de Serviço de Aplicação no escalão de preços Básico (B1). Podes omitir --sku usar valores padrão.
    • Crie o aplicativo do Serviço de Aplicações.
    • 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.
  3. Configurar o App Service 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 implementado no App Service, o próximo passo é ligar a aplicação à base de dados Postgres no Azure. O código da aplicação espera encontrar informação de base de dados numa variável de ambiente chamada AZURE_POSTGRESQL_CONNECTIONSTRING para PostgreSQL flexible server e numa variável de ambiente chamada AZURE_STORAGEBLOB_RESOURCEENDPOINT para Azure Storage conta.

Os comandos Service Connector configuram os recursos do Azure Storage e do Azure Database for PostgreSQL para utilizarem identidade gerida e controlo de acesso baseado em papéis no 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 tomadas pelo conector de serviço para habilitar a funcionalidade 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.

No seu código Python, acede a estas definiçõ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

  1. Use o comando az webapp connection create storage-blob para criar uma conta de armazenamento e um conector de serviço que fará as seguintes configurações:
  • Habilita a identidade gerenciada atribuída ao sistema no aplicativo Web

  • Adiciona a aplicação 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))
    
  1. Atualize a conta de armazenamento para permitir o acesso público do blob aos utilizadores da aplicação do restaurante para aceder às imagens.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  2. Crie um contentor 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
    

Teste a aplicação web em Python no Azure

A aplicação de Python de exemplo usa o encapsulamento azure.identity e a sua classe DefaultAzureCredential. Quando a aplicação está a correr em Azure, DefaultAzureCredential deteta automaticamente se existe uma identidade gerida para o Serviço de Aplicações e, em caso afirmativo, usa-a para aceder a outros recursos 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.

  1. Navegue até a aplicação implementada no 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.

  2. Teste a funcionalidade do aplicativo de exemplo adicionando um restaurante e algumas avaliações com fotos do restaurante. A informação sobre restaurantes e avaliações está armazenada no Azure Database for PostgreSQL e as fotografias estão armazenadas no Azure Storage. Aqui está um exemplo de captura de tela:

     Captura de ecrã da aplicação de exemplo que mostra funcionalidades de avaliações de restaurantes usando Azure App Service, Azure base de dados PostgreSQL e Azure Storage.

Limpar recursos

Se quiseres manter a aplicação ou continuar com mais tutoriais, salta 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 volte imediatamente.

Tem problemas? Deixe-nos saber.

Próximo passo