Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Задания приложений контейнеров Azure позволяют выполнять контейнерные задачи, которые выполняются в течение ограниченной длительности, а затем остановиться. Выполнение задания можно активировать вручную, по расписанию или на основе событий. Задания лучше всего подходят для таких задач, как обработка данных, машинное обучение, очистка ресурсов или любой сценарий, требующий бессерверных временных вычислительных ресурсов.
В этом руководстве описано, как работать с заданиями на основе событий.
- Создание среды приложений-контейнеров для развертывания приложений-контейнеров
- Создание очереди службы хранилища Azure для отправки сообщений в приложение контейнера
- Создайте образ контейнера для выполнения задания
- Разверните задание в среде "Контейнерные приложения"
- Удостоверьтесь, что сообщения очереди обрабатываются контейнерным приложением
Создаваемое задание запускает выполнение для каждого сообщения, отправленного в очередь Azure Storage. Каждое выполнение задания запускает контейнер, выполняющий следующие действия:
- Возвращает одно сообщение из очереди.
- Записывает сообщение в журналы выполнения задания.
- Удаляет сообщение из очереди.
- Останавливается.
Внимание
Масштабировщик отслеживает длину очереди, чтобы определить, сколько заданий нужно запустить. Для точного масштабирования не удаляйте сообщение из очереди, пока выполнение задания не завершит обработку.
Исходный код для задания, которое вы выполняете в этом руководстве, доступен в репозитории GitHub Azure Samples.
Предварительные требования
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи, вы можете создать ее бесплатно.
- Интерфейс командной строки Azure.
Сведения о возможностях, которые не поддерживаются заданиями в Container Apps, см. в разделе Ограничения заданий.
Подготовка среды
Чтобы войти в Azure из Azure CLI, выполните следующую команду и следуйте инструкциям, чтобы завершить процесс проверки подлинности.
az loginУбедитесь, что вы запускаете последнюю версию Azure CLI с помощью
az upgradeкоманды.az upgradeУстановите последнюю версию расширения CLI для приложений контейнеров.
az extension add --name containerapp --upgradeЗарегистрируйте пространства имен
Microsoft.App,Microsoft.OperationalInsightsиMicrosoft.Storage, если они еще не зарегистрированы в вашей подписке Azure.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.StorageОпределите переменные среды, используемые в этой статье.
RESOURCE_GROUP="jobs-quickstart" LOCATION="northcentralus" ENVIRONMENT="env-jobs-quickstart" JOB_NAME="my-job"
Создание среды приложений-контейнеров
Среда контейнерных приложений действует как граница изоляции для контейнерных приложений и заданий, благодаря чему они могут использовать одну и ту же сеть и взаимодействовать друг с другом.
Создайте группу ресурсов с помощью следующей команды.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"Создайте среду "Приложения контейнеров" с помощью следующей команды.
az containerapp env create \ --name "$ENVIRONMENT" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION"
Настройка очереди хранилища
Задание использует очередь в Azure Storage для получения сообщений. В этом разделе описано, как создать учетную запись хранения и очередь.
Определите имя учетной записи хранения.
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Если эта команда возвращает следующую ошибку, убедитесь, что вы зарегистрировали
Microsoft.Storageпространство имен в подписке Azure.(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.Используйте эту команду для регистрации пространства имен:
az provider register --namespace Microsoft.StorageСохраните строку подключения очереди в переменную:
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"
Создайте управляемое удостоверение, назначенное пользователем
Чтобы избежать использования учетных данных администратора, извлеките образы из частных репозиториев в реестре контейнеров Azure. Используйте управляемые удостоверения для проверки подлинности. По возможности используйте управляемую идентичность, назначаемую пользователем, для загрузки образов.
Создайте удостоверение, управляемое и назначаемое пользователем. Перед выполнением следующих команд выберите имя управляемого удостоверения и создайте следующую переменную:
IDENTITY="<YOUR_IDENTITY_NAME>"az identity create \ --name $IDENTITY \ --resource-group $RESOURCE_GROUPПолучите идентификатор ресурса идентичности:
IDENTITY_ID=$(az identity show \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Создание и развертывание задания
Чтобы развернуть задание, необходимо сначала создать образ контейнера и отправить контейнер в реестр. Затем можно развернуть задание в среде Container Apps.
Определите имя образа контейнера и реестра:
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Реестр контейнеров должен поддерживать токены для аудитории Azure Resource Manager (ARM) для аутентификации, чтобы использовать управляемую идентичность для загрузки образов.
Используйте следующую команду, чтобы проверить, разрешены ли маркеры ARM для доступа к реестру контейнеров Azure:
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"Если маркеры ARM разрешены, вы увидите следующие выходные данные:
{ "status": "enabled" }Если
statusявляетсяdisabled, разрешите маркеры ARM с помощью следующей команды:az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabledИсходный код задания доступен на сайте GitHub. Выполните следующую команду, чтобы клонировать репозиторий и создать образ контейнера в облаке:
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" \ --mi-user-assigned "$IDENTITY_ID" \ --registry-identity "$IDENTITY_ID" \ --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 команда автоматически настраивает проверку подлинности. --mi-user-assignedИдентификатор ресурса управляемого удостоверения, назначенного пользователем, который нужно назначить заданию. --registry-identityИдентификатор ресурса управляемого удостоверения для проверки подлинности с помощью сервера реестра вместо использования имени пользователя и пароля. Если это возможно, для идентификатора автоматически создается назначение роли acrpull.--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 --output 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