Поделиться через


Разверните веб-приложение на Python (Flask) с PostgreSQL в Azure

В этом руководстве вы развернёте основанное на данных веб-приложение на Python (Flask) в службе Azure App Service с использованием сервиса реляционной базы данных Azure Database for PostgreSQL. Azure App Service поддерживает Python в серверной среде Linux. Если хотите, обратитесь к руководству по Django или руководству по FastAPI.

Диаграмма архитектуры, показывающая сервис приложений и базу данных PostgreSQL в Azure.

В этом учебнике вы узнаете, как:

  • Создайте архитектуру изначально безопасной службы приложений, PostgreSQL и кеша Redis.
  • Обеспечьте безопасность секретов подключения, используя управляемую идентификацию и ссылки на Key Vault.
  • Разверните образец Python-приложения в службе приложений из репозитория GitHub.
  • Access App Service connection strings and app settings in the application code.
  • Внесите обновления и заново разверните код приложения.
  • Генерируйте схему базы данных, запуская миграции базы данных.
  • Транслируйте диагностические журналы из Azure.
  • Управляйте приложением в Azure-портале.
  • Подготовьте ту же архитектуру и разверните её с помощью Azure Developer CLI.
  • Оптимизируйте ваш процесс разработки с помощью GitHub Codespaces и GitHub Copilot.

Prerequisites

  • Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, вы можете создать её бесплатно.
  • Azure Developer CLI установлен. Вы можете выполнить эти шаги в Azure Cloud Shell, так как инструмент Azure Developer CLI уже установлен.
  • Knowledge of Python with Flask development.
  • (Дополнительно) Чтобы попробовать GitHub Copilot, требуется аккаунт GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.

Skip to the end

Если вы хотите просто увидеть, как образец приложения из этого урока работает в Azure, выполните следующие команды в Azure Cloud Shell и следуйте указаниям.

mkdir msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app
azd init --template msdocs-flask-postgresql-sample-app
azd up

1. Запустите пример

Сначала вы создаете пример приложения, основанного на данных, как отправную точку. Для вашего удобства в репозитории-примере включена конфигурация контейнера для разработки. Dev-контейнер содержит всё необходимое для разработки приложения, включая базу данных, кэш и все переменные окружения, необходимые для примера приложения. Контейнер для разработки может работать в GitHub Codespace, что означает, что вы можете запускать образец на любом компьютере с веб-браузером.

Примечание

Если вы следите за этим учебником со своим собственным приложением, посмотрите описание файла requirements.txt в README.md, чтобы узнать, какие пакеты вам понадобятся.

Шаг 1: В новом окне браузера:

  1. Войдите в свой аккаунт GitHub.
  2. Перейти к https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app/fork.
  3. Снимите выбор Скопировать только основную ветку. Вы хотите все ветки.
  4. Select Create fork.

Шаг 2: В форке GitHub:

  1. Выберите main>starter-no-infra для стартовой ветки. Этот ветвь содержит только пример проекта и без файлов или конфигурации, связанных с Azure.
  2. Select Code>Create codespace on starter-no-infra. Кодовое пространство настраивается в течение нескольких минут, и в конце оно запускает pip install -r requirements.txt для вашего репозитория.

Step 3: В терминале codespace:

  1. Выполните миграции базы данных с flask db upgrade.
  2. Запустите приложение с flask run.
  3. Когда вы увидите уведомление Your application running on port 5000 is available., выберите Открыть в браузере. Вы должны увидеть пример приложения в новой вкладке браузера. Чтобы остановить приложение, введите Ctrl+C.

Tip

Вы можете спросить GitHub Copilot об этом репозитории. For example:

  • @workspace Что делает этот проект?
  • @workspace Что делает папка .devcontainer?

Есть проблемы? Проверьте раздел Устранение неполадок.

2. Создайте службу приложений и PostgreSQL

На этом этапе вы создаёте ресурсы Azure. Шаги, использованные в этом руководстве, создают набор защищённых по умолчанию ресурсов, включая App Service и базу данных Azure для PostgreSQL. Для процесса создания вы указываете:

  • Название для веб-приложения. Это используется как часть DNS-имени вашего приложения в форме https://<app-name>-<hash>.<region>.azurewebsites.net.
  • Регион, в котором приложение будет физически работать в мире. Он также используется как часть DNS-имени вашего приложения.
  • Runtime stack для приложения. Здесь вы выбираете версию Python для использования в вашем приложении.
  • Тарифный план хостинга для приложения. Это уровень цен, который включает набор функций и возможности масштабирования для вашего приложения.
  • Группа ресурсов для приложения. Группа ресурсов позволяет вам сгруппировать (в логический контейнер) все ресурсы Azure, необходимые для приложения.

Войдите в портал Azure и выполните следующие шаги, чтобы создать ваши ресурсы службы приложений Azure.

Шаг 1: В портале Azure:

  1. Введите "web app database" в строку поиска в верхней части портала Azure.
  2. Выберите элемент с меткой Web App + Database под заголовком Marketplace. Вы также можете перейти непосредственно к мастеру создания.

Шаг 2: На странице Создание веб-приложения и базы данных заполните форму следующим образом.

  1. Группа ресурсов: Выберите Создать новый и используйте имя msdocs-flask-postgres-tutorial.
  2. Регион: Любой регион Azure рядом с вами.
  3. Name: msdocs-python-postgres-XYZ.
  4. Runtime stack: Python 3.12.
  5. Database: PostgreSQL - Flexible Server выбран по умолчанию в качестве движка базы данных. Имя сервера и имя базы данных также устанавливаются по умолчанию на соответствующие значения.
  6. Add Azure Cache for Redis?: No.
  7. Hosting plan: Basic. Когда будете готовы, вы можете перейти на производственный уровень цен.
  8. Select Review + create.
  9. После завершения проверки выберите Create.

Шаг 3: Развертывание займет несколько минут. После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы сразу попадаете в приложение App Service, но при этом создаются следующие ресурсы:

  • Resource group: контейнер для всех созданных ресурсов.
  • App Service план: Определяет вычислительные ресурсы для App Service. План Linux в категории Basic создан.
  • App Service: Represents your app and runs in the App Service plan.
  • Виртуальная сеть: Интегрирована с приложением службы приложений и изолирует сетевой трафик на заднем плане.
  • Сетевые интерфейсы: Представляют частные IP-адреса, по одному для каждой из частных конечных точек.
  • Azure Database for PostgreSQL flexible server: Accessible only from within the virtual network. На сервере создаются база данных и пользователь для вас.
  • Частные зоны DNS: Обеспечивает разрешение DNS для хранилища ключей и сервера базы данных в виртуальной сети.

3. Безопасное подключение секретов

Мастер создания уже сгенерировал переменные подключения для вас в качестве настроек приложения. Тем не менее, лучшей практикой безопасности является полностью исключить хранящиеся секреты из App Service. Вы переместите свои секреты в хранилище ключей и измените настройки своего приложения на ссылки на Key Vault с помощью Service Connectors.

Шаг 1: Получите существующую строку подключения

  1. In the left menu of the App Service page, select Settings > Environment variables.
  2. Выберите AZURE_POSTGRESQL_CONNECTIONSTRING.
  3. В разделе Добавить/Редактировать настройку приложения, в поле Значение, найдите часть password= в конце строки.
  4. Скопируйте строку пароля после Password= для дальнейшего использования. Этот параметр приложения позволяет подключаться к базе данных Postgres, защищенной за частной конечной точкой. Однако секрет сохраняется непосредственно в приложении службы приложений, что не является лучшим вариантом. Вы измените это.

Шаг 2: Создайте хранилище ключей для безопасного управления секретами

  1. В верхней строке поиска введите "key vault", затем выберите Marketplace>Key Vault.
  2. In Resource Group, select msdocs-python-postgres-tutorial.
  3. В Имя хранилища ключей введите имя, которое состоит только из букв и цифр.
  4. В разделе Регион установите ту же локацию, что и для группы ресурсов.

Шаг 3: Защитите хранилище ключей с помощью частной конечной точки

  1. Select the Networking tab.
  2. Снимите отметку с Включить общий доступ.
  3. Выберите Создать частную конечную точку.
  4. In Resource Group, select msdocs-python-postgres-tutorial.
  5. В диалоговом окне, в Расположение, выберите то же местоположение, что и для вашего приложения App Service.
  6. В поле Name введите msdocs-python-postgres-XYZVaultEndpoint.
  7. In Virtual network, select msdocs-python-postgres-XYZVnet.
  8. In Subnet, msdocs-python-postgres-XYZSubnet.
  9. Select OK.
  10. Выберите Обзор и создание, затем выберите Создать. Дождитесь завершения развертывания хранилища ключей. Вы должны увидеть "Ваше развертывание завершено."

Step 4: Configure the PostgreSQL connector

  1. В верхней строке поиска введите msdocs-python-postgres, затем выберите ресурс App Service, который называется msdocs-python-postgres-XYZ.
  2. На странице App Service в левом меню выберите Настройки > Service Connector. Уже есть разъём, который мастер создания приложения создал для вас.
  3. Выберите флажок рядом с коннектором PostgreSQL, затем выберите Edit.
  4. In Client type, select Django. Несмотря на то, что у вас есть приложение Flask, тип клиента Django в соединителе службы PostgreSQL предоставляет вам переменные базы данных в отдельных настройках вместо одной строки соединения. Отдельные переменные легче использовать в вашем коде приложения, который использует SQLAlchemy для подключения к базе данных.
  5. Select the Authentication tab.
  6. В поле Password вставьте пароль, который вы скопировали ранее.
  7. Выберите Хранить секрет в Key Vault.
  8. Под Подключение к хранилищу ключей выберите Создать новое. Диалоговое окно «Создание соединения» открыто поверх окна редактирования.

Шаг 5: Установите подключение к Key Vault

  1. В диалоговом окне Создать соединение для подключения к Хранилищу ключей, в Хранилище ключей выберите хранилище ключей, которое вы создали ранее.
  2. Select Review + Create.
  3. Когда проверка завершится, выберите Создать.

Шаг 6: Завершение настройки соединителя PostgreSQL

  1. Вы вернулись в диалоговое окно редактирования для defaultConnector. Вкладке Аутентификация, подождите, пока создастся коннектор хранилища ключей. Когда это будет завершено, выпадающий список Key Vault Connection автоматически выберет его.
  2. Выберите Next: Networking.
  3. Select Save. Дождитесь появления уведомления Обновление успешно.

Step 7: Verify the Key Vault integration

  1. В левом меню выберите пункт Настройки > Переменные окружения снова.
  2. Рядом с AZURE_POSTGRESQL_PASSWORD выберите Показать значение. Значение должно быть @Microsoft.KeyVault(...), что означает, что это ссылка на хранилище ключей, потому что теперь секрет управляется в хранилище ключей.

Вкратце, процесс защиты ваших секретов подключения включал:

  • Извлечение секретов подключения из переменных окружения приложения App Service.
  • Создание хранилища ключей.
  • Создание подключения к хранилищу ключей с использованием управляемой идентичности, назначенной системой.
  • Обновление подключений сервиса для хранения секретов в хранилище ключей.

Возникают проблемы? Проверьте раздел Устранение неполадок.


4. Развернуть пример кода

На этом шаге вы настроите развертывание GitHub с помощью GitHub Actions. Это всего лишь один из многих способов развертывания на App Service, но также отличный способ обеспечить непрерывную интеграцию в вашем процессе развертывания. По умолчанию каждый git push из репозитория GitHub запускает действие сборки и развертывания.

Step 1: In the left menu, select Deployment>Deployment Center.

Шаг 2: На странице Центра развертывания:

  1. In Source, select GitHub. По умолчанию в качестве поставщика сборки выбран GitHub Actions.
  2. Войдите в свой аккаунт GitHub и следуйте указаниям, чтобы авторизовать Azure.
  3. In Organization, select your account.
  4. In Repository, select msdocs-flask-postgresql-sample-app.
  5. В Branch выберите starter-no-infra. Это та же ветка, в которой вы работали с вашим примером приложения, без файлов или конфигураций, связанных с Azure.
  6. Для типа аутентификации выберите назначенная пользователем личность.
  7. В верхнем меню выберите Сохранить. Служба приложений помещает файл рабочего процесса в выбранный репозиторий GitHub, в каталог .github/workflows. По умолчанию центр развертывания создаёт пользовательскую назначенную идентичность для рабочего процесса, чтобы аутентифицироваться с помощью Microsoft Entra (аутентификация OIDC). Для альтернативных опций аутентификации см. Развертывание в App Service с использованием GitHub Actions.

Шаг 3: Вернитесь в GitHub codespace вашей образцовой форк-версии и выполните git pull origin starter-no-infra. Это перемещает новый зафиксированный файл рабочего процесса в ваше пространство кода.

Шаг 4 (Вариант 1: с GitHub Copilot):

  1. Начните новый сеанс чата, выбрав представление "Чат", затем выберите +.
  2. Спросите: "@workspace Как приложение подключается к базе данных?" Copilot может дать вам некоторые объяснения о том, как настраивается URI подключения в azureproject/development.py и azureproject/production.py.
  3. Спросите, "@workspace В режиме производства моё приложение работает в веб-приложении App Service, которое использует Azure Service Connector для подключения к гибкому серверу PostgreSQL с помощью клиента Django. Какие названия переменных окружения мне нужно использовать?" Copilot может предложить вам код, похожий на тот, что в шагах Option 2: без GitHub Copilot ниже, и даже сообщить о необходимости внести изменения в файл azureproject/production.py.
  4. Откройте azureproject/production.py в проводнике и добавьте предложение кода. GitHub Copilot не дает одинаковый ответ каждый раз и не всегда правильный. Вам, возможно, потребуется задать больше вопросов, чтобы уточнить его ответ. Для советов см. Что я могу сделать с GitHub Copilot в моем рабочем пространстве?.

Step 4 (Option 2: without GitHub Copilot):

  1. Откройте Program.cs в проводнике.
  2. Найдите закомментированный код (строки 3–8) и раскомментируйте его. Это создает строку подключения для SQLAlchemy с использованием AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST и AZURE_POSTGRESQL_NAME.

Step 5:

  1. Выберите расширение Управление исходным кодом.
  2. В текстовом поле введите сообщение о фиксации, похожее на Configure Azure database connecton. Или выберите и позвольте GitHub Copilot сгенерировать для вас сообщение коммита.
  3. Выберите Применить, затем подтвердите, нажав Да.
  4. Выберите Синхронизировать изменения 1, затем подтвердите, нажав ОК.

Шаг 6: Вернитесь на страницу Центра развертывания в портале Azure.

  1. Выберите вкладку Журналы, затем выберите Обновить, чтобы увидеть новый запуск развертывания.
  2. In the log item for the deployment run, select the Build/Deploy Logs entry with the latest timestamp.

Шаг 7: Вы переходите в свой репозиторий GitHub и видите, что GitHub-операция выполняется. Файл рабочего процесса определяет два отдельных этапа: сборка и развертывание. Дождитесь, пока запуск GitHub покажет статус Success. Это занимает около 5 минут.

Есть проблемы? Проверьте руководство по устранению неисправностей.

5. Генерация схемы базы данных

С базой данных PostgreSQL, защищенной виртуальной сетью, самый простой способ выполнить миграции базы данных Flask — это сессия SSH с контейнером Linux в службе App Service.

Шаг 1: Вернитесь на страницу службы приложений, в левом меню,

  1. Выберите Средства разработки>SSH.
  2. Select Go.

Шаг 2: В сеансе SSH выполните flask db upgrade. Если это удается, служба приложений успешно подключается к базе данных.

Tip

В SSH-сессии только изменения в файлах в /home могут сохраняться после перезапуска приложения. Изменения вне /home не сохраняются.

Есть проблемы? Проверьте раздел Устранение неполадок.

6. Перейдите к приложению

Step 1: На странице службы приложений:

  1. В левом меню выберите Обзор.
  2. Выберите URL-адрес вашего приложения.

Шаг 2: Добавьте несколько ресторанов в список. Congratulations, you're running a web app in Azure App Service, with secure connectivity to Azure Database for PostgreSQL.

7. Транслируйте диагностические журналы

Служба Azure App Service фиксирует все журналы консоли, чтобы помочь вам диагностировать проблемы с вашим приложением. Примерное приложение включает операторы print(), чтобы продемонстрировать эту возможность, как показано ниже.

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

Шаг 1: На странице службы приложений:

  1. From the left menu, select Monitoring>App Service logs.
  2. Under Application logging, select File System.
  3. В верхнем меню выберите Сохранить.

Шаг 2: В левом меню выберите поток журналов. Вы видите журналы для вашего приложения, включая журналы платформы и журналы из контейнера.

Узнайте больше о ведении журналов в приложениях Python в серии статей по настройке Azure Monitor для вашего приложения на Python.

8. Очистите ресурсы

Когда вы закончите, вы можете удалить все ресурсы из вашей подписки Azure, удалив группу ресурсов.

Шаг 1: В строке поиска в верхней части портала Azure:

  1. Enter the resource group name.
  2. Выберите группу ресурсов.

Шаг 2: На странице группы ресурсов выберите Удалить группу ресурсов.

Step 3:

  1. Введите имя группы ресурсов, чтобы подтвердить удаление.
  2. Select Delete.

2. Create Azure resources and deploy a sample app

На этом этапе вы создаете ресурсы Azure и размещаете образец приложения в службе приложений на Linux. Шаги, использованные в этом руководстве, создают набор ресурсов с принципиально безопасными настройками по умолчанию, включая App Service и базу данных Azure для PostgreSQL.

Контейнер разработчика уже содержит Azure Developer CLI (AZD).

  1. From the repository root, run azd init.

    azd init --template python-app-service-postgresql-infra
    
  2. When prompted, give the following answers:

    Вопрос Answer
    Текущая директория не пуста. Хотите инициализировать проект здесь, в '<your-directory>'? Y
    Что вы хотите сделать с этими файлами? Оставить мои существующие файлы без изменений
    Введите новое имя окружения Введите уникальное имя. Шаблон AZD использует это имя как часть имени DNS вашего веб-приложения в Azure (<app-name>-<hash>.azurewebsites.net). Допустимы буквенно-цифровые символы и дефисы.
  3. Войдите в Azure, выполнив команду azd auth login и следуя инструкциям:

    azd auth login
    
  4. Создайте необходимые ресурсы Azure с помощью команды azd provision. Выполните указания, чтобы выбрать нужную подписку и местоположение для ресурсов Azure.

    azd provision
    

    Команде azd provision требуется около 15 минут для завершения (больше всего времени занимает кэш Redis). Позже вы измените ваш код, чтобы он работал с App Service, и примените изменения с помощью azd deploy. Когда команда выполняется, она предоставляет сообщения о процессе подготовки и развертывания, включая ссылку на развертывание в Azure.

    Этот шаблон AZD содержит файлы (azure.yaml и директорию infra), которые создают архитектуру с базовой безопасностью по умолчанию, используя следующие ресурсы Azure:

    • Resource group: Контейнер для всех созданных ресурсов.
    • App Service plan: Определяет вычислительные ресурсы для службы приложений. Создан план Linux на базовом уровне.
    • App Service: Представляет ваше приложение и работает в плане службы приложений.
    • Виртуальная сеть: интегрирована с приложением App Service и изолирует трафик сети заднего плана.
    • Частные конечные точки: Точки доступа для хранилища ключей и кеша Redis в виртуальной сети.
    • Сетевые интерфейсы: представляют собой частные IP-адреса, по одному для каждого из частных конечных точек.
    • Azure Database for PostgreSQL flexible server: Доступен только изнутри виртуальной сети. На сервере для вас создаются база данных и пользователь.
    • Частная зона DNS: Обеспечивает разрешение имен DNS сервера PostgreSQL в виртуальной сети.
    • Рабочее пространство Log Analytics: выступает как целевой контейнер для вашей приложения, чтобы передавать журналы, где вы также можете выполнять запросы к журналам.
    • Azure Cache для Redis: Доступен только через его закрытую конечную точку.
    • Key vault: Доступен только из-за своего частного конечного пункта. Используется для управления секретами в приложении App Service.

    После того как команда завершит создание ресурсов и впервые развернет код приложения, развернутое образец приложение еще не работает, так как необходимо внести небольшие изменения, чтобы подключиться к базе данных в Azure.

Возникли проблемы? Проверьте раздел Устранение неполадок.

3. Use the database connection string

Шаблон AZD, который вы используете, уже создал для вас переменные подключения как настройки приложения и выводит их в терминал для вашего удобства. Настройки приложения — это один из способов уберечь секреты подключения от попадания в ваш репозиторий кода.

  1. Во выводе AZD найдите настройки AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST и AZURE_POSTGRESQL_NAME. Чтобы сохранить секреты в безопасности, отображаются только названия настроек. Они выглядят так на выходе 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
     
  2. Для вашего удобства шаблон AZD показывает вам прямую ссылку на страницу настроек приложения. Найдите ссылку и откройте ее в новой вкладке браузера.

Есть проблемы? Проверьте раздел устранения неполадок.

4. Измените образец кода и перезапустите.

  1. В GitHub codespace начните новый сеанс чата, выбрав вид Chat, затем выбрав +.

  2. Спросите, "@workspace Как приложение подключается к базе данных?" Copilot может дать вам некоторое объяснение касательно SQLAlchemy того, как настроен его URI подключения в azureproject/development.py и azureproject/production.py.

  3. Спросите: "@workspace В режиме производства мое приложение работает в веб-приложении App Service, которое использует Azure Service Connector для подключения к гибкому серверу PostgreSQL, используя тип клиента Django. Какие названия переменных окружения мне нужно использовать?" Copilot может предложить вам код, похожий на тот, что в Опция 2: без GitHub Copilot, и даже подсказать необходимость внести изменения в файл azureproject/production.py.

  4. Откройте azureproject/production.py в проводнике и добавьте предложение кода.

    GitHub Copilot не всегда даёт один и тот же ответ, и он не всегда бывает правильным. Возможно, вам потребуется задать больше вопросов, чтобы уточнить его ответ. Для получения советов см. Что я могу делать с GitHub Copilot в моем кодовом пространстве?.

  5. В терминале выполните azd deploy.

    azd deploy
    

Есть проблемы? Посмотрите раздел по устранению неполадок.

5. Создать схему базы данных

При защите базы данных PostgreSQL виртуальной сетью самый простой способ выполнить миграции базы данных Flask — это через SSH сеанс с Linux контейнером в App Service.

  1. В выводе AZD найдите URL для SSH-сессии и перейдите к нему в браузере. Это выглядит так на выходе:

     Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
     
  2. В SSH-сессии выполните команду flask db upgrade. Если это удается, App Service успешно подключается к базе данных.

    Снимок экрана, показывающий команды для запуска в SSH-оболочке и их вывод.

    Примечание

    Только изменения файлов в /home могут сохраняться после перезапуска приложения. Изменения вне /home не сохраняются.

Есть проблемы? Проверьте раздел Устранение неполадок.

6. Перейдите в приложение

  1. В выводе AZD найдите URL вашего приложения и откройте его в браузере. URL выглядит следующим образом в выводе AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>.azurewebsites.net/
     
  2. Добавьте несколько ресторанов в список.

    Скриншот Flask веб-приложения с PostgreSQL, работающим в Azure, показывающий рестораны и отзывы о них.

    Поздравляем, вы запускаете веб-приложение в Azure App Service с безопасным подключением к базе данных Azure для PostgreSQL.

Есть проблемы? Проверьте раздел Устранение неисправностей.

7. Stream diagnostic logs

Служба приложений Azure может записывать журналы консоли, чтобы помочь вам в диагностике проблем с вашим приложением. Для удобства шаблон AZD уже включает ведение журналов в локальную файловую систему и отправляет журналы в рабочее пространство Log Analytics.

Образец приложения включает операторы print(), чтобы продемонстрировать эту возможность, как показано в следующем фрагменте.

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

В выводе AZD найдите ссылку для потоковой передачи журналов службы приложений и перейдите по ней в браузере. Ссылка выглядит так в выводе AZD:

Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

Узнайте больше о логировании в приложениях Python в серии «Настройка Azure Monitor для вашего Python-приложения».

Есть проблемы? Проверьте раздел Устранение неисправностей.

8. Очистить ресурсы

To delete all Azure resources in the current deployment environment, run azd down and follow the prompts.

azd down

Устранение неполадок

Ниже перечислены проблемы, с которыми вы можете столкнуться при работе с этим учебным пособием, и шаги по их решению.

Я не могу подключиться к SSH-сессии.

Если вы не можете подключиться к сеансу SSH, значит, само приложение не удалось запустить. Проверьте диагностические логи для получения подробностей. For example, if you see an error like KeyError: 'AZURE_POSTGRESQL_HOST', it might mean that the environment variable is missing (you might have removed the app setting).

У меня возникает ошибка при запуске миграций базы данных.

Если вы столкнётесь с ошибками, связанными с подключением к базе данных, проверьте, были ли изменены или удалены настройки приложения (AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST, и AZURE_POSTGRESQL_NAME). Без этой строки подключения команда миграции не может взаимодействовать с базой данных.

Часто задаваемые вопросы

Сколько стоит этот набор?

Цены на созданные ресурсы следующие:

  • План App Service создается на уровне Basic и может быть масштабирован вверх или вниз. См. цены на App Service.
  • Гибкий сервер PostgreSQL создан на самом низком уровне нагрузки Standard_B1ms с минимальным объемом хранилища, который можно увеличить или уменьшить. Просмотрите цены на базу данных Azure для PostgreSQL.
  • Виртуальная сеть не требует оплаты, если вы не настроите дополнительные функции, такие как пиринг. See Azure Virtual Network pricing.
  • Частная зона DNS предполагает небольшую плату. See Azure DNS pricing.

Как мне подключиться к серверу PostgreSQL, который защищён за виртуальной сетью, с помощью других инструментов?

  • Для базового доступа из командной строки вы можете запустить psql из SSH-сеанса приложения.
  • Чтобы подключиться с помощью настольного инструмента, ваш компьютер должен находиться в виртуальной сети. Например, это может быть виртуальная машина Azure, подключенная к одной из подсетей, или машина в локальной сети, которая имеет соединение site-to-site VPN с виртуальной сетью Azure.
  • Вы также можете интегрировать Azure Cloud Shell с виртуальной сетью.

Как местная разработка приложений работает с GitHub Actions?

Используя сгенерированный автоматически файл рабочего процесса из App Service в качестве примера, каждый git push запускает новый процесс сборки и развёртывания. Из локального клона репозитория GitHub вы делаете необходимые обновления и отправляете их на GitHub. For example:

git add .
git commit -m "<some-message>"
git push origin main

Как отлаживать ошибки во время развертывания с помощью GitHub Actions?

Если какой-либо шаг завершится ошибкой в автоматически сгенерированном файле рабочего процесса GitHub, попробуйте изменить неудачную команду, чтобы получить более подробный вывод. Например, вы можете получить больше данных от команды python, добавив опцию -d. Закоммитьте и отправьте свои изменения, чтобы инициировать очередное развертывание на App Service.

У меня нет разрешений для создания идентификатора, назначенного пользователем.

См. Настройка развертывания GitHub Actions из Центра развертывания.

Что я могу сделать с GitHub Copilot в своем рабочем пространстве?

Возможно, вы заметили, что вид чата GitHub Copilot уже был доступен для вас, когда вы создавали пространство разработки. Для вашего удобства мы включаем расширение GitHub Copilot для чата в определение контейнера (см. .devcontainer/devcontainer.json). Однако вам понадобится аккаунт GitHub Copilot (доступна бесплатная пробная версия на 30 дней).

Несколько советов для вас, когда вы разговариваете с GitHub Copilot:

  • В одном сеансе чата вопросы и ответы основаны друг на друге, и вы можете корректировать свои вопросы, чтобы уточнить ответ, который вы получаете.
  • По умолчанию GitHub Copilot не имеет доступа к каким-либо файлам в вашем репозитории. Чтобы задать вопросы о файле, сначала откройте его в редакторе.
  • Чтобы GitHub Copilot имел доступ ко всем файлам в репозитории при подготовке своих ответов, начните свой вопрос с @workspace. Для получения дополнительной информации, см. Use the @workspace agent.
  • В чате GitHub Copilot может предложить изменения и даже указать, где их следует внести (с помощью @workspace), но ему не разрешается делать изменения за вас. Решать вам, добавлять ли предлагаемые изменения и тестировать их.

Следующие шаги

Перейдите к следующему учебнику, чтобы узнать, как защитить ваше приложение с помощью пользовательского домена и сертификата.

Узнайте, как служба приложений запускает приложение Python.