Share via


Tutorial: Implantar um trabalho orientado a eventos com Aplicativos de Contêiner do Azure

Os trabalhos das Aplicações de Contentor do Azure permitem-lhe executar tarefas em contentores que são executadas durante uma duração finita e saem. Você pode acionar uma execução de trabalho manualmente, em um cronograma ou com base em eventos. Os trabalhos são mais adequados para tarefas como processamento de dados, aprendizado de máquina ou qualquer cenário que exija recursos de computação efêmeros sem servidor.

Neste tutorial, você aprenderá a trabalhar com trabalhos orientados a eventos.

  • 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
  • Criar uma imagem de contêiner que executa um trabalho
  • Implantar o trabalho no ambiente de Aplicativos de Contêiner
  • Verifique se as mensagens da fila são processadas pelo aplicativo contêiner

O trabalho criado inicia uma execução para cada mensagem enviada para uma fila de Armazenamento do Azure. Cada execução de trabalho executa um contêiner que executa as seguintes etapas:

  1. Obtém uma mensagem da fila.
  2. Registra a mensagem nos logs de execução do trabalho.
  3. Exclui a mensagem da fila.
  4. Saídas.

Importante

O dimensionador monitora o comprimento da fila para determinar quantos trabalhos iniciar. Para obter um dimensionamento preciso, não exclua uma mensagem da fila até que a execução do trabalho termine de processá-la.

O código-fonte do trabalho executado neste tutorial está disponível em um repositório GitHub de Exemplos do Azure.

Pré-requisitos

Configurar

  1. 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
    
  2. Verifique se você está executando a versão mais recente da CLI por meio do comando upgrade.

    az upgrade
    
  3. Instale a versão mais recente da extensão CLI dos Aplicativos de Contêiner do Azure.

    az extension add --name containerapp --upgrade
    
  4. Registre os Microsoft.App namespaces e Microsoft.OperationalInsights se ainda não os tiver registrado em sua assinatura do Azure.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    
  5. Agora que a configuração da CLI do Azure está concluída, você pode definir as variáveis de ambiente usadas ao longo deste artigo.

    RESOURCE_GROUP="jobs-quickstart"
    LOCATION="northcentralus"
    ENVIRONMENT="env-jobs-quickstart"
    JOB_NAME="my-job"
    

Criar um ambiente de aplicativos de contêiner

O ambiente de Aplicativos de Contêiner do Azure atua como um limite seguro em torno de aplicativos e trabalhos de contêiner para que eles possam compartilhar a mesma rede e se comunicar uns com os outros.

  1. Crie um grupo de recursos ao utilizar o comando seguinte.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Crie o ambiente Container Apps usando o comando a seguir.

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

Configurar uma fila de armazenamento

O trabalho usa uma fila de Armazenamento do Azure para receber mensagens. Nesta seção, você cria uma conta de armazenamento e uma fila.

  1. Defina um nome para sua conta de armazenamento.

    STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
    QUEUE_NAME="myqueue"
    

    Substitua <STORAGE_ACCOUNT_NAME> por um nome exclusivo para sua 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.

  2. Criar uma conta de Armazenamento do Azure.

    az storage account create \
        --name "$STORAGE_ACCOUNT_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Standard_LRS \
        --kind StorageV2
    
  3. Salve a cadeia de conexão da fila em uma variável.

    QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
    
  4. Crie a fila de mensagens.

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

Criar e implantar o trabalho

Para implantar o trabalho, você deve primeiro criar uma imagem de contêiner para o trabalho e enviá-la por push para um registro. Em seguida, você pode implantar o trabalho no ambiente de aplicativos de contêiner.

  1. Defina um nome para a imagem do contêiner e o registro.

    CONTAINER_IMAGE_NAME="queue-reader-job:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    Substitua <CONTAINER_REGISTRY_NAME> por um nome exclusivo para seu registro de contêiner. Os nomes do Registro de contêiner devem ser exclusivos no Azure e ter de 5 a 50 caracteres de comprimento, contendo apenas números e letras minúsculas.

  2. Crie um registro de contêiner.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. O código-fonte do trabalho está disponível no GitHub. Execute o seguinte comando para clonar o repositório e construir a imagem do contêiner na nuvem usando o az acr build comando.

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
    

    A imagem agora está disponível no registro do contêiner.

  4. Crie um trabalho no ambiente Container Apps.

    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" \
        --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
    

    A tabela a seguir descreve os principais parâmetros usados no comando.

    Parâmetro Description
    --replica-timeout A duração máxima que uma réplica pode executar.
    --min-executions O número mínimo de execuções de trabalho a serem executadas por intervalo de sondagem.
    --max-executions O número máximo de execuções de trabalho a serem executadas por intervalo de sondagem.
    --polling-interval O intervalo de sondagem para avaliar a regra da escala.
    --scale-rule-name O nome da regra de escala.
    --scale-rule-type O tipo de regra de escala a ser usada.
    --scale-rule-metadata Os metadados para a regra de escala.
    --scale-rule-auth A autenticação para a regra de escala.
    --secrets Os segredos a usar para o trabalho.
    --registry-server O servidor de registro de contêiner a ser usado para o trabalho. Para um Registro de Contêiner do Azure, o comando configura automaticamente a autenticação.
    --env-vars As variáveis de ambiente a serem usadas para o trabalho.

    A configuração da regra de escala define a origem do evento a ser monitorada. Ele é avaliado em cada intervalo de sondagem e determina quantas execuções de trabalho devem ser acionadas. Para saber mais, consulte Definir regras de dimensionamento.

O trabalho controlado por eventos agora é criado no ambiente Container Apps.

Verificar a implementação

O trabalho é configurado para avaliar a regra de escala a cada 60 segundos, que verifica o número de mensagens na fila. Para cada período de avaliação, ele inicia uma nova execução de trabalho para cada mensagem na fila, até um máximo de 10 execuções.

Para verificar se o trabalho foi configurado corretamente, você pode enviar algumas mensagens para a fila, confirmar se as execuções do trabalho foram iniciadas e se as mensagens são registradas nos logs de execução do trabalho.

  1. Envie uma mensagem para a fila.

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. Listar as execuções de um trabalho.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output json
    

    Como o trabalho é configurado para avaliar a regra de escala a cada 60 segundos, pode levar até um minuto completo para que a execução do trabalho seja iniciada. Repita o comando até ver a execução do trabalho e seu status é Succeeded.

  3. Execute os seguintes comandos para ver as mensagens registradas. Esses comandos exigem a extensão de análise de log, portanto, aceite o prompt para instalar a extensão quando solicitado.

    LOG_ANALYTICS_WORKSPACE_ID=`az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out 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"
    

    Até que a ContainerAppConsoleLogs_CL tabela esteja pronta, o comando retorna um erro: BadArgumentError: The request had some invalid properties. Aguarde alguns minutos e tente novamente.

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

Próximos passos