Руководство. Подключение веб-приложения Django к Azure PostgreSQL с помощью соединителя служб

В этом руководстве вы узнаете, как развернуть веб-приложение на основе данных Python Django для Служба приложений Azure и использовать соединитель служб для подключения к другим службам Azure. Пример веб-приложения хранит ресторан и просматривает сведения в базе данных База данных Azure для PostgreSQL и сохраняет фотографии в контейнере служба хранилища Azure.

Для выполнения следующих задач используется Azure CLI.

Примечание.

Это руководство аналогично учебнику по службе приложений Deploy веб-приложение Python Django с PostgreSQL в Azure, но использует системное управляемое удостоверение без пароля с управлением доступом на основе ролей Azure для доступа к другим ресурсам Azure. В разделе "Создание подключения службы без пароля" этой статьи показано, как соединитель служб упрощает процесс подключения.

Веб-приложение использует класс DefaultAzureCredential клиентской библиотеки Python Azure Identity для автоматического обнаружения наличия управляемого удостоверения и доступа к другим ресурсам.

Необходимые условия

  • Подписка Azure с разрешениями на запись и назначение ролей для ресурсов учебника в регионе Azure, который поддерживает Service Connector и имеет достаточные квоты и поддержку службы приложений.

  • Azure Cloud Shell для выполнения инструкций руководства или локального выполнения:

    1. Установите Azure CLI 2.30.0 или более поздней версии. Чтобы проверить версию, выполните команду az --version. Чтобы обновить, выполните команду az upgrade.
    2. Войдите в Azure с помощью az login и следуя инструкциям.

Настройка среды

  1. Убедитесь, что ваша подписка зарегистрирована для использования поставщиков ресурсов Майкрософт.ServiceLinker и Майкрософт.DBforPostgreSQL. В противном случае запустите az provider register -n Майкрософт.[name of service] для регистрации поставщиков.

  2. Установите следующие Azure CLI расширения:

    az extension add --name serviceconnector-passwordless --upgrade
    az extension add --name rdbms-connect
    

Клонируйте образец приложения

  1. Клонируйте пример репозитория приложений.

    git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
    

    Кроме того, вы можете скачать приложение из https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless и распакуйте его в папку с именем serviceconnector-webapp-postgresql-django-passwordless.

  2. Измените каталоги в папку репозитория с помощью cd serviceconnector-webapp-postgresql-django-passwordless и выполните все остальные команды из этой папки.

В примере приложения рабочие параметры веб-приложения находятся в файле azuresite/production.py . Параметры разработки находятся в azuresite/settings.py. Рабочие параметры настраивают Django для запуска в любой рабочей среде и не относятся к службе приложений.

Приложение использует рабочие параметры при задании переменной WEBSITE_HOSTNAME среды. Автоматически Azure служба приложений для строк подключения Postgres задает эту переменную как URL-адрес веб-приложения, например https://msdocs-django.azurewebsites.net.

Дополнительные сведения см. в контрольном списке развертывания Django. Также см. параметры Production для Django на Azure.

Определение начальных переменных среды

Следующий код определяет необходимые переменные среды для этого руководства.

  • LOCATION должен быть регионом Azure, где ваша подписка имеет достаточную квоту для создания ресурсов и обеспечивает неограниченный доступ к База данных Azure для PostgreSQL.
  • ADMIN_PW должен содержать от 8 до 128 символов в трех из четырех категорий: заглавных букв, строчных букв, чисел и неалфавитных символов, за исключением $.
  1. Настройте следующие переменные среды, заменив <region><database password> заполнители допустимыми значениями.

    LOCATION="<region>"
    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="<database password>"
    
  2. Создайте группу ресурсов , чтобы содержать все ресурсы проекта. Имя группы ресурсов кэшируется и автоматически применяется к следующим командам.

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    

Развертывание кода приложения в Службе приложений

Создайте узел приложения в Службе приложений и разверните пример кода приложения на этом узле. Команда az webapp up выполняет следующие действия:

  • Создает план службы приложений в ценовой категории "Базовый" (B1).
  • Создает приложение службы приложений.
  • Включает ведение журнала по умолчанию для приложения.
  • Закачивает репозиторий с помощью ZIP-развертывания, с включенной автоматизацией сборки.
  • Создает приложение.

В коде sku определяется ЦП, память и стоимость плана службы приложений. План службы "Базовый" (B1) предусматривает небольшую стоимость в подписке Azure. Вы можете опустить --sku параметр для использования номера SKU по умолчанию, обычно P1v3 (Premium версии 3). Полный список планов службы приложений см. в разделе "Цены на службу приложений".

  1. В папке репозитория 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.10 \
      --sku B1
    

    Примечание.

    Развертывание занимает несколько минут, и команда может зависать или истекать время ожидания, особенно в SKU уровня "Базовый". После успешной сборки приложения и появления выходных данных Starting the site, можно выйти из команды, нажав клавиши Ctrl+C.

  2. Настройте приложение для использования репозитория start.sh файла, выполнив команду az webapp config set .

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --startup-file "start.sh"
    

Создание базы данных Postgres в Azure

Создайте базу данных База данных Azure для PostgreSQL для хранения сведений о приложении. Команда az postgres flexible-server create создает гибкий сервер База данных Azure для PostgreSQL в указанной группе ресурсов:

  • Имя сервера, указанное в параметре --name . Имя должно быть уникальным во всей Azure.
  • Номер SKU, указанный в параметре --sku-name .
  • Имя пользователя и пароль учетной записи администратора, указанные в параметрах --admin-user и --admin-password.
  1. Создайте сервер База данных Azure для PostgreSQL. Если появится запрос на включение доступа к текущему 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 \
      --microsoft-entra-auth Enabled
    
  2. Если вам не будет предложено включить доступ к текущему IP-адресу клиента, настройте правило брандмауэра на сервере с помощью команды az postgres flexible-server firewall-rule create . Это правило позволяет локальной среде обращаться к серверу.

    IP_ADDRESS=<your IP address>
    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 address> в команде. Например, можно использовать What's My IP Address?.

  3. Создайте базу данных с именем 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;'
    

Создание подключения службы без пароля

Используйте az webapp connection create postgres-flexible, чтобы добавить сервисный коннектор, который осуществляет подключение веб-приложения Azure к базе данных Postgres с помощью проверки подлинности управляемой идентичности без пароля. Следующая команда настраивает База данных Azure для PostgreSQL для использования управляемого удостоверения и ролевого управления доступом в Azure. В выходных данных команды перечисляются действия, выполняемые Service Connector.

Команда создает переменную среды с именем AZURE_POSTGRESQL_CONNECTIONSTRING , которая предоставляет сведения о подключении к базе данных для приложения. Код приложения обращается к переменным среды приложения, например, при помощи операторов, таких как os.environ.get('AZURE_POSTGRESQL_HOST'). Дополнительные сведения см. в разделе "Переменные среды 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 restaurant \
  --client-type python \
  --system-identity

Создание и подключение к учетной записи хранения

Используйте az webapp connection create storage-blob для создания учетной записи хранения Azure и подключения службы. Команда выполняет следующие действия:

  • Включает системно назначаемое управляемое удостоверение для веб-приложения.
  • Добавляет в новую учетную запись хранения веб-приложение с ролью Участник данных BLOB-объектов хранилища.
  • Настраивает сеть учетной записи хранения для приема доступа из веб-приложения.
  • Создает переменную среды с именем AZURE_STORAGEBLOB_RESOURCEENDPOINT для учетной записи служба хранилища Azure.
  1. Выполните следующую команду, чтобы создать учетную запись хранения и подключение:

    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))
    
  2. Обновите учетную запись хранения, чтобы разрешить общедоступный доступ к blob-объектам, чтобы пользователи приложений могли просматривать фотографии.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  3. Используйте az storage container create для создания контейнера с именем photos в учетной записи хранения и разрешения анонимного общедоступного доступа на чтение блобов в новом контейнере.

    # 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

Откройте и проверьте веб-приложение Azure "Обзор ресторана". Приложение использует пакет azure.identity и его DefaultAzureCredential класс. Когда приложение выполняется в Azure, DefaultAzureCredential автоматически обнаруживает, когда управляемое удостоверение существует у службы приложений, и использует его для доступа к ресурсам служба хранилища Azure и База данных Azure для PostgreSQL. Приложению не нужно предоставлять ключи хранения, сертификаты или учетные данные для доступа к этим ресурсам.

  • Для локальной установки Azure CLI можно использовать az webapp browse для открытия приложения в браузере по умолчанию:

    az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAME
    
  • Azure Cloud Shell не удается открыть локальный браузер, поэтому он не поддерживает команду az webapp browse. В Cloud Shell самый простой способ открыть веб-приложение — выбрать ссылку Default domain в правом верхнем углу страницы портала Azure данного приложения.

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

Проверьте функциональные возможности примера приложения, добавив ресторан и некоторые отзывы с фотографиями. Приложение должно выглядеть следующим образом:

Screenshot примера приложения с функциями проверки ресторана с помощью службы приложений, База данных Azure для PostgreSQL и служба хранилища Azure.

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

Чтобы избежать текущих расходов, можно удалить ресурсы, созданные для этого руководства, удалив группу ресурсов, содержащую их. Перед выполнением команды убедитесь, что приложение или ресурсы больше не нужны.

az group delete --name $RESOURCE_GROUP_NAME --no-wait

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

Troubleshooting

Если у вас возникли проблемы с выполнением этого руководства, ознакомьтесь со следующими ресурсами: