Trabalhos nos Aplicativos de Contêiner do Azure

Os trabalhos dos Aplicativos de Contêiner do Azure permitem realizar tarefas em contêineres executadas por uma duração finita e encerrá-las. Você pode usar os trabalhos para executar tarefas como processamento de dados, aprendizado de máquina ou qualquer cenário em que o processamento sob demanda seja necessário.

Aplicativos e trabalhos de contêiner são executados no mesmo ambiente, permitindo que eles compartilhem funcionalidades como sistema de rede e registrar em log.

Comparar aplicativos e trabalhos de contêiner

Há dois tipos de recursos de computação nos Aplicativos de Contêiner do Azure: aplicativos e trabalhos.

Os aplicativos são serviços executados continuamente. Se um contêiner em um aplicativo falhar, ele será reiniciado automaticamente. Entre os exemplos de aplicativos, há: APIs HTTP, aplicativos Web e serviços em segundo plano que processam continuamente a entrada.

Os trabalhos são tarefas iniciadas, são executados por uma duração finita e saem quando terminam. Geralmente, cada execução de um trabalho executa uma única unidade de trabalho. As execuções de trabalho começam manualmente, em um agendamento ou em resposta a eventos. Entre os exemplos de trabalhos, há: processos em lotes executados sob demanda e tarefas agendadas.

Cenários de exemplo

A tabela a seguir compara cenários comuns de aplicativos e trabalhos:

Contêiner Recurso de computação Observações
Um servidor HTTP que atende a solicitações de API e de conteúdo da Web Aplicativo Configure uma regra de escala HTTP.
Um processo que gera relatórios financeiros noturnos Trabalho Use o tipo de trabalho Agendar e configure uma expressão Cron.
Um serviço em execução contínua que processa mensagens de uma fila do Barramento de Serviço do Azure Aplicativo Configure uma regra de escala personalizada.
Um trabalho que processa uma única mensagem ou um pequeno lote de mensagens de uma fila do Azure e sai Trabalho Use o tipo de trabalho Event e configure uma regra de escala personalizada para disparar execuções de trabalho quando houver mensagens na fila.
Uma tarefa em segundo plano disparada sob demanda e encerrada quando concluída Trabalho Use o tipo de trabalho Manual e inicie execuções manual ou programaticamente usando uma API.
Um executor do GitHub Actions auto-hospedado ou agente do Azure Pipelines Trabalho Use o tipo de trabalho Event e configure uma regra de escala do GitHub Actions ou do Azure Pipelines.
Um aplicativo do Azure Functions Aplicativo Implante o Azure Functions em Aplicativos de Contêiner.
Um aplicativo controlado por eventos usando o SDK do Azure WebJobs Aplicativo Configure uma regra de escala para cada origem do evento.

Conceitos

Um ambiente de Aplicativos de Contêiner do Azure é um limite seguro envolvendo um ou mais aplicativos de contêiner e trabalhos. Os trabalhos envolvem alguns conceitos importantes:

  • Trabalho: define a configuração padrão usada para cada execução de trabalho. A configuração inclui a imagem de contêiner a ser usada, os recursos a serem alocados e o comando a ser executado.
  • Execução do trabalho: é uma única execução de um trabalho disparada manualmente conforme agendado ou em resposta a um evento.
  • Réplica de trabalho: uma execução de trabalho típica executa uma réplica definida pela configuração do trabalho. Em cenários avançados, uma execução de trabalho pode executar várias réplicas.

Visão geral de trabalhos de Aplicativos de Contêiner do Azure.

Tipos de gatilho de trabalho

O tipo de gatilho de um trabalho determina como o trabalho é iniciado. Os seguintes tipos de gatilho estão disponíveis:

  • Manual: trabalhos manuais são disparados sob demanda.
  • Agendamento: os trabalhos agendados são disparados em horários específicos e podem ser executados repetidamente.
  • Evento: os trabalhos orientados por eventos são disparados por eventos, como uma mensagem que chega em uma fila.

Trabalhos manuais

Trabalhos manuais são disparados sob demanda usando a CLI do Azure, o portal do Azure ou uma solicitação para a API do Azure Resource Manager.

Entre os exemplos de trabalhos manuais, há:

  • Tarefas de processamento único, como migrar dados de um sistema para outro.
  • Um site de comércio eletrônico executado como aplicativo de contêiner inicia uma execução de trabalho para processar o inventário quando um pedido é feito.

Para criar um trabalho manual, use o tipo de trabalho Manual.

Para criar um trabalho manual usando a CLI do Azure, use o comando az containerapp job create. O exemplo a seguir cria um trabalho manual chamado my-job em um grupo de recursos chamado my-resource-group, além de um ambiente de Aplicativos de Contêiner chamado my-environment:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Manual" \
    --replica-timeout 1800 \
    --image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \
    --cpu "0.25" --memory "0.5Gi"

A imagem mcr.microsoft.com/k8se/quickstart-jobs:latest é uma imagem pública de contêiner de exemplo que executa um trabalho que aguarda alguns segundos, imprime uma mensagem no console e, em seguida, sai. Para autenticar e usar uma imagem de contêiner privado, veja Contêineres.

O comando acima cria apenas o trabalho. Para iniciar uma execução de trabalho, confira Iniciar uma execução de trabalho sob demanda.

Trabalhos agendados

Para criar um trabalho agendado, use o tipo de trabalho Schedule.

Os trabalhos dos Aplicativos de Contêiner usam expressões cron para definir os agendamentos. Ele dá suporte ao formato de expressão cron padrão com cinco campos para minuto, hora, dia do mês, mês e dia da semana. A seguir, há dois exemplos de expressões cron:

Expression Descrição
*/5 * * * * Execução a cada 5 minutos.
0 */2 * * * Execução a cada duas horas.
0 0 * * * Execução todos os dias à meia-noite.
0 0 * * 0 Execução todos os domingos à meia-noite.
0 0 1 * * Execução no primeiro dia de cada mês à meia-noite.

As expressões Cron em trabalhos agendados são avaliadas em Tempo Universal Coordenado (UTC).

Para criar um trabalho agendado usando a CLI do Azure, use o comando az containerapp job create. O exemplo a seguir cria um trabalho agendado chamado my-job em um grupo de recursos chamado my-resource-group, além de um ambiente de Aplicativos de Contêiner chamado my-environment:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Schedule" \
    --replica-timeout 1800 \
    --image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \
    --cpu "0.25" --memory "0.5Gi" \
    --cron-expression "*/1 * * * *"

A imagem mcr.microsoft.com/k8se/quickstart-jobs:latest é uma imagem pública de contêiner de exemplo que executa um trabalho que aguarda alguns segundos, imprime uma mensagem no console e, em seguida, sai. Para autenticar e usar uma imagem de contêiner privado, veja Contêineres.

A expressão Cron */1 * * * * executa o trabalho a cada minuto.

Trabalhos orientado por eventos

Os trabalhos orientados por eventos são disparados por eventos de dimensionadores personalizados com suporte. Entre os exemplos de trabalhos orientados por evento, há:

  • Um trabalho que é executado quando uma nova mensagem é adicionada a uma fila como Barramento de Serviço do Azure, Kafka ou RabbitMQ.
  • Um executor do GitHub Actions auto-hospedado ou agente do Azure DevOps executado quando um novo trabalho é enfileirado em um fluxo de trabalho ou pipeline.

Aplicativos de contêiner e trabalhos orientados por eventos usam dimensionadores KEDA. Ambos avaliam regras de dimensionamento em um intervalo de sondagem para medir o volume de eventos de uma origem do evento, mas a maneira como usam os resultados é diferente.

Em um aplicativo, cada réplica processa continuamente eventos, e uma regra de dimensionamento determina o número de réplicas a serem executadas para atender à demanda. Em trabalhos orientados por eventos, cada execução de trabalho normalmente processa um único evento e uma regra de escala determina o número de execuções de trabalho.

Use os trabalhos quando cada evento exigir uma nova instância do contêiner com recursos dedicados ou precisar ser executado por um longo tempo. Os trabalhos orientados por eventos são conceitualmente semelhantes aos trabalhos de dimensionamento KEDA.

Para criar um trabalho orientado por eventos, use o tipo de trabalho Event.

Para criar um trabalho orientado por eventos usando a CLI do Azure, use o comando az containerapp job create. O exemplo a seguir cria um trabalho orientado por evento chamado my-job em um grupo de recursos chamado my-resource-group, além de um ambiente de Aplicativos de Contêiner chamado my-environment:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Event" \
    --replica-timeout 1800 \
    --image "docker.io/myuser/my-event-driven-job:latest" \
    --cpu "0.25" --memory "0.5Gi" \
    --min-executions "0" \
    --max-executions "10" \
    --scale-rule-name "queue" \
    --scale-rule-type "azure-queue" \
    --scale-rule-metadata "accountName=mystorage" "queueName=myqueue" "queueLength=1" \
    --scale-rule-auth "connection=connection-string-secret" \
    --secrets "connection-string-secret=<QUEUE_CONNECTION_STRING>"

O exemplo configura uma regra de escala de fila do Armazenamento do Azure.

Para obter um tutorial completo, confira Implantar um trabalho orientado por evento.

Iniciar uma execução de trabalho sob demanda

Em qualquer tipo de trabalho, você pode iniciar uma execução de trabalho sob demanda.

Para iniciar uma execução de trabalho usando a CLI do Azure, use o comando az containerapp job start. O exemplo a seguir inicia uma execução de um trabalho chamado my-job em um grupo de recursos chamado my-resource-group:

az containerapp job start --name "my-job" --resource-group "my-resource-group"

Ao iniciar uma execução de trabalho, você pode optar por substituir a configuração do trabalho. Por exemplo, você pode substituir uma variável de ambiente ou o comando de inicialização para executar o mesmo trabalho com entradas diferentes. A configuração substituída é usada apenas para a execução atual e não altera a configuração do trabalho.

Importante

Na substituição, toda a configuração do modelo do trabalho é substituída pela nova. A nova configuração deve incluir todas as configurações necessárias.

Para substituir a configuração do trabalho ao iniciar uma execução, use o comando az containerapp job start e passe um arquivo YAML contendo o modelo a ser usado na execução. O exemplo a seguir inicia uma execução de um trabalho chamado my-job em um grupo de recursos chamado my-resource-group.

Recupere a configuração atual do trabalho com o comando az containerapp job show e salve o modelo em um arquivo chamado my-job-template.yaml:

az containerapp job show --name "my-job" --resource-group "my-resource-group" --query "properties.template" --output yaml > my-job-template.yaml

A opção --query "properties.template" retorna apenas a configuração do modelo do trabalho.

Edite o arquivo my-job-template.yaml para substituir a configuração do trabalho. Por exemplo, para substituir as variáveis de ambiente, modifique a seção env:

containers:
- name: print-hello
  image: ubuntu
  resources:
    cpu: 1
    memory: 2Gi
  env:
  - name: MY_NAME
    value: Azure Container Apps jobs
  args:
  - /bin/bash
  - -c
  - echo "Hello, $MY_NAME!"

Inicie o trabalho usando o modelo:

az containerapp job start --name "my-job" --resource-group "my-resource-group" \
    --yaml my-job-template.yaml

Obter o histórico de execução de trabalho

Cada trabalho de Aplicativos de Contêiner mantém um histórico de execuções de trabalho recentes.

Para obter os status das execuções de trabalho usando a CLI do Azure, use o comando az containerapp job execution list. O exemplo a seguir retorna o status da execução mais recente de um trabalho chamado my-job em um grupo de recursos chamado my-resource-group:

az containerapp job execution list --name "my-job" --resource-group "my-resource-group"

O histórico de execução de trabalhos agendados e baseados em eventos é limitado às 100 execuções de trabalho mais recentes, bem-sucedidas e com falha.

Para listar todas as execuções de um trabalho ou obter uma saída detalhada de um trabalho, confira o provedor de logs configurado para seu ambiente de Aplicativos de Contêiner.

Configuração de trabalho avançada

Os trabalhos dos Aplicativos de Contêiner dão suporte a opções de configuração avançadas, como configurações de contêiner, repetições, tempos limite e paralelismo.

Configurações do contêiner

As configurações de contêiner definem os contêineres a serem executados em cada réplica de uma execução de trabalho. Elas incluem variáveis de ambiente, segredos e limites de recursos. Para obter mais informações, confira Contêineres. A execução de vários contêineres em um único trabalho é um cenário avançado. A maioria dos trabalhos executa um único contêiner.

Configurações do trabalho

A tabela a seguir inclui as configurações de trabalho que você pode definir:

Configuração Propriedade do Gerenciador de Recursos do Azure Parâmetro da CLI Descrição
Tipo de trabalho triggerType --trigger-type O tipo de trabalho. (Manual, Schedule ou Event)
Tempo limite da réplica replicaTimeout --replica-timeout O tempo máximo em segundos para aguardar a conclusão de uma réplica.
Intervalo de sondagem pollingInterval --polling-interval O tempo em segundos a aguardar entre a sondagem de eventos. O padrão é 30 segundos.
Limite de repetição de réplica replicaRetryLimit --replica-retry-limit O número máximo de vezes para repetir uma réplica com falha. Para que uma réplica falhe sem tentar novamente, defina o valor como 0.
Paralelismo parallelism --parallelism O número de réplicas a serem executadas por execução. Para a maioria dos trabalhos, defina o valor como 1.
Contagem de conclusão de réplica replicaCompletionCount --replica-completion-count O número de réplicas a serem concluídas com êxito para que a execução seja bem-sucedida. A maioria é igual ou menor que o paralelismo. Para a maioria dos trabalhos, defina o valor como 1.

Exemplo

O exemplo a seguir cria um trabalho com opções de configuração avançadas:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Schedule" \
    --replica-timeout 1800 --replica-retry-limit 3 --replica-completion-count 5 --parallelism 5 \
    --image "myregistry.azurecr.io/quickstart-jobs:latest" \
    --cpu "0.25" --memory "0.5Gi" \
    --command "/startup.sh" \
    --env-vars "MY_ENV_VAR=my-value" \
    --cron-expression "0 0 * * *"  \
    --registry-server "myregistry.azurecr.io" \
    --registry-username "myregistry" \
    --registry-password "myregistrypassword"

Restrições de trabalho

Não há suporte aos seguintes recursos:

  • Dapr
  • Entrada e recursos relacionados, como domínios personalizados e certificados SSL

Próximas etapas