Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы узнаете, как развернуть веб-приложение на основе данных Python Django для Служба приложений Azure и использовать соединитель служб для подключения к другим службам Azure. Пример веб-приложения хранит ресторан и просматривает сведения в базе данных База данных Azure для PostgreSQL и сохраняет фотографии в контейнере служба хранилища Azure.
Для выполнения следующих задач используется Azure CLI.
- Создайте веб-приложение Python Django и разверните его в Служба приложений Azure.
- Создайте гибкий сервер и базу данных База данных Azure для PostgreSQL.
- Создайте учетную запись и контейнер служба хранилища Azure.
- Подключите веб-приложение к базе данных и контейнеру хранения с помощью Service Connector с управляемой аутентификацией идентичности .
- Взаимодействие с веб-приложением.
Примечание.
Это руководство аналогично учебнику по службе приложений Deploy веб-приложение Python Django с PostgreSQL в Azure, но использует системное управляемое удостоверение без пароля с управлением доступом на основе ролей Azure для доступа к другим ресурсам Azure. В разделе "Создание подключения службы без пароля" этой статьи показано, как соединитель служб упрощает процесс подключения.
Веб-приложение использует класс DefaultAzureCredential клиентской библиотеки Python Azure Identity для автоматического обнаружения наличия управляемого удостоверения и доступа к другим ресурсам.
Необходимые условия
Подписка Azure с разрешениями на запись и назначение ролей для ресурсов учебника в регионе Azure, который поддерживает Service Connector и имеет достаточные квоты и поддержку службы приложений.
Azure Cloud Shell для выполнения инструкций руководства или локального выполнения:
Настройка среды
Зарегистрируйте поставщиков ресурсов
Microsoft.ServiceLinkerиMicrosoft.DBforPostgreSQLв своей подписке.az provider register --namespace Microsoft.ServiceLinker az provider register --namespace Microsoft.DBforPostgreSQLУстановите последнюю версию расширения Service Connector без пароля.
--upgradeПараметр обновляет расширение, если оно уже установлено:az extension add --name serviceconnector-passwordless --upgrade
Клонируйте образец приложения
Important
Репозиторий образцов учебника был архивирован 15 июня 2026 года и больше не поддерживается активно. Используйте его только для прохождения этого туториала.
Клонируйте пример репозитория приложений.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitВ качестве альтернативы вы можете скачать приложение из репозитория serviceconnector-webapp-postgresql-django-passwordless и распаковать его в папку serviceconnector-webapp-postgresql-django-passwordless.
Измените каталоги в папку репозитория с помощью
cd serviceconnector-webapp-postgresql-django-passwordlessи выполните все остальные команды из этой папки.
В примере приложения настройки продакшна веб-приложения находятся в файле azureproject/production.py . Настройки разработки находятся в azureproject/settings.py. Рабочие параметры настраивают Django для запуска в любой рабочей среде и не относятся к службе приложений.
Приложение использует рабочие параметры при задании переменной WEBSITE_HOSTNAME среды. App Service устанавливает эту переменную на имя хоста приложения, например msdocs-django.azurewebsites.net.
Дополнительные сведения см. в контрольном списке развертывания Django. Также см. параметры Production для Django на Azure.
Определение начальных переменных среды
Следующий код определяет необходимые переменные среды для этого руководства.
-
LOCATIONдолжен быть регионом Azure, где ваша подписка имеет достаточную квоту для создания ресурсов и обеспечивает неограниченный доступ к База данных Azure для PostgreSQL. - Пароль администратора PostgreSQL должен содержать от 8 до 128 символов как минимум из трёх из этих категорий: заглавные, строчные буквы, цифры и небуквенно-цифровые символы. Не используйте
$пароль для этого урока.
Настройте следующие переменные среды, заменяя
<region>на допустимое значение:LOCATION="<region>" RAND_ID=$RANDOM$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app-$RAND_ID" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" APP_SERVICE_PLAN_NAME="$APP_SERVICE_NAME-plan" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" DATABASE_NAME="restaurant" STORAGE_ACCOUNT_NAME="account$RAND_ID" ADMIN_USER="demoadmin"Читайте пароль администратора PostgreSQL, не отображая его и не добавляя в историю оболочки:
read -s -p "PostgreSQL administrator password: " ADMIN_PW && echoСоздайте группу ресурсов , чтобы содержать все ресурсы проекта. Имя группы ресурсов кэшируется и автоматически применяется к следующим командам.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Развертывание кода приложения в Службе приложений
Создайте хост приложения в App Service, включите автоматизацию сборки и развернуте примерный код приложения. План App Service уровня Basic (B1), используемый в этом учебнике, влечёт расходы в вашей подписке Azure. Актуальные цены смотрите в разделе App Service.
Файл requirements.txt архивного примера не содержит сервера Gunicorn, который используется в start.sh. Добавьте его в свою локальную копию, если его там ещё нет:
grep -qiE "^gunicorn([=<>~ ]|$)" requirements.txt || echo "gunicorn" >> requirements.txtСоздайте план Linux App Service в уровне цен Basic (B1), а затем создайте веб-приложение с помощью команды запуска из примера:
az appservice plan create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_PLAN_NAME \ --location $LOCATION \ --sku B1 \ --is-linux az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --plan $APP_SERVICE_PLAN_NAME \ --runtime "PYTHON:3.14" \ --startup-file "start.sh"Включите автоматизацию сборки App Service так, чтобы развертывание устанавливало пакеты в requirements.txt:
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings SCM_DO_BUILD_DURING_DEPLOYMENT=trueИз корня репозитория создайте ZIP-файл примерного приложения и развернуте его с помощью az webapp deploy:
rm -f app.zip python -m zipfile -c app.zip * az webapp deploy \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --src-path app.zip \ --type zip \ --track-status false rm app.zipКоманда развертывания выполняется успешно, когда App Service принимает ZIP-файл. Сборка продолжается в App Service и может занять несколько минут.
Создайте базу данных PostgreSQL в Azure
Создайте Azure Database Database for PostgreSQL — гибкий сервер и базу данных для хранения данных приложений.
Создайте сервер База данных Azure для PostgreSQL:
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 EnabledКоманда успешно выполняется, когда состояние гибкого сервера PostgreSQL равно
Succeeded.Удалите пароль администратора из текущей оболочки после создания сервера:
unset ADMIN_PWСоздайте базу данных с помощью az postgres flexible-server db create:
az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name $DB_SERVER_NAME \ --name $DATABASE_NAME
Создание подключения службы без пароля
Используйте az webapp connection, создайте postgres-flexible для добавления сервисного коннектора, который подключает веб-приложение Azure к базе данных PostgreSQL с помощью управляемой идентификационной аутентификации без пароля. Следующая команда настраивает База данных Azure для PostgreSQL для использования управляемого удостоверения и ролевого управления доступом в Azure. В выходных данных команды перечисляются действия, выполняемые Service Connector.
Команда создаёт параметр приложения с именем AZURE_POSTGRESQL_CONNECTIONSTRING, который содержит информацию о подключении к базе данных. В примере считывается эта настройка в azureproject/production.py. Дополнительные сведения см. в разделе "Переменные среды 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 $DATABASE_NAME \
--client-type python \
--system-identity \
--yes
Подключение будет готово, когда команда сообщит о подключении к гибкому серверу PostgreSQL и создаст параметр приложения AZURE_POSTGRESQL_CONNECTIONSTRING.
Подключите веб-приложение Django к служба хранилища Azure с помощью Service Connector
Создайте аккаунт хранения Azure, а затем используйте az webapp connection create storage-blob для подключения к веб-приложению. Команда соединения выполняет следующие действия:
- Включает системно назначаемое управляемое удостоверение для веб-приложения.
- Добавляет веб-приложение с ролью Storage Blob Data Contributor в учетную запись хранения.
- Настраивает сеть учетной записи хранения для приема доступа из веб-приложения.
- Создает переменную среды с именем
AZURE_STORAGEBLOB_RESOURCEENDPOINTдля учетной записи служба хранилища Azure.
Создание учетной записи служба хранилища Azure
Создайте учетную запись хранения общего назначения v2 с локально избыточным хранилищем:
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name $STORAGE_ACCOUNT_NAME \
--location $LOCATION \
--sku Standard_LRS \
--kind StorageV2
Создайте соединение без пароля для хранения
Создайте безпарольное соединение с аккаунтом хранения:
az webapp connection create storage-blob \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--account $STORAGE_ACCOUNT_NAME \
--client-type python \
--system-identity
Подключение готово, когда команда выводит сведения о подключении к учётной записи хранения и создаёт параметр приложения AZURE_STORAGEBLOB_RESOURCEENDPOINT.
Настройте контейнер с образцами фото
Обновите аккаунт служба хранилища Azure, чтобы предоставить публичный доступ к blob-ам для этого архивированного примера приложения.
Примечание.
Этот архивированный образец использует прямые URL blob для отображения фотографий, поэтому учебник обеспечивает анонимный доступ к
photosконтейнеру. Эта настройка специфична для сэмпла и не требуется для Service Connector. Для производственных приложений сохраняйте контейнеры в приватности и используйте контролируемый способ доставки, например, аутентифицированную конечную точку приложения.az storage account update \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access trueНазначьте авторизованное пользователю разрешение на создание контейнера с помощью аутентификации Microsoft Entra:
SIGNED_IN_USER_ID=$(az ad signed-in-user show --query id --output tsv) STORAGE_ACCOUNT_ID=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query id \ --output tsv) MSYS_NO_PATHCONV=1 az role assignment create \ --assignee-object-id $SIGNED_IN_USER_ID \ --assignee-principal-type User \ --role "Storage Blob Data Contributor" \ --scope $STORAGE_ACCOUNT_IDНастройка
MSYS_NO_PATHCONVэтой команды не позволяет Git Bash на Windows преобразовать идентификатор ресурсов Azure в путь Windows. Он не действует в Azure Cloud Shell или других Bash-средах. Может потребоваться несколько минут, чтобы назначения ролей вступили в силу.Используйте az storage container create, чтобы создать контейнер с именем
photosи разрешить анонимный доступ на чтение к большим двоичным объектам в этом контейнере:BLOB_ENDPOINT=$(az storage account show \ --resource-group $RESOURCE_GROUP_NAME \ --name $STORAGE_ACCOUNT_NAME \ --query primaryEndpoints.blob \ --output tsv) az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINTКонтейнер готов, когда в ответе для контейнера
photosотображается"created": true.
Тестирование веб-приложения Python в Azure
Откройте и проверьте веб-приложение Azure "Обзор ресторана". Приложение использует пакет azure.identity и его DefaultAzureCredential класс. Когда приложение выполняется в Azure, DefaultAzureCredential автоматически обнаруживает, когда управляемое удостоверение существует у службы приложений, и использует его для доступа к ресурсам служба хранилища Azure и База данных Azure для PostgreSQL. Приложению не нужно предоставлять ключи хранения, сертификаты или учетные данные для доступа к этим ресурсам.
Для локальной установки Azure CLI можно использовать
az webapp browseдля открытия приложения в браузере по умолчанию:az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell не удается открыть локальный браузер, поэтому он не поддерживает команду
az webapp browse. Из Cloud Shell выберите ссылку на домен по умолчанию в правом верхнем углу страницы портала Azure приложения.
Для запуска приложения может потребоваться несколько минут. Если вы видите страницу приложения по умолчанию, которая не является примером приложения, подождите минуту и обновите браузер.
Проверьте функциональные возможности примера приложения, добавив ресторан и некоторые отзывы с фотографиями. Приложение должно выглядеть следующим образом:
Очистка ресурсов
Чтобы избежать текущих расходов, можно удалить ресурсы, созданные для этого руководства, удалив группу ресурсов, содержащую их. Перед выполнением команды убедитесь, что приложение или ресурсы больше не нужны.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Команда возвращается сразу, а Azure удаляет ресурсы.
Troubleshooting
Если приложение не запускается или не подключается к своим ресурсам, проверьте журналы развертывания App Service, убедитесь, что параметры приложения AZURE_POSTGRESQL_CONNECTIONSTRING и AZURE_STORAGEBLOB_RESOURCEENDPOINT существуют, и подождите несколько минут, чтобы назначения ролей Azure вступили в силу. По вопросам запуска приложений на Python см. следующую статью: