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

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

Узнайте следующие темы:

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

Настройка

Для начала войдите в Azure. Выполните приведенную ниже команду и следуйте инструкциям на экране, чтобы пройти процесс проверки подлинности.

az login

Затем установите расширение Контейнеров приложений Azure для CLI.

az extension add --name containerapp --upgrade

Теперь, когда установлено текущее расширение или модуль, зарегистрируйте Microsoft.App пространство имен.

Примечание.

Ресурсы Контейнеров приложений Azure перенесены из пространства имен Microsoft.Web в пространство имен Microsoft.App. Дополнительные сведения см. в статье о миграции пространства имен из Microsoft.Web в Microsoft.App в марте 2022 г..

az provider register --namespace Microsoft.App

Microsoft.OperationalInsights Зарегистрируйте поставщика для рабочей области Azure Monitor Log Analytics, если она не использовалась раньше.

az provider register --namespace Microsoft.OperationalInsights

Затем установите указанные ниже переменные среды.

RESOURCE_GROUP="my-container-apps"
LOCATION="canadacentral"
CONTAINERAPPS_ENVIRONMENT="my-environment"

Задав эти переменные, можно создать группу ресурсов для организации служб, связанных с новым приложением-контейнером.

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

Обновив интерфейс командной строки и сделав доступной новую группу ресурсов, можно создать среду Container Apps и развернуть приложение-контейнер.

Создать среду

Среда в Azure Container Apps создает безопасную границу вокруг группы приложений-контейнеров. Развертываемые в одной среде приложения-контейнеры развертываются в одной виртуальной сети и записывают журналы в одну рабочую область Log Analytics.


Отдельные приложения-контейнеры развертываются в среде Azure Container Apps. Чтобы создать среду, выполните следующую команду:

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

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

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

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

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

az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

Затем получите строку подключения для очереди.

QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --out json | tr -d '"'`

Теперь можно создать очередь сообщений.

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

Наконец, можно отправить сообщение в очередь.

az storage message put \
  --content "Hello Queue Reader App" \
  --queue-name "myqueue" \
  --connection-string $QUEUE_CONNECTION_STRING

Развертывание фонового приложения

Создайте файл с именем queue.json и вставьте в него следующий код конфигурации.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "defaultValue": "canadacentral",
            "type": "String"
        },
        "environment_name": {
            "type": "String"
        },
        "queueconnection": {
            "type": "secureString"
        }
    },
    "variables": {},
    "resources": [
    {
        "name": "queuereader",
        "type": "Microsoft.App/containerApps",
        "apiVersion": "2022-03-01",
        "kind": "containerapp",
        "location": "[parameters('location')]",
        "properties": {
            "managedEnvironmentId": "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]",
            "configuration": {
                "activeRevisionsMode": "single",
                "secrets": [
                {
                    "name": "queueconnection",
                    "value": "[parameters('queueconnection')]"
                }]
            },
            "template": {
                "containers": [
                    {
                        "image": "mcr.microsoft.com/azuredocs/containerapps-queuereader",
                        "name": "queuereader",
                        "env": [
                            {
                                "name": "QueueName",
                                "value": "myqueue"
                            },
                            {
                                "name": "QueueConnectionString",
                                "secretRef": "queueconnection"
                            }
                        ]
                    }
                ],
                "scale": {
                    "minReplicas": 1,
                    "maxReplicas": 10,
                    "rules": [
                        {
                            "name": "myqueuerule",
                            "azureQueue": {
                                "queueName": "myqueue",
                                "queueLength": 100,
                                "auth": [
                                    {
                                        "secretRef": "queueconnection",
                                        "triggerParameter": "connection"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }]
}

Теперь вы можете создать и развернуть приложение-контейнер.

az deployment group create --resource-group "$RESOURCE_GROUP" \
  --template-file ./queue.json \
  --parameters \
    environment_name="$CONTAINERAPPS_ENVIRONMENT" \
    queueconnection="$QUEUE_CONNECTION_STRING" \
    location="$LOCATION"

Эта команда развертывает демонстрационное приложение из образа общедоступного контейнера mcr.microsoft.com/azuredocs/containerapps-queuereader и задает секреты и переменные среды, используемые приложением.

Приложение масштабируется до 10 реплика на основе длины очереди, как определено в scale разделе шаблона ARM.

Проверьте результат.

Приложение-контейнер выполняется в качестве фонового процесса. По мере поступления сообщений из очереди службы хранилища Azure приложение создает записи журнала в Log Analytics. Прежде чем вы сможете запросить зарегистрированные данные, необходимо подождать несколько минут.

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

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`

az monitor log-analytics query \
  --workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
  --analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'queuereader' and Log_s contains 'Message ID' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s | take 5" \
  --out table

Совет

Возникли проблемы? Сообщите о них в репозитории Azure Container Apps на GitHub.

Очистка ресурсов

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

Внимание

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

az group delete \
  --resource-group $RESOURCE_GROUP