Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os trabalhos de Aplicativos de Contêiner do Azure permitem que você execute tarefas em contêineres que são executadas por uma duração finita e, em seguida, interrompa. Você pode disparar uma execução de trabalho manualmente, em um agendamento 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 controlados por eventos.
- Criar um ambiente de Aplicativos de Contêiner no qual implantar seus aplicativos de contêiner
- Criar uma fila do armazenamento do Azure para enviar mensagens ao aplicativo de contêiner
- Criar uma imagem de contêiner que executa um trabalho
- Implantar o trabalho no ambiente de Aplicativos de Contêiner
- Verificar se as mensagens da fila são processadas pelo aplicativo de contêiner
O trabalho que você cria inicia uma execução para cada mensagem enviada para a 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 determinada da fila.
- Para.
Importante
O dimensionador monitora o comprimento da fila para determinar quantos trabalhos iniciar. Para 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 assinatura ativa. Se não tiver uma, poderá criar uma gratuitamente.
- O CLI do Azure.
Para obter informações sobre os recursos que não são compatíveis com tarefas de Aplicativos de Contêiner, consulte restrições de tarefas.
Preparar o ambiente
Para entrar no Azure por meio da CLI do Azure, execute o comando a seguir e siga os prompts para concluir o processo de autenticação.
az loginVerifique se você está executando a versão mais recente da CLI do Azure por meio do
az upgradecomando.az upgradeInstale a versão mais recente da extensão da CLI dos Aplicativos de Contêiner.
az extension add --name containerapp --upgradeRegistre os namespaces
Microsoft.App,Microsoft.OperationalInsightseMicrosoft.Storagese eles ainda não estiverem registrados em sua assinatura 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 usadas ao longo deste artigo.
RESOURCE_GROUP="jobs-quickstart" LOCATION="northcentralus" ENVIRONMENT="env-jobs-quickstart" JOB_NAME="my-job"
Criar um ambiente dos Aplicativos de Contêiner
** O ambiente Container Apps atua como um limite de isolamento em torno de aplicativos e tarefas de contêiner, permitindo que compartilhem a mesma rede e se comuniquem entre si.
Crie um grupo de recursos usando o comando a seguir.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"Crie o ambiente de Aplicativos de Contêiner 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 do Armazenamento do Azure para receber mensagens. Nesta seção, você criará 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 a sua conta de armazenamento. Os nomes da conta de armazenamento devem ser exclusivos no Azure. Eles devem ter entre 3 e 24 caracteres e conter apenas números e letras minúsculas.Criar uma conta do Armazenamento do Azure.
az storage account create \ --name "$STORAGE_ACCOUNT_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Standard_LRS \ --kind StorageV2Se esse comando retornar o erro a seguir, verifique se você registrou o
Microsoft.Storagenamespace em sua assinatura do Azure.(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.Use este comando para registrar o namespace:
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 gerenciada atribuída ao usuário
Para evitar o uso de credenciais administrativas, baixe imagens de repositórios privados no Azure Container Registry. Use identidades gerenciadas para autenticação. Quando possível, use uma identidade gerenciada atribuída pelo usuário para efetuar pull de imagens.
Crie uma identidade gerenciada atribuída pelo usuário. Antes de executar os seguintes comandos, escolha um nome para sua identidade gerenciada e crie a seguinte variável:
IDENTITY="<YOUR_IDENTITY_NAME>"az identity create \ --name $IDENTITY \ --resource-group $RESOURCE_GROUPObtenha a ID do recurso da identidade:
IDENTITY_ID=$(az identity show \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Compilar e implantar o aplicativo
Para implantar o trabalho, primeiro crie uma imagem de contêiner para ele e faça o push do contêiner para um registro. Em seguida, você pode implantar o trabalho no ambiente de Container Apps.
Defina um nome para sua imagem de contêiner e registro:
CONTAINER_IMAGE_NAME="queue-reader-job:1.0" CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"Substitua
<CONTAINER_REGISTRY_NAME>por um nome exclusivo para o seu novo registro de contêiner Os nomes do registro de contêiner devem ser exclusivos no Azure. Eles devem ter entre 5 e 50 caracteres e conter apenas números e letras minúsculas.Criar um registro de contêiner:
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku BasicO registro de contêiner deve permitir o uso de tokens de audiência do Azure Resource Manager (ARM) para autenticação a fim de usar a identidade gerenciada para efetuar pull de imagens.
Use o seguinte comando para verificar se os tokens ARM têm permissão para acessar o registro de contêiner do Azure:
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"Se os tokens ARM forem permitidos, você verá a seguinte saída:
{ "status": "enabled" }Se o
statusfordisabled, permita tokens ARM usando o seguinte comando:az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabledO código-fonte desta amostra está disponível no GitHub. Execute o seguinte comando para clonar o repositório e criar a imagem de contêiner na nuvem:
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 de contêiner.
Crie uma tarefa no ambiente do 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 parâmetros de chave usados no comando anterior.
Parâmetro Descrição --replica-timeoutDuração máxima de execução de uma réplica. --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 no qual avaliar a regra de escala. --scale-rule-nameO nome da regra de escala. --scale-rule-typeO tipo de regra de escala a ser usada. --scale-rule-metadataOs metadados da regra de escala. --scale-rule-authA autenticação para a regra de escala. --secretsOs segredos a serem usados para o trabalho. --registry-serverO servidor do 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 para atribuir o trabalho. --registry-identityO ID de recurso de uma identidade gerenciada para autenticar com o servidor do registro em vez de utilizar um nome de usuário e senha. Se possível, é criada automaticamente uma atribuição de função acrpullpara a identidade.--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 trabalho serão acionadas. Para obter mais informações, consulte Definir regras de dimensionamento.
O trabalho controlado por eventos agora é criado no ambiente dos Aplicativos de Contêiner.
Verificar a implantação
O trabalho é configurado para avaliar a regra de escala a cada 60 segundos. Essa 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, você pode enviar algumas mensagens para a fila e confirmar se as execuções de 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 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 levar até um minuto inteiro para que a execução do trabalho seja iniciada. Repita o comando até ver a execução do trabalho e seu status for
Succeeded.Execute o comando a seguir para ver as mensagens registradas. Esses comandos exigem a extensão do Log Analytics, portanto, aceite 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 retornará um erro:BadArgumentError: The request had some invalid properties. Aguarde alguns minutos e tente novamente.
Dica
Está com problemas? Abra um problema no repositório do Aplicativos de Contêiner do Azure no GitHub.
Limpar os recursos
Quando terminar, execute o comando a seguir 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 houver 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