Partilhar via


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, 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 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

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

  2. 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
    
  3. 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.
    • 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.
  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 seu endereço IP para substituir <your IP> no comando. Por exemplo, você pode usar o site Qual é meu endereço IP?

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

  1. No terminal, verifique se você está na pasta serviceconnector-webapp-postgresql-django-passwordless repository 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
    

    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 na eastus 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.
  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 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.

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

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

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

  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 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:

    Captura de ecrã da aplicação de exemplo que mostra a funcionalidade de revisão de restaurantes utilizando o Serviço de Aplicações do Azure, a Base de Dados PostgreSQL do Azure e o Armazenamento do Azure.

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.

Próximo passo