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


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

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

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

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

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

A screenshot of the services using in the Tutorial - Containerized Python App on Azure with deployment path highlighted.

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

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

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

Шаг 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 параметры для переопределения этого поведения.

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

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

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

Чтобы выполнить приведенные ниже действия, вам потребуется строка подключения 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".

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

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

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

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

Примечание.

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

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

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

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

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