Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
В этом руководстве вы используете соединитель службы для подключения веб-приложения к службе базы данных. Это руководство является модификацией учебника по службе приложений, поэтому вы можете заметить некоторые сходства. Ознакомьтесь с разделом «Создание соединителя для подключения к базе данных Postgres без использования паролей», чтобы узнать, где используется соединитель службы и упрощает процесс подключения, описанный в руководстве по службе приложений.
В этом учебнике показано, как развернуть веб-приложение Python Django на основе данных в Службе приложений Azure и подключить его к гибкому серверу Базы данных Azure для PostgreSQL.
В этом учебнике используется Azure CLI для выполнения следующих задач:
- настройка начальной среды с помощью Python и Azure CLI;
- Создать гибкий сервер базы данных Azure для PostgreSQL
- развертывание кода в Службе приложений Azure и подключение к гибкому серверу PostgreSQL;
- обновление кода и повторное развертывание;
- просмотр журналов диагностики;
- управление веб-приложением на портале Azure.
Настройка начальной среды
Выполните команду в Azure Cloud Shell на портале Azure и установите расширение для беспарольного подключения службы в Azure CLI.
az extension add --name serviceconnector-passwordless --upgrade
Клонирование или скачивание примера приложения
Клонируйте репозиторий примера.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
Перейдите в следующую папку:
cd serviceconnector-webapp-postgresql-django-passwordless
В этом руководстве описано, как развернуть веб-приложение Django в службе приложение Azure. Веб-приложение использует управляемое удостоверение, назначенное системой (подключения без пароля) с Azure с управлением доступом на основе ролей для доступа к Хранилище Azure и База данных Azure для PostgreSQL - Гибкий сервер. В коде используется класс DefaultAzureCredential клиентской библиотеки удостоверений Azure для Python. Класс DefaultAzureCredential автоматически обнаруживает, что управляемое удостоверение существует для Службы приложений и использует его для доступа к другим ресурсам Azure.
- Параметры для работы в производственной среде хранятся в файле azuresite/production.py. Параметры разработки хранятся в файле azuresite/settings.py.
- Приложение использует параметры производственной среды, если установлена переменная среды
WEBSITE_HOSTNAME. Служба приложений Azure автоматически присваивает этой переменной URL-адрес веб-приложения, напримерmsdocs-django.azurewebsites.net.
Эти производственные параметры связаны с настройкой Django для запуска в любой рабочей среде и не относятся к Службе приложений. Дополнительные сведения см. в контрольном списке развертывания Django. Дополнительные сведения о некоторых изменениях см. в разделе Параметры рабочей среды для Django в Azure.
Возникли проблемы? Сообщите нам об этом.
Создание базы данных Postgres в Azure
Настройте переменные среды, необходимые для руководства.
LOCATION="eastus" RAND_ID=$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" ADMIN_USER="demoadmin" ADMIN_PW="{your database password}"Внимание
ADMIN_PWдолжны содержать от 8 до 128 символов из трех из следующих категорий: английские прописные буквы, английские строчные буквы, цифры и неалфавитные символы. При создании имен пользователей или паролей не используйте символ$. Позже вы создадите переменные среды с этими значениями, где$символ имеет определенное значение в контейнере Linux, используемом для запуска приложений Python.Создайте группу ресурсов (при необходимости можно изменить ее имя). Имя группы ресурсов кэшируется и автоматически применяется к следующим командам.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATIONСоздайте сервер базы данных. Если появится запрос на включение доступа к текущему IP-адресу клиента, введите
yзначение "Да". Этот процесс занимает несколько минут: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 --active-directory-auth EnabledЕсли команда
azне распознана, проверьте, установили ли вы Azure CLI согласно сведениям, указанным в разделе Настройка начальной среды.Команда az postgres flexible-server create выполняет следующие действия (для их завершения потребуется несколько минут):
- Создайте группу ресурсов по умолчанию, если кэшированное имя еще не существует.
- Создайте гибкий сервер PostgreSQL:
- С именем сервера, указанным параметром
--name. Имя должно быть уникальным в Azure. - Код SKU указан с помощью параметра
--sku-name.
- С именем сервера, указанным параметром
- Создайте учетную запись администратора с именем пользователя и паролем, указанными в
--admin-userпараметрах и--admin-passwordпараметрах. - Создайте базу данных, имя которой указывается с параметром
--database-name.
Настройте правило брандмауэра на сервере с помощью команды az postgres flexible-server firewall-rule create . Это правило позволяет локальной среде обращаться к серверу. (Если вам будет предложено включить доступ с IP-адреса клиента на предыдущем шаге, можно пропустить этот шаг.)
IP_ADDRESS=<your IP> az postgres flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --rule-name AllowMyIP \ --start-ip-address $IP_ADDRESS \ --end-ip-address $IP_ADDRESSИспользуйте любое средство или веб-сайт, отображающий IP-адрес для замены
<your IP>в команде. Например, вы можете использовать веб-сайт What's My IP Address?Создайте базу данных с именем
restaurantс помощью команды az postgres flexible-server execute .az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Развертывание кода в Службе приложений Azure
В этом разделе вы создадите узел приложения в приложении Службы приложений, подключите это приложение к базе данных Postgres, а затем развернете код на этом узле.
Создать приложение App Service
В терминале убедитесь, что вы находитесь в папке репозитория serviceconnector-webapp-postgresql-django-passwordless , содержащей код приложения.
Выполните следующую команду,
az webapp up, чтобы создать хост Службы приложений для приложения:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1SKU определяет размер (ЦП, память) и стоимость плана службы приложений. План обслуживания B1 (базовый) несет небольшую стоимость в подписке Azure. Полный список планов службы приложений см. на странице цен на Службу приложений.
Эта команда выполняет следующие действия (выполнение займет несколько минут), используя группу ресурсов и расположение, кэшированные из предыдущей команды
az group create(группа$RESOURCE_GROUP_NAMEв регионеeastusв этом примере).- Создайте план службы приложений в ценовой категории "Базовый" (B1). Можно опустить
--sku, чтобы использовать значения по умолчанию. - Создайте приложение Службы приложений.
- Включение ведения журнала по умолчанию для приложения.
- Загрузите репозиторий с использованием ZIP-развертывания и включенной автоматизацией сборки.
- Создайте план службы приложений в ценовой категории "Базовый" (B1). Можно опустить
Настройте Службы приложений для использования start.sh в репозитории командой az webapp config set.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Создание соединителя без пароля в базе данных Postgres
Теперь, когда код развернут в Службе приложений, необходимо подключить приложение к базе данных Postgres в Azure. Код приложения ожидает, что информация о базе данных будет найдена в переменной среды с именем AZURE_POSTGRESQL_CONNECTIONSTRING для сервера PostgreSQL flexible и в переменной среды с именем AZURE_STORAGEBLOB_RESOURCEENDPOINT для учетной записи хранилища Azure.
Команды Service Connector настраивают ресурсы хранилища Azure и базы данных Azure для PostgreSQL для использования управляемого удостоверения и управления доступом на основе ролей Azure. Команды создают параметры приложения в Службе приложений, которые подключают ваше веб-приложение к этим ресурсам. Выходные данные команд перечисляют действия служебного соединителя, выполненные для обеспечения возможности работы без пароля.
Добавьте соединитель службы PostgreSQL с помощью команды az webapp connection create postgres-flexible. Управляемое удостоверение, назначенное системой, используется для проверки подлинности веб-приложения при подключении к целевому ресурсу, в данном случае PostgreSQL.
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 restaurant \
--client-type python \
--system-identity
Примечание.
Если отображается сообщение об ошибке "Подписка не зарегистрирована для использования Microsoft.ServiceLinker", выполните команду az provider register -n Microsoft.ServiceLinker, чтобы зарегистрировать поставщика ресурсов Service Connector, затем повторно выполните команду для подключения.
В коде Python можно обращаться к этим параметрам как к переменным среды с помощью таких инструкций, как os.environ.get('AZURE_POSTGRESQL_HOST'). Дополнительную информацию см. в разделе Доступ к переменным среды.
Возникли проблемы? Сначала изучите руководство по устранению неполадок. Если проблему решить не удается, свяжитесь с нами.
Создание учетной записи хранения и подключение к ней
- Используйте команду az webapp connection create storage-blob, чтобы создать учетную запись хранения и создать соединитель службы, который выполняет следующие конфигурации:
Включает системное управляемое удостоверение на веб-приложении
Добавляет веб-приложение с ролью Вкладчика данных BLOB-объектов хранилища в новосозданную учетную запись хранения.
Настройте сеть учетной записи хранения для приема доступа из веб-приложения.
STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \ --new true \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --client-type python \ --system-identity \ --query configurations[].value \ --output tsv) STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))
Обновите учетную запись хранения, чтобы разрешить общедоступный доступ к объектам BLOB для пользователей приложения ресторана, чтобы они могли получить доступ к изображениям.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessСоздайте контейнер, называемый
photos, в учетной записи хранилища с помощью команды az storage container create. Разрешить анонимный (публичный) доступ на чтение к blob-объектам в недавно созданном контейнере.# Set the BLOB_ENDPOINT variable BLOB_ENDPOINT=$(az storage account show --name $STORAGE_ACCOUNT_NAME --query "primaryEndpoints.blob" | sed 's/"//g') echo $BLOB_ENDPOINT # Create the storage container using the BLOB_ENDPOINT variable az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINT
Тестирование веб-приложения Python в Azure
В примере приложения Python используется пакет azure.identity и его DefaultAzureCredential класс. Когда приложение запущено в Azure, DefaultAzureCredential автоматически определяет, существует ли управляемое удостоверение для Службы приложений и, если да, использует его для доступа к другим ресурсам Azure, таким как хранилище и PostgreSQL. Нет необходимости предоставлять ключи хранения, сертификаты или учетные данные в Службу приложений для доступа к этим ресурсам.
Перейдите к развернутому приложению по URL-адресу
http://$APP_SERVICE_NAME.azurewebsites.net.Для запуска приложения может потребоваться несколько минут. Если вы видите страницу приложения по умолчанию, которая не является образцом приложения по умолчанию, подождите минуту и обновите браузер.
Проверьте функциональные возможности примера приложения, добавив ресторан и некоторые отзывы с фотографиями для ресторана. Сведения о ресторане и обзоре хранятся в базе данных Azure для PostgreSQL, а фотографии хранятся в службе хранилища Azure. Ниже приведен пример снимка экрана:
Очистка ресурсов
Если вы хотите сохранить приложение или продолжить работу с дополнительными руководствами, перейдите к следующим шагам. В противном случае, чтобы избежать постоянных затрат, удалите группу ресурсов, созданную для этой инструкции.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
При удалении группы ресурсов будут также освобождены и удалены все ресурсы, содержащиеся в ней. Прежде чем выполнять команду, убедитесь, что вам больше не нужны ресурсы в группе.
Удаление всех ресурсов может занять некоторое время. Аргумент --no-wait позволяет команде выполнять возврат без задержки.
Возникли проблемы? Сообщите нам об этом.