Развертывание контейнерного приложения Python для Служба приложений
Эта статья является частью руководства по контейнеризации и развертыванию веб-приложения Python в службе приложение Azure. Служба приложений позволяет запускать контейнерные веб-приложения и развертывать их с помощью возможностей непрерывной интеграции и непрерывного развертывания (CI/CD) с помощью Docker Hub, Реестр контейнеров Azure и Visual Studio Team Services.
В этой части руководства вы узнаете, как развернуть контейнерное веб-приложение Python для Служба приложений с помощью веб-приложения Служба приложений для контейнеров. Веб-приложение для контейнеров позволяет сосредоточиться на создании контейнеров, не беспокоясь об управлении и обслуживании базового оркестратора контейнеров.
Следуя инструкциям здесь, вы в конечном итоге будете использовать веб-сайт Служба приложений с помощью образа контейнера Docker. Служба приложений извлекает исходный образ из Реестр контейнеров Azure с помощью управляемого удостоверения для проверки подлинности.
На схеме служб, показанной ниже, выделены компоненты, описанные в этой статье.
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". Если вы видите это сообщение, используйте новый реестр или уменьшите количество используемых веб-перехватчиков реестра.