Share via


Tutorial: Implantar um aplicativo de processamento em segundo plano com Aplicativos de Contêiner do Azure

O uso de Aplicativos de Contêiner do Azure permite que você implante aplicativos sem exigir a exposição de pontos de extremidade públicos. Usando regras de escala de Aplicativos de Contêiner, o aplicativo pode expandir e entrar com base no comprimento da fila do Armazenamento do Azure. Quando não há mensagens na fila, o aplicativo contêiner é dimensionado para zero.

Sabe como:

  • Criar um ambiente de aplicativos de contêiner para implantar seus aplicativos de contêiner
  • Criar uma Fila de Armazenamento do Azure para enviar mensagens para o aplicativo de contêiner
  • Implantar seu aplicativo de processamento em segundo plano como um aplicativo de contêiner
  • Verifique se as mensagens da fila são processadas pelo aplicativo contêiner

Configurar

Para entrar no Azure a partir da CLI, execute o seguinte comando e siga os prompts para concluir o processo de autenticação.

az login

Para garantir que você esteja executando a versão mais recente da CLI, execute o comando upgrade.

az upgrade

Em seguida, instale ou atualize a extensão Aplicativos de Contêiner do Azure para a CLI.

az extension add --name containerapp --upgrade

Agora que a extensão ou módulo atual está instalado, registre os Microsoft.App namespaces e Microsoft.OperationalInsights .

Nota

Os recursos dos Aplicativos de Contêiner do Azure migraram do Microsoft.Web namespace para o Microsoft.App namespace. Consulte Migração de namespace de Microsoft.Web para Microsoft.App em março de 2022 para obter mais detalhes.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Definir variáveis de ambiente

Defina as seguintes variáveis de ambiente. Substitua <PLACEHOLDERS> pelos seus valores:

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

Criar um grupo de recursos do Azure

Crie um grupo de recursos para organizar os serviços relacionados à implantação do seu aplicativo de contêiner.

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

Criar um ambiente

Um ambiente em Aplicativos de Contêiner do Azure cria um limite seguro em torno de um grupo de aplicativos de contêiner. Os aplicativos de contêiner implantados no mesmo ambiente são implantados na mesma rede virtual e gravam logs no mesmo espaço de trabalho do Log Analytics.

Para criar o ambiente, execute o seguinte comando:

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

Configurar uma fila de armazenamento

Comece definindo um nome para a conta de armazenamento. Os nomes de conta de armazenamento devem ser exclusivos no Azure e ter de 3 a 24 caracteres contendo apenas números e letras minúsculas.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

Criar uma conta de Armazenamento do Azure.

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

Em seguida, obtenha a cadeia de conexão para a fila.

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

Agora você pode criar a fila de mensagens.

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

Finalmente, você pode enviar uma mensagem para a fila.

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

Implantar o aplicativo em segundo plano

Crie um arquivo chamado queue.json e cole o seguinte código de configuração no arquivo.

{
    "$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"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }]
}

Agora você pode criar e implantar seu aplicativo de contêiner.

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

Este comando implanta o aplicativo de demonstração a partir da imagem de contêiner público chamada mcr.microsoft.com/azuredocs/containerapps-queuereader e define segredos e variáveis de ambientes usados pelo aplicativo.

O aplicativo é dimensionado para 10 réplicas com base no comprimento da fila, conforme definido na scale seção do modelo ARM.

Verificar o resultado

O aplicativo contêiner é executado como um processo em segundo plano. À medida que as mensagens chegam da Fila de Armazenamento do Azure, o aplicativo cria entradas de log na Análise de log. Você deve aguardar alguns minutos para que a análise chegue pela primeira vez antes de poder consultar os dados registrados.

Execute o seguinte comando para ver as mensagens registradas. Este comando requer a extensão de análise de log, portanto, aceite o prompt para instalar a extensão quando solicitado.

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

Gorjeta

Tem problemas? Informe-nos no GitHub abrindo um problema no repositório de Aplicativos de Contêiner do Azure.

Clean up resources (Limpar recursos)

Quando terminar, execute o seguinte comando para excluir o grupo de recursos que contém os recursos dos Aplicativos de Contêiner.

Atenção

O comando a seguir exclui o grupo de recursos especificado e todos os recursos contidos nele. Se existirem recursos fora do escopo deste tutorial no grupo de recursos especificado, eles também serão excluídos.

az group delete \
  --resource-group $RESOURCE_GROUP