Share via


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

Os Aplicativos de Contêiner do Azure permitem implantar aplicativos sem precisar expor pontos de extremidade públicos. Usando as regras de escala dos Aplicativos de Contêiner, o aplicativo pode escalar e reduzir horizontalmente com base no comprimento da fila do Armazenamento do Microsoft Azure. Quando não há mensagens na fila, o aplicativo de contêiner é reduzido horizontalmente para zero.

Você aprenderá como:

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

Instalação

Para entrar no Azure usando a CLIl, execute o comando a seguir 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 de atualização.

az upgrade

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

az extension add --name containerapp --upgrade

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

Observação

Os recursos dos Aplicativos de Contêiner do Azure migraram do namespace Microsoft.Web para o namespace Microsoft.App. Consulte a 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 variáveis de ambiente a seguir. Substitua os <espaços reservados> 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 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 um grupo de aplicativos de contêiner. Os Aplicativos de Contêiner implantados no mesmo ambiente são implantados na mesma rede virtual e registram 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 precisam ser exclusivos no Azure, ter de 3 a 24 caracteres de comprimento e ter apenas números e letras minúsculas.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

Criar uma conta do 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 da 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, é possível 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 código de configuração a seguir nele.

{
    "$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 é possível 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 implementa o aplicativo de demonstração a partir da imagem de contêiner pública mcr.microsoft.com/azuredocs/containerapps-queuereader e define os segredos e as variáveis ​​de ambiente usados ​​pelo aplicativo.

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

Verifique o resultado

O aplicativo de contêiner é executado como um processo em segundo plano. À medida que as mensagens chegam da Fila do Armazenamento do Microsoft Azure, o aplicativo cria entradas de log no Log Analytics. Você precisa aguardar alguns minutos para que a análise chegue pela primeira vez e você consiga consultar os dados registrados.

Execute o comando a seguir para ver as mensagens registradas. Este comando requer a extensão do Log Analytics, portanto, aceite o prompt de instalaçã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

Dica

Está enfrentando problemas? Deixe-nos saber sobre GitHub abrindo um problema no repositório dos Aplicativos de Contêiner do Azure.

Limpar os recursos

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

Cuidado

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