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

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

В этом руководстве описано, как работать с заданиями на основе событий.

  • Создание среды Контейнеров приложений развертывания приложений-контейнеров
  • Создание очереди службы хранилища Azure для отправки сообщений в приложение-контейнер
  • Создание образа контейнера, выполняющего задание
  • Развертывание задания в среде "Приложения контейнеров"
  • Проверка обработки сообщений очереди приложением-контейнером

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

  1. Возвращает одно сообщение из очереди.
  2. Записывает сообщение в журналы выполнения задания.
  3. Удаляет сообщение из очереди.
  4. Выходы.

Внимание

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

Исходный код для задания, выполняемого в этом руководстве, доступен в репозитории GitHub примеров Azure.

Необходимые компоненты

Настройка

  1. Чтобы войти в Azure из ИНТЕРФЕЙСА командной строки, выполните следующую команду и следуйте инструкциям, чтобы завершить процесс проверки подлинности.

    az login
    
  2. Обеспечьте использование последней версии интерфейса командной строки, выполнив команду обновления.

    az upgrade
    
  3. Установите последнюю версию расширения CLI для приложений контейнеров Azure.

    az extension add --name containerapp --upgrade
    
  4. Microsoft.App Зарегистрируйте пространства имен и Microsoft.OperationalInsights пространства имен, если вы еще не зарегистрировали их в подписке Azure.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    
  5. После завершения настройки Azure CLI вы можете определить переменные среды, которые используются в этой статье.

    RESOURCE_GROUP="jobs-quickstart"
    LOCATION="northcentralus"
    ENVIRONMENT="env-jobs-quickstart"
    JOB_NAME="my-job"
    

Создание среды приложений-контейнеров

Среда "Приложения контейнеров Azure" выступает в качестве безопасной границы для приложений и заданий контейнеров, чтобы они могли совместно использовать ту же сеть и взаимодействовать друг с другом.

  1. Чтобы создать группу ресурсов, выполните указанную ниже команду.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Создайте среду приложений контейнеров с помощью следующей команды.

    az containerapp env create \
        --name "$ENVIRONMENT" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION"
    

Настройка очереди хранилища

Задание использует очередь служба хранилища Azure для получения сообщений. В этом разделе описано, как создать учетную запись хранения и очередь.

  1. Определите имя учетной записи хранения.

    STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
    QUEUE_NAME="myqueue"
    

    Замените <STORAGE_ACCOUNT_NAME> уникальным именем учетной записи хранения. Имена учетных записей хранения должны быть уникальными в Azure, содержать от 3 до 24 символов и состоять только из цифр и строчных букв.

  2. Создайте учетную запись Службы хранилища Azure.

    az storage account create \
        --name "$STORAGE_ACCOUNT_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Standard_LRS \
        --kind StorageV2
    
  3. Сохраните строка подключения очереди в переменную.

    QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
    
  4. Создайте очередь сообщений.

    az storage queue create \
        --name "$QUEUE_NAME" \
        --account-name "$STORAGE_ACCOUNT_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    

Создание и развертывание задания

Чтобы развернуть задание, необходимо сначала создать образ контейнера для задания и отправить его в реестр. Затем можно развернуть задание в среде "Приложения контейнеров".

  1. Определите имя образа контейнера и реестра.

    CONTAINER_IMAGE_NAME="queue-reader-job:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    Замените <CONTAINER_REGISTRY_NAME> уникальным именем реестра контейнеров. Имена реестра контейнеров должны быть уникальными в Azure и составлять от 5 до 50 символов длиной, содержащей только цифры и строчные буквы.

  2. Создайте реестр контейнеров.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. Исходный код задания доступен на сайте 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"
    

    Теперь образ доступен в реестре контейнеров.

  4. Создайте задание в среде "Приложения контейнеров".

    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 выполнений.

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

  1. Отправьте сообщение в очередь.

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. Вывод списка выполнений задания.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output json
    

    Так как задание настроено для оценки правила масштабирования каждые 60 секунд, выполнение задания может занять до полной минуты. Повторите команду, пока не увидите выполнение задания и его состояние Succeeded.

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

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