Быстрое начало. Развертывание веб-приложения Python (Django или Flask) в Службе приложений Azure

В этом кратком руководстве вы развернете веб-приложение Python (Django или Flask) в Службе приложений Azure. Служба приложений Azure — это полностью управляемая служба веб-размещения, которая поддерживает приложения Python 3.7 и более поздних версий, размещенных в среде сервера Linux.

Для работы с этим кратким руководством вам понадобится:

  1. Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.
  2. Python 3.9 или более поздней версии, установленные локально.

Примечание. В этой статье содержатся текущие инструкции по развертыванию веб-приложения Python с помощью Службы приложений Azure. Python в Windows больше не поддерживается.

1. Пример приложения

Инструкции из этого краткого руководства можно выполнить с помощью Flask или Django. Чтобы помочь в работе с этим кратким руководством, предоставляется пример приложения для каждой платформы. Скачайте или клонируйте пример приложения на локальную рабочую станцию.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

Для локального запуска приложения:

  1. Перейдите в папку приложения:

    cd msdocs-python-flask-webapp-quickstart
    
  2. Создайте виртуальную среду для приложения:

    py -m venv .venv
    .venv\scripts\activate
    
  3. Установка зависимостей:

    pip install -r requirements.txt
    
  4. Запустите приложение:

    flask run
    
  5. В веб-браузере перейдите к примеру приложения по адресу http://localhost:5000.

    Снимок экрана: приложение Flask, выполняющееся локально в браузере

Возникли проблемы? Сообщите нам об этом.

2. Создание веб-приложение в Azure

Чтобы разместить приложение в Azure, необходимо создать веб-приложение Службы приложений Azure в Azure. Вы можете создать веб-приложение с помощью портал Azure, VS Code, пакета расширений средств Azure или Azure CLI.

Команды Azure CLI моно выполнять на компьютере с установленным Azure CLI.

В Azure CLI есть команда az webapp up, которая создаст необходимые ресурсы и развернет приложение за одно действие.

При необходимости войдите в Azure с помощью команды az login.

az login

Создайте веб-приложение и другие ресурсы, а затем разверните код в Azure с помощью az webapp up.

az webapp up --runtime PYTHON:3.9 --sku B1 --logs
  • Параметр --runtime указывает, какая версия Python работает в вашем приложении. В этом примере используется Python 3.9. Чтобы получить список всех доступных сред выполнения, используйте команду az webapp list-runtimes --os linux --output table.
  • Параметр --sku определяет размер (ЦП, память) и стоимость плана службы приложений. В этом примере используется план обслуживания B1 (Базовый), который повлечет за собой небольшую стоимость в подписке Azure. Полный список планов службы приложений см. на странице цен на Службу приложений.
  • Флаг --logs настраивает ведение журнала по умолчанию, необходимое для включения просмотра потока журнала сразу после запуска веб-приложения.
  • При необходимости можно указать имя с аргументом --name <app-name>. Если вы не указали его, имя будет автоматически создано.
  • При необходимости вы можете использовать аргумент --location <location-name>, где <location_name> является доступным регионом Azure. Список допустимых регионов для учетной записи Azure можно получить, выполнив команду az account list-locations.

Выполнение этой команды может занять несколько минут. По мере выполнения команды будут отображаться сообщения о создании группы ресурсов, плане службы приложений и ресурсе приложения, настройке ведения журнала и последующем выполнении развертывания ZIP-файла. Затем оно выдает сообщение You can launch the app at http://<app-name>.azurewebsites.net (Вы можете запустить приложение по адресу http://.azurewebsites.net). Это URL-адрес приложения в Azure.

The webapp '<app-name>' doesn't exist
Creating Resource group '<group-name>' ...
Resource group creation complete
Creating AppServicePlan '<app-service-plan-name>' ...
Creating webapp '<app-name>' ...
Configuring default logging for the app, if not already enabled
Creating zip with contents of dir /home/cephas/myExpressApp ...
Getting scm site credentials for zip deployment
Starting zip deployment. This operation can take a while to complete ...
Deployment endpoint responded with status code 202
You can launch the app at http://<app-name>.azurewebsites.net
{
  "URL": "http://<app-name>.azurewebsites.net",
  "appserviceplan": "<app-service-plan-name>",
  "location": "centralus",
  "name": "<app-name>",
  "os": "<os-type>",
  "resourcegroup": "<group-name>",
  "runtime_version": "python|3.9",
  "runtime_version_detected": "0.0",
  "sku": "FREE",
  "src_path": "<your-folder-location>"
}

Примечание

Команда az webapp up выполняет следующие действия:

Возникли проблемы? Сообщите нам об этом.

3. Развертывание кода приложения в Azure

Служба приложений Azure поддерживает несколько методов развертывания кода приложения в Azure, в том числе GitHub Actions и все основные инструменты CI/CD. В этой статье рассматривается развертывание кода с локальной рабочей станции в Azure.

Так как на предыдущем шаге были созданы необходимые ресурсы и сразу развернуто приложение, вы можете перейти к шагу 4 "Переход к приложению".


Возникли проблемы? Сначала изучите руководство по устранению неполадок. Если проблему решить не удается, свяжитесь с нами.

4. Переход в приложение

Найдите развернутое приложение в веб-браузере по URL-адресу http://<app-name>.azurewebsites.net. Если видите страницу приложения по умолчанию, подождите минуту и обновите браузер.

Пример кода Python запускает контейнер Linux в Службе приложений с помощью встроенного образа.

Снимок экрана: приложение, выполняющееся в Azure

Поздравляем! Вы развернули свое приложение Python в Cлужбе приложений.

Возникли проблемы? Сначала изучите руководство по устранению неполадок. Если проблему решить не удается, свяжитесь с нами.

5. Потоковая передача журналов

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

@app.route('/')
def index():
   print('Request for index page received')
   return render_template('index.html')

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static'),
                               'favicon.ico', mimetype='image/vnd.microsoft.icon')

@app.route('/hello', methods=['POST'])
def hello():
   name = request.form.get('name')

   if name:
       print('Request for hello page received with name=%s' % name)

Содержимое журналов диагностики Службы приложений можно просмотреть на портале Azure, в VS Code или с помощью Azure CLI.

Сначала необходимо настроить Службу приложений Azure для вывода журналов в файловую систему Службы приложений с помощью команды az webapp log config.

az webapp log config \
    --web-server-logging filesystem \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

Чтобы выполнить потоковую передачу журналов, используйте команду az webapp log tail.

az webapp log tail \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

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

Starting Live Log Stream ---

2021-12-23T02:15:52.740703322Z Request for index page received
2021-12-23T02:15:52.740740222Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET / HTTP/1.1" 200 1360 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.884541951Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:53.043211176Z 169.254.130.1 - - [23/Dec/2021:02:15:53 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

2021-12-23T02:16:01.304306845Z Request for hello page received with name=David
2021-12-23T02:16:01.304335945Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "POST /hello HTTP/1.1" 200 695 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.430740060Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

Возникли проблемы? Сначала изучите руководство по устранению неполадок. Если проблему решить не удается, свяжитесь с нами.

Очистка ресурсов

Завершив работу с примером приложения, можно удалить все ресурсы для приложения в Azure. Это не приведет к дополнительным расходам и сохранит порядок в подписке Azure. Удаление группы ресурсов также повлечет удаление всех ресурсов в группе ресурсов, что является самым быстрым способом удаления всех ресурсов Azure для приложения.

Удалите группу ресурсов с помощью команды az group delete.

az group delete \
    --name msdocs-python-webapp-quickstart \
    --no-wait

Аргумент --no-wait позволяет команде возвращать сведения до завершения операции.

Возникли проблемы? Сообщите нам об этом.

Дальнейшие действия