Поделиться через


Учебник. Использование соединителя службы для создания приложения 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

  1. Настройте переменные среды, необходимые для руководства.

    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.

  2. Создайте группу ресурсов (при необходимости можно изменить ее имя). Имя группы ресурсов кэшируется и автоматически применяется к следующим командам.

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    
  3. Создайте сервер базы данных. Если появится запрос на включение доступа к текущему 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 .
  4. Настройте правило брандмауэра на сервере с помощью команды 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?

  5. Создайте базу данных с именем 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, а затем развернете код на этом узле.

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

  1. В терминале убедитесь, что вы находитесь в папке репозитория serviceconnector-webapp-postgresql-django-passwordless , содержащей код приложения.

  2. Выполните следующую команду 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-файла с включенной автоматизацией сборки.
  3. Настройте Служба приложений для использования 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. Команды создают параметры приложения в Служба приложений, которые подключают веб-приложение к этим ресурсам. Выходные данные из команд перечисляют действия соединителя службы, выполняемые для включения возможности без пароля.

  1. Добавьте соединитель службы 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'). Дополнительную информацию см. в разделе Доступ к переменным среды.

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

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

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

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  2. Создайте контейнер, вызываемую 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 в этом случае). Нет необходимости предоставлять ключи хранения, сертификаты или учетные данные Служба приложений для доступа к этим ресурсам.

  1. Перейдите к развернутом приложению по URL-адресу http://$APP_SERVICE_NAME.azurewebsites.net.

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

  2. Проверьте функциональные возможности примера приложения, добавив ресторан и некоторые отзывы с фотографиями для ресторана. Сведения о ресторане и обзоре хранятся в База данных Azure для PostgreSQL, а фотографии хранятся в служба хранилища Azure. Ниже приведен пример снимка экрана:

    Снимок экрана: пример приложения с функциями проверки ресторанов с помощью службы приложение Azure, Azure Postgre База данных SQL и служба хранилища Azure.

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

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

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

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

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

Возникли проблемы? Сообщите нам об этом.

Следующий шаг