Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Задания приложений контейнеров Azure позволяют выполнять контейнерные задачи, которые выполняются в течение ограниченной длительности и выхода. Выполнение задания можно активировать вручную, по расписанию или на основе событий. Задания лучше всего подходят для таких задач, как обработка данных, машинное обучение, очистка ресурсов или любой сценарий, требующий бессерверных временных вычислительных ресурсов.
В этом руководстве описано, как работать с заданиями на основе событий.
- Создание среды Контейнеров приложений развертывания приложений-контейнеров
- Создание очереди службы хранилища Azure для отправки сообщений в приложение-контейнер
- Создание образа контейнера, выполняющего задание
- Развертывание задания в среде "Приложения контейнеров"
- Проверка обработки сообщений очереди приложением-контейнером
Создаваемое задание запускает выполнение для каждого сообщения, отправленного в очередь служба хранилища Azure. Каждое выполнение задания запускает контейнер, выполняющий следующие действия:
- Возвращает одно сообщение из очереди.
- Записывает сообщение в журналы выполнения задания.
- Удаляет сообщение из очереди.
- Выходы.
Внимание
Масштабировщик отслеживает длину очереди, чтобы определить, сколько заданий нужно запустить. Для точного масштабирования не удаляйте сообщение из очереди, пока выполнение задания не завершит обработку.
Исходный код для задания, выполняемого в этом руководстве, доступен в репозитории GitHub примеров Azure.
Необходимые компоненты
- Учетная запись 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_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Если эта команда возвращает ошибку:
(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.Убедитесь, что вы зарегистрировали
Microsoft.Storageпространство имен в подписке Azure.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"
Создание управляемого удостоверения, назначаемого пользователем
Чтобы избежать использования учетных данных администратора, извлеките образы из частных репозиториев в Microsoft Реестр контейнеров Azure с помощью управляемых удостоверений для проверки подлинности. По возможности используйте управляемое удостоверение, назначаемое пользователем, для извлечения изображений.
Создайте управляемое удостоверение, назначаемое пользователем. Перед выполнением следующих команд выберите имя управляемого удостоверения и замените
\<PLACEHOLDER\>его именем.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_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 (ACR).
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команды.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