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.
Neste tutorial, aprende a implementar uma aplicação web Python orientada por dados para o Serviço de Aplicações do Azure e usar o Service Service para a ligar a outros serviços Azure. A aplicação web de exemplo armazena informações de restaurantes e avaliações numa base de dados Base de Dados do Azure para PostgreSQL e armazena fotografias num contentor Armazenamento do Azure.
Utiliza o CLI do Azure para completar as seguintes tarefas:
- Crie uma aplicação web Python Django e implemente-a no Serviço de Aplicações do Azure.
- Crie um servidor e base de dados Base de Dados do Azure para PostgreSQL flexíveis.
- Cria uma conta Armazenamento do Azure e um contentor.
- Ligue a aplicação web à base de dados e ao contentor de armazenamento usando o Service Connector com autenticação de identidade gerida .
- Interaja com a aplicação web.
Nota
Este tutorial é semelhante ao tutorial do App Service Deploy uma aplicação web Python Django com PostgreSQL no Azure, mas utiliza uma identidade gerida sem palavra-passe atribuída pelo sistema com controlo de acesso baseado em função do Azure para aceder a outros recursos do Azure. A secção Criar uma ligação de serviço sem palavra-passe deste artigo mostra como o Service Connector simplifica o processo de ligação.
A aplicação web utiliza a classe DefaultAzureCredential da biblioteca cliente Python Azure Identity para detetar automaticamente quando existe uma identidade gerida e utilizá-la para aceder aos outros recursos.
Pré-requisitos
Uma subscrição Azure com permissões de escrita e atribuição de funções para os recursos do tutorial, numa região Azure que suporta Service Connector e tenha suporte suficiente para App Service e quota.
Azure Cloud Shell para executar os passos do tutorial, ou se preferires correr localmente:
- Instale CLI do Azure 2.30.0 ou superior. Para verificar a sua versão, execute
az --version. Para atualizar, executeaz upgrade. - Inicie sessão no Azure usando
az logine seguindo as indicações.
- Instale CLI do Azure 2.30.0 ou superior. Para verificar a sua versão, execute
Configurar o ambiente
Certifique-se de que a sua subscrição está registada para usar os fornecedores de recursos
Microsoft.ServiceLinkereMicrosoft.DBforPostgreSQL. Se não, executeaz provider register -n Microsoft.[name of service]para registar os fornecedores.Instale as seguintes extensões CLI do Azure:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connect
Clonar a aplicação de exemplo
Clona o repositório da app de exemplo.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitEm alternativa, podes descarregar a aplicação a partir de https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless e descompactá-la numa pasta chamada serviceconnector-webapp-postgresql-django-passwordless.
Muda diretórios para a pasta repositório usando
cd serviceconnector-webapp-postgresql-django-passwordlesse executa todos os comandos restantes dessa pasta.
Na aplicação de exemplo, as definições de produção da aplicação web estão no ficheiro azuresite/production.py . As definições de desenvolvimento são em Azuresite/settings.py. As definições de produção configuram o Django para correr em qualquer ambiente de produção e não são específicas do App Service.
A aplicação utiliza definições de produção quando a WEBSITE_HOSTNAME variável de ambiente está definida. Para cadeias de ligação do Azure Postgres, o Azure App Service define automaticamente esta variável para o URL da aplicação web, como https://msdocs-django.azurewebsites.net.
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 em Azure.
Definir variáveis iniciais do ambiente
O código seguinte define as variáveis de ambiente necessárias para este tutorial.
-
LOCATIONdeve ser uma região do Azure onde a sua subscrição tenha quota suficiente para criar os recursos e não restringe o Azure Database para PostgreSQL para a sua subscrição. - Devem
ADMIN_PWconter entre 8 a 128 caracteres em pelo menos três das quatro categorias: letras maiúsculas, minúsculas, numerais e caracteres não alfanuméricos, excluindo$.
Configure as seguintes variáveis de ambiente, substituindo os espaços reservados
<region>e<database password>por valores válidos.LOCATION="<region>" 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="<database password>"Crie um grupo de recursos para conter todos os recursos do projeto. O nome do grupo de recursos é armazenado em cache e aplicado automaticamente aos comandos subsequentes.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Implementar o código da aplicação no App Service
Crie o host da app no App Service e implemente o código de exemplo da app nesse host. O az webapp up comando executa as seguintes ações:
- Cria um plano de Serviço de Aplicações no escalão de preços Básico (B1).
- Cria a aplicação App Service.
- Ativa o registo de logs predefinido da aplicação.
- Carrega o repositório usando implantação em ZIP com automação de compilações ativada.
- Constrói a aplicação.
No código, sku define a CPU, a memória e o custo do plano de App Service. O plano de serviço Básico (B1) implica um pequeno custo na sua subscrição do Azure. Podes omitir o --sku parâmetro para usar o SKU predefinido, normalmente P1v3 (Premium v3). Para uma lista completa de planos de App Service, consulte preços do App Service.
A partir da pasta do repositório serviceconnector-webapp-postgresql-django-passwordless , execute o seguinte
az webapp upcomando:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.10 \ --sku B1Nota
A implantação demora alguns minutos, e o comando pode travar ou expirar, especialmente num SKU Básico. Quando a aplicação for construída com sucesso e a saída mostrar
Starting the site, podes sair do comando selecionando Ctrl+C.Configure a aplicação para usar o ficheiro start.sh do repositório executando o comando az webapp config set.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Crie a base de dados Postgres no Azure
Crie a base de dados Base de Dados do Azure para PostgreSQL para armazenar informação de aplicações. O comando az postgres flexible-server create cria um servidor flexível do Azure Database para PostgreSQL no grupo de recursos especificado que possui:
- Nome do servidor especificado no
--nameparâmetro. O nome tem de ser único em toda a Azure. - SKU especificado no
--sku-nameparâmetro. - Conta de administrador, nome de utilizador e palavra-passe especificados nos parâmetros
--admin-usere--admin-password.
Crie o servidor de base de dados do Azure para PostgreSQL. Se for solicitado para ativar o acesso ao endereço IP atual do cliente, introduza
ycomo sim.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 \ --microsoft-entra-auth EnabledSe não for solicitado a permitir o acesso ao endereço IP do seu cliente atual, 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.
IP_ADDRESS=<your IP address> 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_ADDRESSSugestão
Use qualquer ferramenta ou site que mostre o seu endereço IP para substituir
<your IP address>no comando. Por exemplo, pode usar o What's My IP Address?.Crie uma base de dados nomeada
restaurantno servidor 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;'
Criar uma ligação de serviço sem palavra-passe
Use az webapp connection create postgres-flexible para adicionar um conector de serviço que liga a aplicação web Azure à base de dados Postgres usando autenticação de identidade gerida sem palavra-passe. O comando seguinte configura o Base de Dados do Azure para PostgreSQL para usar identidade gerida e controlo de acesso baseado em funções no Azure. A saída do comando lista as ações que o Service Connector realiza.
O comando cria uma variável de ambiente chamada AZURE_POSTGRESQL_CONNECTIONSTRING que fornece a informação de ligação à base de dados para a aplicação. O código da aplicação acede a variáveis do ambiente da aplicação com instruções como os.environ.get('AZURE_POSTGRESQL_HOST'). Para obter mais informações, consulte Variáveis de ambiente do Access.
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
Crie e ligue-se a uma conta de armazenamento
Use az webapp connection create storage-blob para criar uma conta de armazenamento do Azure e um conector de serviço. O comando realiza as seguintes ações:
- Ativa a identidade gerida atribuída ao sistema na aplicação web.
- Adiciona a aplicação web com a função Storage Blob Data Contributor à nova conta de armazenamento.
- Configura a rede de contas de armazenamento para aceitar acesso a partir da aplicação web.
- Cria uma variável de ambiente chamada
AZURE_STORAGEBLOB_RESOURCEENDPOINTpara a conta Armazenamento do Azure.
Execute o seguinte comando para criar a conta de armazenamento e a ligação:
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 para aceder às fotos.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessUse az storage container create para criar um container chamado
photosna conta de armazenamento e permitir o acesso público anónimo de leitura a blobs no novo container.# 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
Abra e teste a aplicação web Azure Restaurant Review. A aplicação utiliza o pacote azure.identity e a sua DefaultAzureCredential classe. Quando a aplicação está a correr em Azure, o DefaultAzureCredential deteta automaticamente quando existe uma identidade gerida para o Serviço de Aplicação e usa-a para aceder aos recursos Armazenamento do Azure e Base de Dados do Azure para PostgreSQL. A aplicação não precisa de fornecer chaves de armazenamento, certificados ou credenciais para aceder a estes recursos.
Para uma instalação CLI do Azure local, podes usar
az webapp browsepara abrir a aplicação no teu navegador predefinido:az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell não consegue abrir um navegador local, por isso não suporta o comando
az webapp browse. A partir de Cloud Shell, a forma mais fácil de abrir a aplicação web é selecionar o link Domínio Padrão no canto superior direito na página do portal Azure da app.
Pode levar um ou dois minutos para o aplicativo iniciar. Se vires uma página de aplicação padrão que não seja a aplicação de exemplo, aguarda um minuto e atualiza o navegador.
Testa a funcionalidade da aplicação de exemplo adicionando um restaurante e algumas avaliações com fotos. A aplicação deve assemelhar-se à seguinte captura de ecrã:
Limpar recursos
Para evitar cobranças contínuas, pode eliminar os recursos que criou para este tutorial eliminando o grupo de recursos que os contém. Certifica-te de que já não precisas da aplicação nem dos recursos antes de executares o comando.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Excluir todos os recursos pode levar algum tempo. O --no-wait argumento permite que o comando volte imediatamente.
Troubleshooting
Se tiveres dificuldades a correr este tutorial, consulta os seguintes recursos: