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


Развертывание контейнерного приложения Python в службе приложений

Эта статья является частью руководства по контейнеризации и развертыванию веб-приложения Python в Службе приложений Azure. Служба приложений позволяет запускать контейнерные веб-приложения и развертывать их с помощью возможностей непрерывной интеграции и непрерывного развертывания (CI/CD) с помощью Docker Hub, реестра контейнеров Azure и Visual Studio Team Services.

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

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

На этой схеме службы выделены компоненты, описанные в этой статье.

Снимок экрана служб, используемых в руководстве — Контейнерное приложение Python на Azure с выделенным путем развертывания.

Создание веб-приложения

Команды Azure CLI можно выполнять в Azure Cloud Shell или на рабочей станции, где установленAzure CLI.

  1. Получите идентификатор ресурса группы, содержащей реестр контейнеров Azure, с помощью команды az group show.

    # RESOURCE_GROUP_NAME='msdocs-web-app-rg'
    
    RESOURCE_ID=$(az group show \
      --resource-group $RESOURCE_GROUP_NAME \
      --query id \
      --output tsv)
    echo $RESOURCE_ID
    

    RESOURCE_GROUP_NAME должно быть установлено в вашей среде как название группы ресурсов, которое вы использовали в части 3. Создание контейнера в Azure этого руководства. Если это не так, раскомментируйте первую строку и присвойте ему имя, которое вы использовали.

  2. Создайте план службы приложений с помощью команды az appservice plan create.

    APP_SERVICE_PLAN_NAME='msdocs-web-app-plan'
    
    az appservice plan create \
        --name $APP_SERVICE_PLAN_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --sku B1 \
        --is-linux
    
  3. Создайте веб-приложение с помощью команды az webapp create.

    Следующая команда также включает управляемое удостоверение, назначаемое системой, для веб-приложения и назначает ему роль AcrPull в указанном ресурсе, которым в данном случае является группа ресурсов, содержащая реестр контейнеров Azure. Это предоставляет управляемому удостоверению, назначенному системой, права на выполнение операции pull в любом реестре контейнеров Azure в группе ресурсов.

    APP_SERVICE_NAME='<website-name>'
    # REGISTRY_NAME='<your Azure Container Registry name>'
    CONTAINER_NAME=$REGISTRY_NAME'.azurecr.io/msdocspythoncontainerwebapp:latest'
    
    az webapp create \
      --resource-group $RESOURCE_GROUP_NAME \
      --plan $APP_SERVICE_PLAN_NAME \
      --name $APP_SERVICE_NAME \
      --assign-identity '[system]' \
      --scope $RESOURCE_ID \
      --role acrpull \
      --deployment-container-image-name $CONTAINER_NAME 
    

    Где:

    • APP_SERVICE_NAME должен быть глобально уникальным, так как он становится именем веб-сайта в URL-https://<website-name>.azurewebsites.net.
    • CONTAINER_NAME представляет собой переменную в формате "yourregistryname.azurecr.io/repo_name:tag".
    • REGISTRY_NAME по-прежнему должно быть указано в вашей рабочей среде в качестве имени реестра, которое вы использовали в части 3. Создание контейнера в Azure этого руководства. Если это не так, раскомментируйте строку, в которой она задана в фрагменте кода, и задайте для нее имя, которое вы использовали.

    Заметка

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

    No credential was provided to access Azure Container Registry. Trying to look up...
    Retrieving credentials failed with an exception:'No resource or more than one were found with name ...'
    

    Указанная ошибка происходит потому, что веб-приложение по умолчанию использует учетные данные администратора Реестра контейнеров Azure для аутентификации в реестре, а учетные данные администратора не были включены в реестре. Эту ошибку можно безопасно игнорировать, так как веб-приложение будет использовать управляемое удостоверение, назначаемое системой, для проверки подлинности в следующей команде.

Настройка управляемого удостоверения и веб-хук

  1. Настройте веб-приложение для использования управляемых удостоверений для извлечения из реестра контейнеров Azure с помощью команды az webapp config set.

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --generic-configurations '{"acrUseManagedIdentityCreds": true}'
    

    Так как вы включили управляемое удостоверение, назначаемое системой при создании веб-приложения, оно будет управляемым удостоверением, используемым для извлечения из реестра контейнеров Azure.

  2. Получите учетные данные области приложения с помощью команды az webapp deployment list-publishing-credentials.

    CREDENTIAL=$(az webapp deployment list-publishing-credentials \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --query publishingPassword \
      --output tsv)
    echo $CREDENTIAL 
    
  3. Используйте учетные данные области приложения для создания веб-перехватчика с помощью команды az acr webhook create.

    SERVICE_URI='https://$'$APP_SERVICE_NAME':'$CREDENTIAL'@'$APP_SERVICE_NAME'.scm.azurewebsites.net/api/registry/webhook'
    
    az acr webhook create \
      --name webhookforwebapp \
      --registry $REGISTRY_NAME \
      --scope msdocspythoncontainerwebapp:* \
      --uri $SERVICE_URI \
      --actions push 
    

    По умолчанию эта команда создает веб-перехватчик в той же группе ресурсов и расположении, что и указанный реестр контейнеров Azure. При необходимости можно использовать параметры --resource-group и --location для переопределения этого поведения.

Настройка подключения к MongoDB

На этом шаге необходимо указать переменные среды, необходимые для подключения к MongoDB.

Если вам нужно создать Azure Cosmos DB для MongoDB, рекомендуется выполнить действия, чтобы настроить Cosmos DB для MangoDB в части 2. Создание и тестирование контейнера локально этого руководства. По завершении у вас должна быть строка подключения для Azure Cosmos DB под MongoDB в формате mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>.

Чтобы выполнить приведенные ниже действия, вам потребуется строка подключения MongoDB.

Чтобы задать переменные среды в службе приложений, создайте параметры приложения с помощью следующей команды az webapp config appsettings set.

MONGO_CONNECTION_STRING='your Mongo DB connection string in single quotes'
MONGO_DB_NAME=restaurants_reviews
MONGO_COLLECTION_NAME=restaurants_reviews

az webapp config appsettings set \
   --resource-group $RESOURCE_GROUP_NAME \
   --name $APP_SERVICE_NAME \
   --settings CONNECTION_STRING=$MONGO_CONNECTION_STRING \
              DB_NAME=$MONGO_DB_NAME  \
              COLLECTION_NAME=$MONGO_COLLECTION_NAME 
  • CONNECTION_STRING: строка подключения, начинающаяся с "mongodb://".
  • DB_NAME: используйте "restaurants_reviews".
  • COLLECTION_NAME: Используйте "restaurants_reviews".

Просмотр сайта

Чтобы проверить, запущен ли сайт, перейдите к https://<website-name>.azurewebsites.net; где имя веб-сайта — это имя службы приложений. В случае успешного выполнения вы увидите пример приложения для проверки ресторана. Это может занять несколько мгновений, прежде чем произойдет первый запуск сайта. Когда появится сайт, добавьте ресторан и обзор для этого ресторана, чтобы подтвердить работу примера приложения.

Если вы используете Azure CLI локально, можно использовать команду az webapp browse, чтобы перейти к веб-сайту. Если вы используете Cloud Shell, откройте окно браузера и перейдите по URL-адресу веб-сайта.

az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME 

Заметка

Команда az webapp browse не поддерживается в Cloud Shell. Откройте окно браузера и перейдите по URL-адресу веб-сайта.

Устранение неполадок развертывания

Если пример приложения не отображается, выполните следующие действия.

  • При развертывании контейнеров и службе приложений всегда проверяйте страницу Центра развертывания / журналов на портале Azure. Убедитесь, что контейнер был запущен и работает. Начальное извлечение и запуск контейнера может занять несколько минут.
  • Попробуйте перезапустить службу приложений и узнать, устранена ли проблема.
  • При наличии ошибок программирования эти ошибки отображаются в журналах приложений. На странице портала Azure для службы приложений выберите Диагностика и решение проблем/журналы приложений.
  • Пример приложения зависит от подключения к MongoDB. Убедитесь, что служба приложений имеет параметры приложения с правильными сведениями о подключении.
  • Убедитесь, что управляемое удостоверение включено для службы приложений и используется в Центре развертывания. На странице портала Azure для службы приложений перейдите к ресурсу Службы приложений Центр развертывания и убедитесь, что Аутентификация задано значение Управляемое удостоверение.
  • Убедитесь, что вебхук определен в реестре контейнеров Azure. Веб-перехватчик позволяет службе приложений извлекать образ контейнера. В частности, убедитесь, что URI службы заканчивается на "/api/registry/webhook".
  • Различные тарифные планы реестра контейнеров Azure обладают разными функциями, включая количество веб-перехватчиков. Если вы повторно используете реестр, вы можете увидеть сообщение "Квота превышена для вебхуков типа ресурса для SKU реестра "Базовый". Дополнительные сведения о различных квотах SKU и процессе обновления: https://aka.ms/acr/tiers". Если вы видите это сообщение, используйте новый реестр или уменьшите количество веб-перехватчиков реестра .

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