Руководство. Развертывание задания на основе событий с помощью приложений контейнеров Azure
Задания приложений контейнеров Azure позволяют выполнять контейнерные задачи, которые выполняются в течение ограниченной длительности и выхода. Выполнение задания можно активировать вручную, по расписанию или на основе событий. Задания лучше всего подходят для таких задач, как обработка данных, машинное обучение, очистка ресурсов или любой сценарий, требующий бессерверных временных вычислительных ресурсов.
В этом руководстве описано, как работать с заданиями на основе событий.
- Создание среды Контейнеров приложений развертывания приложений-контейнеров
- Создание очереди службы хранилища Azure для отправки сообщений в приложение-контейнер
- Создание образа контейнера, выполняющего задание
- Развертывание задания в среде "Приложения контейнеров"
- Проверка обработки сообщений очереди приложением-контейнером
Создаваемое задание запускает выполнение для каждого сообщения, отправленного в очередь служба хранилища Azure. Каждое выполнение задания запускает контейнер, выполняющий следующие действия:
- Возвращает одно сообщение из очереди.
- Записывает сообщение в журналы выполнения задания.
- Удаляет сообщение из очереди.
- Выходы.
Внимание
Масштабировщик отслеживает длину очереди, чтобы определить, сколько заданий нужно запустить. Для точного масштабирования не удаляйте сообщение из очереди, пока выполнение задания не завершит обработку.
Исходный код для задания, выполняемого в этом руководстве, доступен в репозитории GitHub примеров Azure.
Необходимые компоненты
- Учетная запись Azure с активной подпиской.
- Если у вас нет учетной записи, вы можете создать ее бесплатно.
- Установите интерфейс командной строки Azure.
- Ознакомьтесь с ограничениями заданий для списка ограничений.
Настройка
Чтобы войти в Azure из ИНТЕРФЕЙСА командной строки, выполните следующую команду и следуйте инструкциям, чтобы завершить процесс проверки подлинности.
az login
Обеспечьте использование последней версии интерфейса командной строки, выполнив команду обновления.
az upgrade
Установите последнюю версию расширения CLI для приложений контейнеров Azure.
az extension add --name containerapp --upgrade
Microsoft.App
Зарегистрируйте пространства имен иMicrosoft.OperationalInsights
пространства имен, если вы еще не зарегистрировали их в подписке Azure.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
После завершения настройки Azure CLI вы можете определить переменные среды, которые используются в этой статье.
RESOURCE_GROUP="jobs-quickstart" LOCATION="northcentralus" ENVIRONMENT="env-jobs-quickstart" JOB_NAME="my-job"
Создание среды приложений-контейнеров
Среда "Приложения контейнеров Azure" выступает в качестве безопасной границы для приложений и заданий контейнеров, чтобы они могли совместно использовать ту же сеть и взаимодействовать друг с другом.
Чтобы создать группу ресурсов, выполните указанную ниже команду.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"
Создайте среду приложений контейнеров с помощью следующей команды.
az containerapp env create \ --name "$ENVIRONMENT" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION"
Настройка очереди хранилища
Задание использует очередь служба хранилища Azure для получения сообщений. В этом разделе описано, как создать учетную запись хранения и очередь.
Определите имя учетной записи хранения.
STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>" QUEUE_NAME="myqueue"
Замените
<STORAGE_ACCOUNT_NAME>
уникальным именем учетной записи хранения. Имена учетных записей хранения должны быть уникальными в Azure, содержать от 3 до 24 символов и состоять только из цифр и строчных букв.Создайте учетную запись Службы хранилища Azure.
az storage account create \ --name "$STORAGE_ACCOUNT_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Standard_LRS \ --kind StorageV2
Сохраните строка подключения очереди в переменную.
QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
Создайте очередь сообщений.
az storage queue create \ --name "$QUEUE_NAME" \ --account-name "$STORAGE_ACCOUNT_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Создание и развертывание задания
Чтобы развернуть задание, необходимо сначала создать образ контейнера для задания и отправить его в реестр. Затем можно развернуть задание в среде "Приложения контейнеров".
Определите имя образа контейнера и реестра.
CONTAINER_IMAGE_NAME="queue-reader-job:1.0" CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
Замените
<CONTAINER_REGISTRY_NAME>
уникальным именем реестра контейнеров. Имена реестра контейнеров должны быть уникальными в Azure и составлять от 5 до 50 символов длиной, содержащей только цифры и строчные буквы.Создайте реестр контейнеров.
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Basic \ --admin-enabled true
Исходный код задания доступен на сайте GitHub. Выполните следующую команду, чтобы клонировать репозиторий и создать образ контейнера в облаке с помощью
az acr build
команды.az acr build \ --registry "$CONTAINER_REGISTRY_NAME" \ --image "$CONTAINER_IMAGE_NAME" \ "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
Теперь образ доступен в реестре контейнеров.
Создайте задание в среде "Приложения контейнеров".
az containerapp job create \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --environment "$ENVIRONMENT" \ --trigger-type "Event" \ --replica-timeout "1800" \ --min-executions "0" \ --max-executions "10" \ --polling-interval "60" \ --scale-rule-name "queue" \ --scale-rule-type "azure-queue" \ --scale-rule-metadata "accountName=$STORAGE_ACCOUNT_NAME" "queueName=$QUEUE_NAME" "queueLength=1" \ --scale-rule-auth "connection=connection-string-secret" \ --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \ --cpu "0.5" \ --memory "1Gi" \ --secrets "connection-string-secret=$QUEUE_CONNECTION_STRING" \ --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \ --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
В следующей таблице описаны ключевые параметры, используемые в команде.
Параметр Описание --replica-timeout
Максимальная длительность выполнения реплики. --min-executions
Минимальное количество выполнения заданий для каждого интервала опроса. --max-executions
Максимальное количество выполнения заданий для каждого интервала опроса. --polling-interval
Интервал опроса, с помощью которого необходимо оценить правило масштабирования. --scale-rule-name
Имя правила масштабирования. --scale-rule-type
Тип используемого правила масштабирования. --scale-rule-metadata
Метаданные правила масштабирования. --scale-rule-auth
Проверка подлинности для правила масштабирования. --secrets
Секреты, используемые для задания. --registry-server
Сервер реестра контейнеров, используемый для задания. Для Реестр контейнеров Azure команда автоматически настраивает проверку подлинности. --env-vars
Переменные среды, используемые для задания. Конфигурация правила масштабирования определяет источник событий для мониторинга. Он вычисляется по каждому интервалу опроса и определяет, сколько выполнения заданий следует активировать. Дополнительные сведения см. в разделе "Настройка правил масштабирования".
Задание на основе событий теперь создается в среде "Приложения контейнеров".
Проверка развертывания
Задание настраивается для оценки правила масштабирования каждые 60 секунд, которое проверяет количество сообщений в очереди. Для каждого ознакомительного периода он запускает новое выполнение задания для каждого сообщения в очереди до 10 выполнений.
Чтобы убедиться, что задание настроено правильно, вы можете отправить некоторые сообщения в очередь, убедиться, что запущены выполнение задания, а сообщения записываются в журналы выполнения задания.
Отправьте сообщение в очередь.
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Вывод списка выполнений задания.
az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --output json
Так как задание настроено для оценки правила масштабирования каждые 60 секунд, выполнение задания может занять до полной минуты. Повторите команду, пока не увидите выполнение задания и его состояние
Succeeded
.Выполните следующие команды, чтобы просмотреть зарегистрированные сообщения. Для этих команд требуется расширение Log Analytics, поэтому примите запрос на установку расширения при запросе.
LOG_ANALYTICS_WORKSPACE_ID=`az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv` az monitor log-analytics query \ --workspace "$LOG_ANALYTICS_WORKSPACE_ID" \ --analytics-query "ContainerAppConsoleLogs_CL | where ContainerJobName_s == '$JOB_NAME' | order by _timestamp_d asc"
ContainerAppConsoleLogs_CL
Пока таблица не будет готова, команда возвращает ошибку:BadArgumentError: The request had some invalid properties
Подождите несколько минут и повторите попытку.
Совет
Возникли проблемы? Сообщите о них в репозитории Azure Container Apps на GitHub.
Очистка ресурсов
После завершения выполните следующую команду, чтобы удалить группу ресурсов, содержащую ресурсы приложений контейнеров.
Внимание
Следующая команда удаляет указанную группу ресурсов и все ресурсы, содержащиеся в ней. Если в указанной группе ресурсов существуют другие ресурсы, кроме созданных для работы с этим учебником, они также будут удалены.
az group delete \
--resource-group $RESOURCE_GROUP