Краткое руководство. Развертывание веб-приложения Python (Django, Flask или FastAPI) в службе приложение Azure
Статья
Примечание.
Начиная с 1 июня 2024 г. все созданные Служба приложений приложения будут иметь возможность создать уникальное имя узла по умолчанию с помощью соглашения <app-name>-<random-hash>.<region>.azurewebsites.netоб именовании. Существующие имена приложений останутся неизменными.
В этом кратком руководстве вы развернете веб-приложение Python (Django, Flask или FastAPI) в службе приложение Azure. служба приложение Azure — это полностью управляемая служба размещения веб-сайтов, которая поддерживает приложения Python, размещенные в среде сервера Linux.
Для работы с этим кратким руководством вам понадобится:
В этой статье содержатся текущие инструкции по развертыванию веб-приложения Python с помощью службы приложение Azure. Python в Windows больше не поддерживается.
Пример приложения
Это краткое руководство можно выполнить с помощью Flask, Django или FastAPI. Чтобы помочь в работе с этим кратким руководством, предоставляется пример приложения для каждой платформы. Скачайте или клонируйте пример приложения на локальную рабочую станцию.
Чтобы разместить приложение в Azure, необходимо создать веб-приложение службы приложение Azure в Azure. Вы можете создать веб-приложение с помощью Azure CLI, VS Code, пакета расширений средств Azure или портал Azure.
В 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 appservice 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 выполняет следующие действия:
Локальное кэширование параметров в файле .azure/config, позволяющее не указывать их снова при последующем развертывании с помощью az webapp up или других команд az webapp из папки проекта. По умолчанию кэшированные значения используются автоматически.
На левой панели инструментов найдите значок Azure. Выберите его, чтобы открыть расширение инструментов Azure для VS Code.
Если вы не видите значок инструментов Azure, убедитесь, что у вас установлено расширение инструментов Azure для VS Code.
В расширении средств Azure для VS Code:
Найдите раздел RESOURCES и выберите свою подписку.
Щелкните + (Создать ресурс...).
Выберите Создать веб-приложение службы приложений.
Введите имя msdocs-python-webapp-quickstart-XYZ для этого веб-приложения, где XYZ — любые три уникальные символа.
При развертывании это имя используется в качестве имени приложения в форме https://<app-name>.azurewebsites.net.
Выберите стек среды выполнения для приложения. В этом примере выберите Python 3.9.
Выберите план службы приложений (ценовая категория) для этого веб-приложения. План службы приложений определяет, сколько ресурсов (ЦП и памяти) доступно для вашего приложения, а также стоимость этих ресурсов.
В этом примере выберите ценовую категорию Базовый (B1). Этот план повлечет за собой небольшую плату за подписку Azure, но он рекомендуется для повышения производительности по сравнению с планом "Бесплатный" (F1).
Нажмите кнопку Развернуть в уведомлении "Создано новое веб-приложение".
Выберите папку быстрого запуска, в которой вы работаете, в качестве папки для развертывания.
Ответьте Да, чтобы обновить конфигурацию сборки и повысить производительность развертывания.
После завершения развертывания в правом нижнем углу VS Code появится уведомление. Это уведомление можно использовать для перехода к веб-приложению.
Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.
Instructions
Снимок экрана
В портал Azure:
Введите службы приложений в строку поиска в верхней части портала Azure.
Выберите элемент, помеченный Служба приложений под заголовком "Службы" в меню, которое отображается под строкой поиска.
На странице Служба приложений нажмите кнопку +Создать, а затем в раскрывающемся меню выберите +Web App.
На странице Создание веб-приложения заполните форму следующим образом.
Группа ресурсов → выберите Создать новый и используйте имя msdocs-python-webapp-quickstart.
Имя → msdocs-python-webapp-quickstart-XYZ, где XYZ — это любой из трех случайных символов. Это имя должно быть уникальным в Azure.
Стек среды выполнения → Python 3.9.
Регион → любой ближайший к вам регион Azure.
Служба приложений План → в рамках ценового плана выберите "Обзор планов ценообразования", чтобы выбрать другой план Служба приложений.
План Служба приложений управляет объемом ресурсов (ЦП или памяти), доступных вашему приложению и затратам на эти ресурсы.
В этом примере в разделе "Разработка и тестирование" выберите план Basic B1 . План "Базовый" B1 будет взиматься небольшая плата за учетную запись Azure, но рекомендуется повысить производительность по сравнению с планом "Бесплатный F1".
По завершении нажмите кнопку " Выбрать ", чтобы применить изменения.
На странице Создание веб-приложения выберите в нижней части экрана Просмотр и создание.
Откроется страница Просмотр. Нажмите Создать, чтобы создать вашу Службу приложений.
служба приложение Azure поддерживает несколько методов развертывания кода приложения в Azure, включая GitHub Actions и все основные средства CI/CD. В этой статье рассматривается развертывание кода с локальной рабочей станции в Azure.
az webapp up Так как команда создала необходимые ресурсы и развернула приложение на одном шаге, вы можете перейти к следующему шагу.
Так как предыдущий шаг создал необходимые ресурсы и развернул приложение на одном шаге, вы можете перейти к следующему шагу.
Вы можете развернуть код приложения из локального репозитория Git в Azure, настроив удаленный Git в локальном репозитории, который указывает на репозиторий, в который требуется отправить код. URL-адрес удаленного репозитория и учетные данные Git, необходимые для настройки, можно получить с помощью портала Azure или Azure CLI.
Перейдите в Службу приложений для своего приложения.
В поле поиска в верхней части экрана введите имя вашей Службы приложений.
В разделе Ресурсы выберите Службу приложений для перехода к ней.
На странице Служба приложений:
В меню с левой стороны экрана выберите пункт Центр развертывания.
В раскрывающемся списке Источник выберите Локальный Git.
Выберите Сохранить.
После сохранения страницы он обновится и отобразит адрес удаленного репозитория Git.
Скопируйте значение URI Git Clone, так как это значение будет использоваться позднее для настройки удаленного репозитория Git.
На странице Центра развертывания:
Перейдите на вкладку Учетные данные FTPS/локального Git.
Найдите локальное имя пользователя и пароль Git в учетных данных области приложения.
Не закрывайте этот экран, чтобы вы могли сразу же скопировать эти учетные данные при развертывании кода в удаленный репозиторий. Обязательно скопируйте локальное имя пользователя Git, которое начинается с $примера $msdocs-python-webapp-quickstart-123.
При первой отправке кода в удаленный репозиторий Git эти учетные данные понадобятся для проверки подлинности в удаленном репозитории.
Затем в корневом каталоге приложения настройте удаленный Git, который указывает на Azure, используя URL-адрес Git удаленного Azure, полученный на предыдущем этапе.
git remote add azure <git-deployment-url>
Теперь вы можете отправить код из локального репозитория Git в Azure, используя только что настроенный удаленный Git. Ветвь развертывания по умолчанию для Служба приложений имеет значениеmaster, но многие репозитории Git удаляются и master используютсяmain. Можно указать сопоставление из имени локальной ветви с именем удаленной ветви в push-запросе (как показано ниже) или настроить DEPLOYMENT_BRANCH параметр приложения.
git push azure main:master
При первом отправке кода в Azure Git предложит вам учетные данные развертывания Azure, полученные на предыдущем шаге. Затем Git кэширует эти учетные данные, поэтому их не придется повторно помещать в последующие развертывания.
Сначала настройте источник развернутой службы для веб-приложения, чтобы он был локальным Git, используя команду az webapp deployment source. Эта команда выводит URL-адрес удаленного репозитория Git, в который будет отправляться код. Создайте копию этого значения, так как вам потребуется на следующем шаге.
# Change these values to the ones used to create the App Service.
RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp deployment source config-local-git \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--output tsv
# Change these values to the ones used to create the App Service.
$RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
$APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp deployment source config-local-git `
--name $APP_SERVICE_NAME `
--resource-group $RESOURCE_GROUP_NAME `
--output tsv
Получите учетные данные развертывания для приложения. Git потребуется выполнить проверку подлинности в Azure при отправке кода в Azure на следующем шаге.
Затем в корневом каталоге приложения настройте удаленный Git, который указывает на Azure, используя URL-адрес Git удаленного Azure, полученный на предыдущем этапе.
git remote add azure <git-deployment-url>
Теперь вы можете отправить код из локального репозитория Git в Azure, используя только что настроенный удаленный Git. Ветвь развертывания по умолчанию для Служба приложений имеет значениеmaster, но многие репозитории Git удаляются и master используютсяmain. Можно указать сопоставление из имени локальной ветви с именем удаленной ветви в push-запросе (как показано ниже) или настроить DEPLOYMENT_BRANCH параметр приложения.
git push azure main:master
При первой отправке кода в Azure Git выводит запрос на ввод учетных данных развертывания Azure, полученных на предыдущем этапе. Затем Git будет кэшировать эти учетные данные, поэтому вам не придется повторно вводить их при последующих развертываниях.
Приложения можно развертывать в Azure, создавая и передавая ZIP-файл кода приложения в Azure. ZIP-файлы можно передать в Azure с помощью Azure CLI или HTTP-клиента, такого как cURL.
Включение автоматизации сборки
При развертывании ZIP-файла кода Python необходимо установить флаг, чтобы включить автоматизацию сборки Azure. При автоматизации сборки будет установлено все необходимое согласно требованиям и создан пакет приложения для запуска в Azure.
Автоматизация сборки в Azure включается путем настройки параметра приложения SCM_DO_BUILD_DURING_DEPLOYMENT на портале Azure или в Azure CLI.
# Change these values to the ones used to create the App Service.
RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
# Change these values to the ones used to create the App Service.
$resourceGroupName='msdocs-python-webapp-quickstart'
$appServiceName='msdocs-python-webapp-quickstart-123'
az webapp config appsettings set `
--resource-group $resourceGroupName `
--name $appServiceName `
--settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
Создание ZIP-файла приложения
Затем создайте ZIP-файл приложения. Необходимо включить только компоненты самого приложения. Не нужно включать файлы или каталоги, которые начинаются с точки (.), например .venv, .gitignore, .github или .vscode.
# Change these values to the ones used to create the App Service.
RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp deploy \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--src-path <zip-file-path>
# Change these values to the ones used to create the App Service.
$resourceGroupName='msdocs-python-webapp-quickstart'
$appServiceName='msdocs-python-webapp-quickstart-123'
az webapp deploy `
--name $appServiceName `
--resource-group $resourceGroupName `
--src-path <zip-file-path>
Чтобы использовать cURL для передачи ZIP-файла в Azure, вам потребуется имя пользователя и пароль развертывания для Службы приложений. Эти учетные данные можно получить на портале Azure.
На странице веб-приложения в меню с левой стороны страницы выберите Центр развертывания.
Перейдите на вкладку Учетные данные FTPS.
Имя пользователя и пароль отображаются в разделе Область приложения. Для развертывания ZIP-файла используйте только часть имени пользователя после символа \, которая начинается с $, например, $msdocs-python-webapp-quickstart-123. Эти учетные данные потребуются для команды cURL.
Выполните команду curl, чтобы передать ZIP-файл в Azure и развернуть приложение. Имя пользователя — это имя пользователя для развертывания, полученное на этапе 3. При выполнении этой команды будет предложено ввести пароль развертывания.
Для PowerShell обязательно заключите имя пользователя в одинарные кавычки, чтобы PowerShell не пытался интерпретировать имя пользователя как переменную PowerShell.
На основе наличия определенных файлов в развертывании Служба приложений автоматически определяет, является ли приложение Django или Flask приложением и выполняет действия по умолчанию для запуска приложения. Для приложений на основе других веб-платформ, таких как FastAPI, необходимо настроить скрипт запуска для Служба приложений для запуска приложения; в противном случае Служба приложений запустить приложение только для чтения по умолчанию, расположенное в папке opt/defaultsite.
Служба приложений автоматически обнаруживает наличие приложения Flask. Для этого краткого руководства не требуется дополнительная конфигурация.
Служба приложений автоматически обнаруживает наличие приложения Django. Для этого краткого руководства не требуется дополнительная конфигурация.
Для FastAPI необходимо настроить настраиваемую команду запуска для Служба приложений для запуска приложения. Следующая команда запускает Gunicorn с 2 рабочими процессами Uvicorn: gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app
az webapp restart \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
Служба приложений автоматически обнаруживает наличие приложения Flask. Для этого краткого руководства не требуется дополнительная конфигурация.
Служба приложений автоматически обнаруживает наличие приложения Django. Для этого краткого руководства не требуется дополнительная конфигурация.
Используйте Azure CLI или портал Azure для настройки команды запуска.
Служба приложений автоматически обнаруживает наличие приложения Flask. Для этого краткого руководства не требуется дополнительная конфигурация.
Служба приложений автоматически обнаруживает наличие приложения Django. Для этого краткого руководства не требуется дополнительная конфигурация.
Для FastAPI необходимо настроить настраиваемую команду запуска для Служба приложений для запуска приложения. Следующая команда запускает Gunicorn с 2 рабочими процессами Uvicorn: gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app
Instructions
Снимок экрана
Сначала настройте команду запуска в службе приложение Azure. Перейдите на страницу экземпляра Службы приложений на портале Azure.
Выберите "Конфигурация" в заголовке "Параметры " в меню слева от страницы.
Убедитесь, что выбрана вкладка "Общие параметры ".
В поле "Команда запуска" введите gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
Выберите Сохранить, чтобы сохранить изменения.
Дождитесь уведомления об обновлении параметров перед продолжением.
Затем перезапустите веб-приложение.
Выберите "Обзор " в меню слева от страницы.
В верхнем меню выберите "Перезапустить".
Переход в приложение
Перейдите в развернутое приложение в веб-браузере с помощью URL-адреса http://<app-name>.azurewebsites.net. Если видите страницу приложения по умолчанию, подождите минуту и обновите браузер.
Пример кода Python запускает контейнер Linux в Службе приложений с помощью встроенного образа.
Поздравляем! Вы развернули свое приложение Python в Cлужбе приложений.
приложение 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)
return render_template('hello.html', name = name)
else:
print('Request for hello page received with no name or blank name -- redirecting')
return redirect(url_for('index'))
def index(request):
print('Request for index page received')
return render(request, 'hello_azure/index.html')
@csrf_exempt
def hello(request):
if request.method == 'POST':
name = request.POST.get('name')
if name is None or name == '':
print("Request for hello page received with no name or blank name -- redirecting")
return redirect('index')
else:
print("Request for hello page received with name=%s" % name)
context = {'name': name }
return render(request, 'hello_azure/hello.html', context)
else:
@app.get("/", response_class=HTMLResponse)
async def index(request: Request):
print('Request for index page received')
return templates.TemplateResponse('index.html', {"request": request})
@app.get('/favicon.ico')
async def favicon():
file_name = 'favicon.ico'
file_path = './static/' + file_name
return FileResponse(path=file_path, headers={'mimetype': 'image/vnd.microsoft.icon'})
@app.post('/hello', response_class=HTMLResponse)
async def hello(request: Request, name: str = Form(...)):
if name:
print('Request for hello page received with name=%s' % name)
return templates.TemplateResponse('hello.html', {"request": request, 'name':name})
else:
print('Request for hello page received with no name or blank name -- redirecting')
return RedirectResponse(request.url_for("index"), status_code=status.HTTP_302_FOUND)
Вы можете просмотреть содержимое журналов диагностики Служба приложений с помощью Azure CLI, VS Code или портал Azure.
az webapp log tail \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
az webapp log tail `
--name $APP_SERVICE_NAME `
--resource-group $RESOURCE_GROUP_NAME
Обновите домашнюю страницу в приложении или попытайтесь выполнить другие запросы, чтобы создать какие-то сообщения журнала. Результат должен выглядеть следующим образом.
Сначала необходимо включить журналы потоковой передачи в Службе приложений Azure.
В разделе Служба приложений для расширения инструментов Azure для VS Code щелкните правой кнопкой мыши экземпляр Службы приложений и выберите в меню Start Streaming Logs (Запустить потоковую передачу журналов).
Журналы консоли отображаются в окне вывода VS Code. Обновите домашнюю страницу в приложении или попытайтесь выполнить другие запросы, чтобы создать какие-то сообщения журнала.
Вы увидите все сообщения журнала, созданные приложением, а также другие сообщения, созданные службой в выходных данных.
Instructions
Снимок экрана
Сначала необходимо включить журналы потоковой передачи в Службе приложений Azure. Перейдите на страницу экземпляра Службы приложений на портале Azure.
Выберите Служба приложений журналы под заголовком "Мониторинг" в меню слева от страницы.
Измените значение свойства Ведение журнала приложения с Выкл. на Файловая система.
Введите период хранения журналов — 30 дней.
Выберите Сохранить, чтобы сохранить изменения.
Выберите поток журнала из раздела "Мониторинг " в области навигации слева. Обновите домашнюю страницу в приложении или попытайтесь выполнить другие запросы, чтобы создать какие-то сообщения журнала.
Вы увидите все сообщения журнала, созданные приложением и сообщениями, созданными службой в выходных данных.
Завершив работу с примером приложения, можно удалить все ресурсы для приложения в Azure. Удаление группы ресурсов гарантирует, что вы не несете дополнительных расходов и помогает не загромождать подписку Azure. Удаление группы ресурсов также повлечет удаление всех ресурсов в группе ресурсов, что является самым быстрым способом удаления всех ресурсов Azure для приложения.
az group delete \
--name msdocs-python-webapp-quickstart \
--no-wait
Аргумент --no-wait позволяет команде возвращать сведения до завершения операции.
Instructions
Снимок экрана
В расширении средств Azure для VS Code:
Найдите раздел RESOURCES.
Щелкните значок Группировать по и выберите Группировать по группе ресурсов.
В списке ресурсов найдите группу ресурсов для удаления, щелкните ее правой кнопкой мыши и выберите пункт Удалить группу ресурсов. Вам будет предложено подтвердить удаление, введя имя группы ресурсов в диалоговом окне.
Чтобы удалить группу ресурсов, после входа на портал Azure выполните следующие действия.
Instructions
Снимок экрана
На портале Azure перейдите к группе ресурсов.
В поле поиска в верхней части портала введите имя группы ресурсов.
В разделе Группы ресурсов выберите имя группы ресурсов, чтобы перейти к ней.
В верхней части страницы выберите Удалить группу ресурсов.
В диалоговом окне подтверждения введите имя группы ресурсов для подтверждения удаления. Нажмите кнопку Удалить для удаления группы ресурсов.