evento
Crie aplicativos e agentes de IA
17/03, 21 - 21/03, 10
Junte-se à série meetup para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registe-se agoraEste browser já não é suportado.
Atualize para o Microsoft Edge para tirar partido das mais recentes funcionalidades, atualizações de segurança e de suporte técnico.
Neste tutorial, você implantará um aplicativo Web Python orientado por dados (Django) no Serviço de Aplicativo do Azure com o serviço de banco de dados relacional do Banco de Dados do Azure para PostgreSQL. O Serviço de Aplicativo do Azure dá suporte ao Python em um ambiente de servidor Linux. Se desejar, consulte o tutorial do Flask ou o tutorial da FastAPI.
Neste tutorial, irá aprender a:
Se você quiser apenas ver o aplicativo de exemplo neste tutorial em execução no Azure, basta executar os seguintes comandos no Azure Cloud Shell e seguir o prompt:
mkdir msdocs-django-postgresql-sample-app
cd msdocs-django-postgresql-sample-app
azd init --template msdocs-django-postgresql-sample-app
azd up
Primeiro, você configura um aplicativo controlado por dados de exemplo como ponto de partida. Para sua conveniência, o repositório de exemplo inclui uma configuração de contêiner de desenvolvimento. O contêiner de desenvolvimento tem tudo o que você precisa para desenvolver um aplicativo, incluindo o banco de dados, o cache e todas as variáveis de ambiente necessárias para o aplicativo de exemplo. O contêiner de desenvolvimento pode ser executado em um espaço de código GitHub, o que significa que você pode executar o exemplo em qualquer computador com um navegador da Web.
Nota
Se você estiver acompanhando este tutorial com seu próprio aplicativo, veja a descrição do arquivo requirements.txt em README.md para ver quais pacotes você precisará.
Passo 1: Em uma nova janela do navegador:
Passo 2: Na bifurcação do GitHub:
pip install -r requirements.txt
para o repositório no final. Além disso, o arquivo .env fornecido já contém uma variável fictíciaSECRET_KEY
que o Django precisa executar localmente.Passo 3: No terminal codespace:
python manage.py migrate
o .python manage.py runserver
o .Your application running on port 8000 is available.
, selecione Abrir no navegador.
Você deve ver o aplicativo de exemplo em uma nova guia do navegador. Para parar o aplicativo, digite Ctrl
+C
.Sugestão
Você pode perguntar ao GitHub Copilot sobre este repositório. Por exemplo:
Tem problemas? Verifique a seção Solução de problemas.
Nesta etapa, você cria os recursos do Azure. As etapas usadas neste tutorial criam um conjunto de recursos seguros por padrão que incluem o Serviço de Aplicativo, o Banco de Dados do Azure para PostgreSQL e o Cache do Azure. Para o processo de criação, você especifica:
https://<app-name>-<hash>.<region>.azurewebsites.net
.Entre no portal do Azure e siga estas etapas para criar seus recursos do Serviço de Aplicativo do Azure.
Etapa 1: No portal do Azure:
Etapa 2: Na página Criar Aplicativo Web + Banco de Dados , preencha o formulário da seguinte maneira.
Etapa 3: A implantação leva alguns minutos para ser concluída. Quando a implantação for concluída, selecione o botão Ir para o recurso . Você é levado diretamente para o aplicativo do Serviço de Aplicativo, mas os seguintes recursos são criados:
O assistente de criação gerou as variáveis de conectividade para você já como configurações do aplicativo. No entanto, a prática recomendada de segurança é manter os segredos completamente fora do Serviço de Aplicativo. Você moverá seus segredos para um cofre de chaves e alterará a configuração do aplicativo para referências do Cofre de Chaves com a ajuda dos Conectores de Serviço.
Etapa 1: Recuperar a cadeia de conexão existente
SECRET_KEY
configuração, que é exigida pelo seu aplicativo Django.Etapa 2: Criar um cofre de chaves para gerenciamento seguro de segredos
Etapa 3: Proteger o cofre de chaves com um ponto de extremidade privado
Etapa 4: Configurar o conector PostgreSQL
Etapa 5: Estabelecer a conexão do Cofre da Chave
Etapa 6: Finalizar as configurações do conector PostgreSQL
Etapa 7: Configurar o conector Redis para usar segredos do Cofre da Chave
Etapa 8: Verificar a integração do Key Vault
@Microsoft.KeyVault(...)
, o que significa que é uma referência do cofre de chaves porque o segredo agora é gerenciado no cofre de chaves.Etapa 9: O aplicativo de exemplo lê a variável de ambiente SECRET_KEY para definir a configuração de SECRET_KEY necessária. Você o cria como uma configuração de aplicativo nesta etapa.
Para resumir, o processo para proteger seus segredos de conexão envolveu:
Nota
Idealmente, a configuração do SECRET_KEY
aplicativo também deve ser configurada como uma referência do cofre de chaves, que é um processo de várias etapas. Para obter mais informações, consulte Como alterar a configuração do aplicativo SECRET_KEY para uma referência do Cofre da Chave?
Tem problemas? Verifique a seção Solução de problemas.
Nesta etapa, você configura a implantação do GitHub usando as Ações do GitHub. É apenas uma das muitas maneiras de implantar no Serviço de Aplicativo, mas também uma ótima maneira de ter integração contínua em seu processo de implantação. Por padrão, cada git push
um no repositório do GitHub inicia a ação de compilação e implantação.
Etapa 1: no menu à esquerda, selecione Deployment>Deployment Center.
Etapa 2: Na página Centro de Implantação:
.github/workflows
diretório.
Por padrão, o centro de implantação cria uma identidade atribuída pelo usuário para que o fluxo de trabalho seja autenticado usando o Microsoft Entra (autenticação OIDC). Para obter opções de autenticação alternativas, consulte Implantar no Serviço de Aplicativo usando ações do GitHub.
Passo 3: De volta ao espaço de código do GitHub da sua bifurcação de exemplo, execute git pull origin starter-no-infra
.
Isso extrai o arquivo de fluxo de trabalho recém-confirmado para seu espaço de código.
Passo 4 (Opção 1: com o GitHub Copilot):
Passo 4 (Opção 2: sem o Copilot do GitHub):
AZURE_POSTGRESQL_USER
, AZURE_POSTGRESQL_PASSWORD
, AZURE_POSTGRESQL_HOST
, AZURE_POSTGRESQL_NAME
e AZURE_REDIS_CONNECTIONSTRING
.Passo 5:
Configure Azure database and cache connectons
. Ou selecione Etapa 6: De volta à página Centro de Implantação no portal do Azure:
Etapa 7: Você é levado ao repositório do GitHub e vê que a ação do GitHub está em execução. O arquivo de fluxo de trabalho define dois estágios separados, build e deploy. Aguarde até que a execução do GitHub mostre um status de Sucesso. Demora cerca de 5 minutos.
Tem problemas? Consulte o Guia de resolução de problemas.
Com o banco de dados PostgreSQL protegido pela rede virtual, a maneira mais fácil de executar migrações de banco de dados Django é em uma sessão SSH com o contêiner Linux no Serviço de Aplicativo.
Etapa 1: De volta à página do Serviço de Aplicativo, no menu à esquerda,
Passo 2: Na sessão SSH, execute python manage.py migrate
. Se for bem-sucedido, o Serviço de Aplicativo está se conectando com êxito ao banco de dados.
Sugestão
Na sessão SSH, apenas as alterações nos arquivos podem /home
persistir além das reinicializações do aplicativo. As mudanças fora do /home
não são persistentes. A sessão SSH é útil para executar comandos comuns python manage.py
, como a criação de usuários com o python manage.py createsuperuser
. Para obter mais informações, consulte a documentação para django django-admin e manage.py. Use a conta de superusuário para acessar a /admin
parte do site.
Tem problemas? Verifique a seção Solução de problemas.
Etapa 1: Na página Serviço de Aplicativo:
Passo 2: Adicione alguns restaurantes à lista. Parabéns, você está executando um aplicativo Web no Serviço de Aplicativo do Azure, com conectividade segura ao Banco de Dados do Azure para PostgreSQL.
O Serviço de Aplicativo do Azure captura todos os logs do console para ajudá-lo a diagnosticar problemas com seu aplicativo. O aplicativo de exemplo inclui print()
instruções para demonstrar esse recurso, conforme mostrado abaixo.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
Etapa 1: Na página Serviço de Aplicativo:
Passo 2: No menu à esquerda, selecione Log stream. Você vê os logs do seu aplicativo, incluindo logs da plataforma e logs de dentro do contêiner.
Saiba mais sobre como iniciar sessão em aplicações Python na série sobre como configurar o Azure Monitor para a sua aplicação Python.
Quando terminar, pode eliminar todos os recursos da sua subscrição do Azure eliminando o grupo de recursos.
Etapa 1: Na barra de pesquisa na parte superior do portal do Azure:
Etapa 2: na página do grupo de recursos, selecione Excluir grupo de recursos.
Passo 3:
Nesta etapa, você cria os recursos do Azure e implanta um aplicativo de exemplo no Serviço de Aplicativo no Linux. As etapas usadas neste tutorial criam um conjunto de recursos seguros por padrão que incluem o Serviço de Aplicativo, o Banco de Dados do Azure para PostgreSQL e o Cache do Azure para Redis.
O contêiner de desenvolvimento já tem a CLI do Desenvolvedor do Azure (AZD).
A partir da raiz do repositório, execute azd init
.
azd init --template python-app-service-postgresql-infra
Quando solicitado, dê as seguintes respostas:
Pergunta | Resposta |
---|---|
O diretório atual não está vazio. Gostaria de inicializar um projeto aqui no '<seu-diretório>'? | Y |
O que você gostaria de fazer com esses arquivos? | Manter os meus ficheiros existentes inalterados |
Insira um novo nome de ambiente | Escreva um nome exclusivo. O modelo AZD usa esse nome como parte do nome DNS do seu aplicativo Web no Azure (<app-name>-<hash>.azurewebsites.net ). São permitidos caracteres alfanuméricos e hífenes. |
Entre no Azure executando o azd auth login
comando e seguindo o prompt:
azd auth login
Crie os recursos necessários do Azure com o azd provision
comando. Siga o prompt para selecionar a assinatura desejada e o local para os recursos do Azure.
azd provision
O azd provision
comando leva cerca de 15 minutos para ser concluído (o cache Redis leva mais tempo). Mais tarde, você modificará seu código para trabalhar com o Serviço de Aplicativo e implantar as alterações com azd deploy
o . Enquanto está em execução, o comando fornece mensagens sobre o processo de provisionamento e implantação, incluindo um link para a implantação no Azure.
Este modelo AZD contém arquivos (azure.yaml e o diretório infra ) que geram uma arquitetura segura por padrão com os seguintes recursos do Azure:
Quando o comando terminar de criar recursos e implantar o código do aplicativo pela primeira vez, o aplicativo de exemplo implantado ainda não funcionará porque você deve fazer pequenas alterações para que ele se conecte ao banco de dados no Azure.
Tem problemas? Verifique a seção Solução de problemas.
O modelo AZD que você usa gerou as variáveis de conectividade para você já como configurações do aplicativo e as envia para o terminal para sua conveniência. As configurações do aplicativo são uma maneira de manter os segredos de conexão fora do seu repositório de código.
Na saída AZD, localize as configurações AZURE_POSTGRESQL_USER
, AZURE_POSTGRESQL_PASSWORD
, AZURE_POSTGRESQL_HOST
, AZURE_POSTGRESQL_NAME
, e AZURE_REDIS_CONNECTIONSTRING
. Para manter os segredos seguros, apenas os nomes das configurações são exibidos. Eles se parecem com isso na saída AZD:
App Service app has the following connection settings: - AZURE_POSTGRESQL_NAME - AZURE_POSTGRESQL_HOST - AZURE_POSTGRESQL_USER - AZURE_POSTGRESQL_PASSWORD - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
Para sua conveniência, o modelo AZD mostra o link direto para a página de configurações do aplicativo. Encontre o link e abra-o em uma nova guia do navegador.
Tem problemas? Verifique a seção Solução de problemas.
No espaço de código do GitHub, inicie uma nova sessão de chat selecionando a visualização Chat e, em seguida, selecionando +.
Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados?" O Copilot pode fornecer algumas explicações sobre como as configurações de conexão são configuradas no azureproject/development.py e azureproject/production.py.
Pergunte: "@workspace No modo de produção, meu aplicativo está sendo executado em um aplicativo Web do Serviço de Aplicativo, que usa o Azure Service Connector para se conectar a um servidor flexível PostgreSQL usando o tipo de cliente Django. Quais são os nomes das variáveis de ambiente que preciso usar?" O Copilot pode lhe dar uma sugestão de código semelhante à da Opção 2: sem as etapas do Copilot do GitHub abaixo e até mesmo dizer para você fazer a alteração no arquivo azureproject/production.py.
Abra azureproject/production.py no explorador e adicione a sugestão de código.
O GitHub Copilot não lhe dá a mesma resposta todas as vezes, e nem sempre é correto. Talvez seja necessário fazer mais perguntas para ajustar a resposta. Para obter dicas, consulte O que posso fazer com o GitHub Copilot no meu codespace?.
No terminal, execute azd deploy
.
azd deploy
Tem problemas? Verifique a seção Solução de problemas.
Com o banco de dados PostgreSQL protegido pela rede virtual, a maneira mais fácil de executar migrações de banco de dados Django é em uma sessão SSH com o contêiner Linux no Serviço de Aplicativo.
Na saída AZD, localize o URL da sessão SSH e navegue até ele no navegador. Tem esta aparência na saída:
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
Na sessão SSH, execute python manage.py migrate
. Se for bem-sucedido, o Serviço de Aplicativo está se conectando com êxito ao banco de dados.
Nota
Somente as alterações nos /home
arquivos podem persistir além das reinicializações do aplicativo. As mudanças fora do /home
não são persistentes.
Tem problemas? Verifique a seção Solução de problemas.
Na saída AZD, localize a URL do seu aplicativo e navegue até ela no navegador. O URL tem esta aparência na saída AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
Adicione alguns restaurantes à lista.
Parabéns, você está executando um aplicativo Web no Serviço de Aplicativo do Azure, com conectividade segura ao Banco de Dados do Azure para PostgreSQL.
Tem problemas? Verifique a seção Solução de problemas.
O Serviço de Aplicativo do Azure pode capturar logs do console para ajudá-lo a diagnosticar problemas com seu aplicativo. Por conveniência, o modelo AZD já permite o registro em log no sistema de arquivos local e está enviando os logs para um espaço de trabalho do Log Analytics.
O aplicativo de exemplo inclui print()
instruções para demonstrar essa capacidade, conforme mostrado no trecho a seguir.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
Na saída AZD, localize o link para transmitir logs do Serviço de Aplicativo e navegue até ele no navegador. O link tem esta aparência na saída AZD:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Saiba mais sobre como iniciar sessão em aplicações Python na série sobre como configurar o Azure Monitor para a sua aplicação Python.
Tem problemas? Verifique a seção Solução de problemas.
Para excluir todos os recursos do Azure no ambiente de implantação atual, execute azd down
e siga os prompts.
azd down
Abaixo estão listados os problemas que você pode encontrar ao tentar trabalhar neste tutorial e as etapas para resolvê-los.
Se você não conseguir se conectar à sessão SSH, o próprio aplicativo falhou ao iniciar. Verifique os logs de diagnóstico para obter detalhes. Por exemplo, se você vir um erro como KeyError: 'AZURE_POSTGRESQL_HOST'
, isso pode significar que a variável de ambiente está ausente (você pode ter removido a configuração do aplicativo).
Se você encontrar algum erro relacionado à conexão com o banco de dados, verifique se as configurações do aplicativo (AZURE_POSTGRESQL_USER
, AZURE_POSTGRESQL_PASSWORD
, AZURE_POSTGRESQL_HOST
e AZURE_POSTGRESQL_NAME
) foram alteradas ou excluídas. Sem essa cadeia de conexão, o comando migrate não pode se comunicar com o banco de dados.
O preço dos recursos criados é o seguinte:
psql
a partir da sessão SSH do aplicativo.Usando o arquivo de fluxo de trabalho gerado automaticamente do Serviço de Aplicativo como exemplo, cada git push
um inicia uma nova compilação e execução de implantação. A partir de um clone local do repositório GitHub, você faz as atualizações desejadas e envia por push para o GitHub. Por exemplo:
git add .
git commit -m "<some-message>"
git push origin main
O aplicativo de exemplo Django define as configurações no arquivo azureproject/production.py para que ele possa ser executado no Serviço de Aplicativo do Azure. Essas alterações são comuns à implantação do Django na produção e não específicas do Serviço de Aplicativo.
O Django valida o cabeçalho HTTP_HOST em solicitações recebidas. O código de exemplo usa a WEBSITE_HOSTNAME
variável de ambiente no Serviço de Aplicativo para adicionar o nome de domínio do aplicativo à configuração de ALLOWED_HOSTS do Django.
# Configure the domain name using the environment variable
# that Azure automatically creates for us.
ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
O Django não suporta o serviço de arquivos estáticos em produção. Para este tutorial, você usa WhiteNoise para habilitar o serviço dos arquivos. O pacote WhiteNoise já foi instalado com o requirements.txt e seu middleware foi adicionado à lista.
# WhiteNoise configuration
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
# Add whitenoise middleware after the security middleware
'whitenoise.middleware.WhiteNoiseMiddleware',
Em seguida, as configurações do arquivo estático são configuradas de acordo com a documentação do Django.
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Para obter mais informações, consulte Configurações de produção para aplicativos Django.
Nas etapas do portal acima, você pode alterar SECRET_KEY
para uma referência do Cofre da Chave executando os seguintes comandos da CLI do Azure no shell da nuvem:
# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=djangoSecretKey
# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID
# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
--assignee $(az ad signed-in-user show --query id -o tsv) \
--role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
--scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
# Add the secret to the key vault
az keyvault secret set \
--vault-name $KEY_VAULT_NAME \
--name $SECRET_NAME \
--value $(python -c 'import secrets; print(secrets.token_hex())')
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "SECRET_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Você também pode fazer a mesma coisa no portal. Para obter mais informações, consulte:
Se uma etapa falhar no arquivo de fluxo de trabalho GitHub gerado automaticamente, tente modificar o comando failed para gerar uma saída mais detalhada. Por exemplo, você pode obter mais saída do python
comando adicionando a -d
opção. Confirme e envie suas alterações por push para disparar outra implantação no Serviço de Aplicativo.
Consulte Configurar a implantação de ações do GitHub a partir do Centro de Implantação.
Você deve ter notado que a visualização de bate-papo do GitHub Copilot já estava lá para você quando você criou o espaço de código. Para sua conveniência, incluímos a extensão de chat do GitHub Copilot na definição de contêiner (consulte .devcontainer/devcontainer.json). No entanto, você precisa de uma conta GitHub Copilot (teste gratuito de 30 dias disponível).
Algumas dicas para você quando falar com o GitHub Copilot:
@workspace
. Para obter mais informações, veja Use the @workspace agent.@workspace
) até mesmo onde fazer as alterações, mas não é permitido fazer as alterações para você. Cabe a você adicionar as alterações sugeridas e testá-las.Avance para o próximo tutorial para saber como proteger seu aplicativo com um domínio e certificado personalizados.
Saiba como o Serviço de Aplicativo executa um aplicativo Python:
evento
Crie aplicativos e agentes de IA
17/03, 21 - 21/03, 10
Junte-se à série meetup para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registe-se agoraFormação
Módulo
Implantar um aplicativo Quarkus em Aplicativos de Contêiner do Azure - Training
Crie um aplicativo Quarkus, conecte-o a um banco de dados PostgreSQL e implante-o nos Aplicativos de Contêiner do Azure.
Certificação
Certificado pela Microsoft: Azure Developer Associate - Certifications
Crie soluções completas no Microsoft Azure para criar o Azure Functions, implementar e gerenciar aplicativos Web, desenvolver soluções utilizando o armazenamento do Azure e muito mais.