Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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, 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.
- 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:
- Obtém uma mensagem da fila.
- Registra a mensagem nos logs de execução do trabalho.
- Exclui a mensagem da fila.
- 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
- 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 de conta de armazenamento devem ser exclusivos no Azure e ter de 3 a 24 caracteres contendo 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 retornar o erro:
(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.Certifique-se de ter registrado o
Microsoft.Storagenamespace em sua assinatura do Azure.az provider register --namespace Microsoft.StorageSalve 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)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 Registro de Contêiner do Microsoft Azure usando identidades gerenciadas 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 comandos a seguir, escolha um nome para sua identidade gerenciada e substitua o
\<PLACEHOLDER\>pelo nome.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 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.
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.Crie um registro de contêiner.
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 comando a seguir para verificar se os tokens ARM têm permissão para acessar seu Registro de Contêiner do Azure (ACR).
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"Se os tokens ARM forem permitidos, o comando produzirá o seguinte.
{ "status": "enabled" }Se for ,
statusdisabledpermita tokens ARM com 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 contêiner na nuvem usando o
az acr buildcomando.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 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" \ --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 a seguir descreve os principais parâmetros usados no comando.
Parâmetro Description --replica-timeoutA duração máxima que uma réplica pode executar. --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 execuções de trabalho a serem executadas por intervalo 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 a usar para o trabalho. --registry-serverO 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. --mi-user-assignedA ID do recurso da identidade gerenciada atribuída pelo usuário a ser atribuída ao trabalho. --registry-identityA ID de recurso de uma identidade gerenciada para autenticar com o servidor de registro em vez de usar um nome de usuário e senha. Se possível, uma atribuição de função 'acrpull' é criada para a identidade automaticamente. --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. 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.
Envie uma mensagem para a fila.
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"Listar as execuções de um trabalho.
az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --output jsonComo 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.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 --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
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