Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os jobs Azure Container Apps permitem-lhe executar tarefas containerizadas que duram um período finito e depois param. 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, limpeza de recursos 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.
- Crie um ambiente de Aplicações Container para implementar as suas aplicações container
- Crie uma fila de armazenamento do Azure para enviar mensagens à aplicação de contentores
- Criar uma imagem de contêiner que executa um trabalho
- Implantar a tarefa no ambiente de Aplicativos de Contêiner
- Verifique se as mensagens da fila são processadas pelo aplicativo contêiner
O trabalho que crias 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:
- Obtém uma mensagem da fila.
- Registra a mensagem nos logs de execução do trabalho.
- Exclui a mensagem da fila.
- Interrompe.
Importante
O dimensionador monitora o comprimento da fila para determinar quantos trabalhos iniciar. Para uma escalabilidade precisa, não apague 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
- Uma conta do Azure com uma subscrição ativa. Se não tiver uma, pode criar uma gratuitamente.
- CLI do Azure.
Para informações sobre funcionalidades que os jobs das Aplicações Container não suportam, consulte Restrições de Jobs.
Preparar o ambiente
Para iniciar sessão no Azure a partir da CLI do Azure, execute o seguinte comando e siga os prompts para completar o processo de autenticação.
az loginCertifique-se de que está a executar a versão mais recente da CLI do Azure através do
az upgradecomando.az upgradeInstale a versão mais recente da extensão Container Apps CLI.
az extension add --name containerapp --upgradeRegiste os
Microsoft.Appnamespaces ,Microsoft.OperationalInsights, eMicrosoft.Storagese ainda não estiverem registados na tua subscrição do Azure.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.StorageDefina as variáveis de ambiente utilizadas 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 Container Apps atua como uma barreira de isolamento para aplicações container e jobs, permitindo que partilhem a mesma rede e comuniquem entre si.
Crie um grupo de recursos usando o comando a seguir.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"Crie o ambiente Container Apps usando o seguinte comando.
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.
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 das contas de armazenamento devem ser únicos dentro do Azure. Devem ter entre 3 e 24 caracteres e conter apenas números e letras minúsculas.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 StorageV2Se este comando devolver o seguinte erro, certifique-se de que registou o
Microsoft.Storagenamespace na sua subscrição Azure.(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.Use este comando para registar o namespace:
az provider register --namespace Microsoft.StorageGuardar a string de ligação da fila numa variável:
QUEUE_CONNECTION_STRING=$(az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv)Crie a fila de mensagens:
az storage queue create \ --name "$QUEUE_NAME" \ --account-name "$STORAGE_ACCOUNT_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Criar uma identidade gerida atribuída pelo utilizador
Para evitar o uso de credenciais administrativas, extraia imagens de repositórios privados no Azure Container Registry. Use identidades geridas para autenticação. Sempre que possível, use uma identidade gerenciada atribuída pelo usuário para extrair imagens.
Crie uma identidade gerida atribuída pelo utilizador. Antes de executar os seguintes comandos, escolha um nome para a sua identidade gerida e crie a seguinte variável:
IDENTITY="<YOUR_IDENTITY_NAME>"az identity create \ --name $IDENTITY \ --resource-group $RESOURCE_GROUPObtenha o ID de recurso da identidade:
IDENTITY_ID=$(az identity show \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Criar e implantar a tarefa
Para implementar a tarefa, deve primeiro construir uma imagem de contentor e carregá-la para um registo. Pode então implementar o trabalho no ambiente Container Apps.
Defina um nome para a imagem do seu contentor e para o registo:
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 dos registos de contentores devem ser únicos dentro do Azure. Devem ter entre 5 e 50 caracteres e conter apenas números e letras minúsculas.Crie um registo de contentores:
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku BasicSeu registro de contêiner deve permitir tokens de audiência do Azure Resource Manager (ARM) para autenticação para usar a identidade gerenciada para extrair imagens.
Use o seguinte comando para verificar se os tokens ARM têm permissão para aceder ao seu registo de contentores Azure:
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"Se os tokens ARM forem permitidos, verá a seguinte saída:
{ "status": "enabled" }Se for
statusdisabled, permitam tokens ARM usando o seguinte comando:az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabledO código-fonte do trabalho está disponível no GitHub. Execute o seguinte comando para clonar o repositório e construir a imagem do contentor na cloud:
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.
Crie um emprego 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" \ --mi-user-assigned "$IDENTITY_ID" \ --registry-identity "$IDENTITY_ID" \ --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"A tabela seguinte descreve os parâmetros-chave usados no comando anterior.
Parâmetro Descrição --replica-timeoutA duração máxima que uma réplica pode funcionar. --min-executionsO número mínimo de execuções de trabalho a serem executadas por intervalo de sondagem. --max-executionsO número máximo de tarefas a serem executadas por período de sondagem. --polling-intervalO intervalo de sondagem para avaliar a regra da escala. --scale-rule-nameO nome da regra de escala. --scale-rule-typeO tipo de regra de escala a ser usada. --scale-rule-metadataOs metadados para a regra de escala. --scale-rule-authA autenticação para a regra de escala. --secretsOs segredos para utilizar no trabalho. --registry-serverO servidor de registro de contêiner a ser usado para o trabalho. Para um registo de contentores Azure, o comando configura automaticamente a autenticação. --mi-user-assignedA ID do recurso da identidade gerenciada atribuída pelo usuário a ser atribuída ao trabalho. --registry-identityO identificador de recurso de uma identidade gerida para autenticar no servidor de registro em vez de usar um nome de utilizador e senha. Se possível, é criada automaticamente uma atribuição de função para a identidade acrpull.--env-varsAs 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. É avaliado em cada intervalo de sondagem e determina quantas execuções de tarefas devem ser acionadas. Para mais informações, veja Definir regras de escalabilidade.
O trabalho controlado por eventos agora é criado no ambiente Container Apps.
Verificar a implementação
O trabalho está configurado para avaliar a regra da escala a cada 60 segundos. Esta avaliação 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 está configurado corretamente, pode enviar algumas mensagens para a fila e confirmar que as execuções do trabalho foram iniciadas e que as mensagens estão registadas nos registos de execução do trabalho.
Envie uma mensagem para a fila:
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"Liste as execuções de uma tarefa.
az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --output jsonComo o trabalho está configurado para avaliar a regra de escala a cada 60 segundos, pode demorar até um minuto inteiro para a execução do trabalho começar. Repita o comando até ver a execução do trabalho e seu status é
Succeeded.Execute os seguintes comandos para ver as mensagens registradas. Estes comandos requerem a extensão Log analytics, por isso aceita o prompt para instalar a extensão.
LOG_ANALYTICS_WORKSPACE_ID=$(az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --output 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_CLtabela esteja pronta, o comando retorna um erro:BadArgumentError: The request had some invalid properties. Aguarde alguns minutos e tente novamente.
Gorjeta
Está a ter problemas? Informe-nos no GitHub abrindo um problema no repositório de Aplicativos de Contêiner do Azure.
Limpar recursos
Quando terminares, executa o seguinte comando para eliminar o grupo de recursos que contém os recursos das Apps do Container.
Atenção
O comando seguinte elimina o grupo de recursos especificado e todos os recursos nele contidos. Se houver recursos fora do âmbito deste tutorial no grupo de recursos especificado, também são eliminados.
az group delete \
--resource-group $RESOURCE_GROUP