Учебник. Использование соединителя службы для создания приложения Django с помощью Postgres в Службе приложений Azure
Примечание.
В этом руководстве вы используете соединитель службы для подключения веб-приложения к службе базы данных. Это руководство является изменением Служба приложений учебника, поэтому вы можете увидеть некоторые сходства. Ознакомьтесь с разделом "Создание соединителя без пароля в базе данных 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, а затем развернете код на этом узле.
Создание приложения Службы приложений
В терминале убедитесь, что вы находитесь в папке репозитория 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 B1
Номер SKU определяет размер (ЦП, память) и стоимость плана Служба приложений. План обслуживания 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. Код приложения ожидает поиска сведений о базе данных в переменной среды с именем гибкого сервера PostgresSQL и переменной среды с именем AZURE_POSTGRESQL_CONNECTIONSTRING
AZURE_STORAGEBLOB_RESOURCEENDPOINT
служба хранилища Azure учетной записи.
Команды Соединителя служб настраивают служба хранилища Azure и База данных Azure для PostgreSQL ресурсы для использования управляемого удостоверения и управления доступом на основе ролей Azure. Команды создают параметры приложения в Служба приложений, которые подключают веб-приложение к этим ресурсам. Выходные данные из команд перечисляют действия соединителя службы, выполняемые для включения возможности без пароля.
- Добавьте соединитель службы PostgreSQL с помощью команды az webapp connection create postgres-flexible command. Управляемое удостоверение, назначаемое системой, используется для проверки подлинности веб-приложения в целевом ресурсе 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
, чтобы зарегистрировать поставщик ресурсов соединителя приложений. Сделав это, выполните команду еще раз.
В коде 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
позволяет команде выполнять возврат без задержки.
Возникли проблемы? Сообщите нам об этом.