Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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_HOSTNAMEvariável de ambiente está definida. Azure App Service define automaticamente esta variável para a URL da aplicação 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 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
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_PWdeve 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.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 $LOCATIONCrie o servidor de banco de dados. Se for solicitado para ativar o acesso ao endereço IP atual do cliente, escreva
ysim. 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 EnabledSe o comando
aznã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
--nameparâmetro. O nome tem de ser único em toda a Azure. - Com o SKU especificado com o parâmetro
--sku-name.
- Com o nome do servidor especificado com o
- Crie uma conta de administrador com um nome de utilizador e uma palavra-passe especificados pelos parâmetros
--admin-usere--admin-password. - Crie uma base de dados cujo nome seja especificado com o
--database-nameparâ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_ADDRESSUse 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?.Crie uma base de dados nomeada
restaurantusando 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
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.
Execute o seguinte
az webapp upcomando 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 B1A 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_NAMEnaeastusregião neste exemplo).- Crie um plano de Serviço de Aplicação no escalão de preços Básico (B1). Podes omitir
--skuusar 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.
- Crie um plano de Serviço de Aplicação no escalão de preços Básico (B1). Podes omitir
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
- 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))
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-accessCrie um contentor chamado
photosna 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.
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.
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:
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.