Partilhar via


Implante aplicativos em nós de computação com pacotes de aplicativos em lote

Os pacotes de aplicativos podem simplificar o código em sua solução de Lote do Azure e facilitar o gerenciamento dos aplicativos executados por suas tarefas. Com pacotes de aplicativos, você pode carregar e gerenciar várias versões dos aplicativos que suas tarefas executam, incluindo seus arquivos de suporte. Em seguida, você pode implantar automaticamente um ou mais desses aplicativos nos nós de computação em seu pool.

As APIs para criar e gerir pacotes de aplicações fazem parte da biblioteca Batch Management .NET. As APIs para instalar pacotes de aplicações num nó de computação fazem parte da biblioteca Batch .NET. Recursos comparáveis estão nas APIs em lote disponíveis para outras linguagens de programação.

Este artigo explica como carregar e gerenciar pacotes de aplicativos no portal do Azure. Mostra também como instalá-los nos nós de computação de um pool com a biblioteca Batch .NET.

Requisitos do pacote de aplicativos

Para usar pacotes de aplicativos, você precisa vincular uma conta de Armazenamento do Azure à sua conta de lote.

Há restrições sobre o número de aplicativos e pacotes de aplicativos em uma conta Batch e sobre o tamanho máximo do pacote de aplicativos. Para obter mais informações, consulte Cotas e limites do serviço Batch.

Observação

Os pools de lotes criados antes de 5 de julho de 2017 não oferecem suporte a pacotes de aplicativos (a menos que tenham sido criados após 10 de março de 2016 usando a Configuração de Serviços de Nuvem). O recurso de pacotes de aplicativos descrito aqui substitui o recurso Batch Apps disponível em versões anteriores do serviço.

Compreender aplicativos e pacotes de aplicativos

No Lote do Azure, um aplicativo refere-se a um conjunto de binários versionados que podem ser baixados automaticamente para os nós de computação em seu pool. Um aplicativo contém um ou mais pacotes de aplicativo, que representam versões diferentes do aplicativo.

Cada pacote de aplicativo é um arquivo .zip que contém os binários do aplicativo e todos os arquivos de suporte. Apenas o formato .zip é suportado.

Diagrama que mostra uma visão de alto nível de aplicativos e pacotes de aplicativos.

Você pode especificar pacotes de aplicativos no nível do pool ou da tarefa.

  • Os pacotes de aplicações do pool são implementados em cada nó do pool. As aplicações são implantadas quando um nó se junta a um pool e quando é reiniciado ou reimaginado.

    Os pacotes de aplicações de pool são apropriados quando todos os nós de um pool executam as tarefas de um determinado trabalho. Você pode especificar um ou mais pacotes de aplicativos para implantar ao criar um pool. Você também pode adicionar ou atualizar os pacotes de um pool existente. Para instalar um novo pacote em um pool existente, você deve reiniciar seus nós.

  • Os pacotes de aplicativos de tarefas são implantados somente em um nó de computação agendado para executar uma tarefa, imediatamente antes de executar a linha de comando da tarefa. Se o pacote de aplicativo especificado e a versão já estiverem no nó, ele não será reimplantado e o pacote existente será usado.

    Os pacotes de aplicativos de tarefas são úteis em ambientes de pool compartilhado, onde trabalhos diferentes são executados em um pool e o pool não é excluído quando um trabalho é concluído. Se seu trabalho tiver menos tarefas do que nós no pool, os pacotes de aplicativos de tarefas poderão minimizar a transferência de dados, já que seu aplicativo será implantado apenas nos nós que executam tarefas.

    Outros cenários que podem se beneficiar de pacotes de aplicativos de tarefas são trabalhos que executam um aplicativo grande, mas para apenas algumas tarefas. Por exemplo, os aplicativos de tarefas podem ser úteis para um estágio de pré-processamento pesado ou uma tarefa de mesclagem.

Com pacotes de aplicativos, a tarefa inicial do pool não precisa especificar uma longa lista de arquivos de recursos individuais para instalar nos nós. Você não precisa gerenciar manualmente várias versões de seus arquivos de aplicativo no Armazenamento do Azure ou em seus nós. E você não precisa se preocupar em gerar URLs SAS para fornecer acesso aos arquivos em sua conta de Armazenamento do Azure. O Batch funciona em segundo plano com o Armazenamento do Azure para armazenar pacotes de aplicativos e implantá-los em nós de computação.

Observação

O tamanho total de uma tarefa inicial deve ser menor ou igual a 32.768 caracteres, incluindo arquivos de recursos e variáveis de ambiente. Se sua tarefa inicial exceder esse limite, usar pacotes de aplicativos é outra opção. Você também pode criar um arquivo de .zip contendo seus arquivos de recurso, carregar o arquivo como um blob no Armazenamento do Azure e descompactá-lo da linha de comando da sua tarefa inicial.

Carregue e gerencie aplicativos

Você pode usar o portal do Azure ou as APIs de Gerenciamento de Lote para gerenciar os pacotes de aplicativos em sua conta de Lote. As seções a seguir explicam como vincular uma conta de armazenamento, você aprenderá a adicionar e gerenciar aplicativos e pacotes de aplicativos no portal do Azure.

Observação

Embora você possa definir valores de aplicativo no recurso Microsoft.Batch/batchAccounts de um modelo ARM, atualmente não é possível usar um modelo ARM para carregar pacotes de aplicativos para usar em sua conta Batch. Você deve carregá-los para sua conta de armazenamento vinculada conforme descrito em Adicionar um novo aplicativo.

Para usar pacotes de aplicativos, você deve vincular uma conta de Armazenamento do Azure à sua conta de lote. O serviço Batch usa a conta de armazenamento associada para armazenar seus pacotes de aplicativos. Idealmente, você deve criar uma conta de armazenamento especificamente para uso com sua conta Batch.

Se você ainda não configurou uma conta de armazenamento, o portal do Azure exibirá um aviso na primeira vez que você selecionar Aplicativos no menu de navegação esquerdo da sua conta em lote. Para precisar vincular uma conta de armazenamento à sua conta do Batch:

  1. Selecione a janela Aviso que diz: "Nenhuma conta de armazenamento configurada para esta conta em lote".
  2. Em seguida, escolha Conta de armazenamento definida... na página seguinte.
  3. Escolha o link Selecione uma conta de armazenamento na seção Informações da conta de armazenamento .
  4. Selecione a conta de armazenamento que deseja usar com essa conta de lote na lista no painel Escolher conta de armazenamento .
  5. Em seguida, selecione Salvar no canto superior esquerdo da página.

Depois de vincular as duas contas, o Batch pode implantar automaticamente os pacotes armazenados na conta de armazenamento vinculada aos nós de computação.

Importante

Não é possível usar pacotes de aplicativos com contas de Armazenamento do Azure configuradas com regras de firewall ou com o namespace Hierárquico definido como Habilitado.

O serviço Batch usa o Armazenamento do Azure para armazenar seus pacotes de aplicativos como blobs de bloco. Você é cobrado normalmente pelos dados de blob em bloco, e o tamanho de cada pacote não pode exceder o tamanho máximo de blob em bloco. Para obter mais informações, consulte Metas de escalabilidade e desempenho para armazenamento de Blob. Para minimizar os custos, considere o tamanho e o número de seus pacotes de aplicativos e remova periodicamente os pacotes obsoletos.

Adicionar uma nova aplicação

Para criar um novo aplicativo, adicione um pacote de aplicativo e especifique uma ID de aplicativo exclusiva.

Na sua conta Batch, selecione Aplicações no menu de navegação esquerdo e, em seguida, selecione Adicionar.

Captura de ecrã do processo de criação de Nova aplicação no portal do Azure.

Insira as seguintes informações:

  • ID do aplicativo: o ID do seu novo aplicativo.
  • Versão": A versão do pacote de aplicativos que você está carregando.
  • Pacote do aplicativo: O arquivo .zip que contém os binários do aplicativo e os arquivos de suporte necessários para executar o aplicativo.

A ID e a Versão do Aplicativo inseridas devem seguir estes requisitos:

  • Nos nós do Windows, a identificação pode conter qualquer combinação de caracteres alfanuméricos, hífenes e sublinhados. Nos nós Linux, apenas caracteres alfanuméricos e sublinhados são permitidos.
  • Não pode conter mais de 64 caracteres.
  • Deve ser exclusivo dentro da conta do lote.
  • IDs preservam a distinção de maiúsculas e minúsculas, mas não diferenciam entre elas.

Quando estiver pronto, selecione Enviar. Depois que o arquivo de .zip for carregado em sua conta de Armazenamento do Azure, o portal exibirá uma notificação. Dependendo do tamanho do ficheiro que está a carregar e da velocidade da sua ligação de rede, este processo poderá demorar algum tempo.

Ver aplicações atuais

Para visualizar as aplicações na sua conta Batch, selecione Aplicações no menu de navegação esquerdo.

Captura de ecrã do item de menu Aplicações no portal do Azure.

Selecionar esta opção de menu abre a janela Aplicativos . Esta janela exibe o ID de cada aplicativo em sua conta e as seguintes propriedades:

  • Pacotes: O número de versões associadas a esta aplicação.
  • Versão padrão: se aplicável, a versão do aplicativo que é instalada se nenhuma versão for especificada durante a implantação do aplicativo.
  • Permitir atualizações: especifica se as atualizações e exclusões de pacotes são permitidas.

Para ver a estrutura de ficheiros do pacote do aplicativo em um nó de computação, navegue até a sua conta Batch no portal do Azure. Selecione Pools. Em seguida, selecione o pool que contém o nó de computação. Selecione o nó de computação no qual o pacote de aplicativos está instalado e abra a pasta de aplicativos .

Ver detalhes da candidatura

Para ver os detalhes de um aplicativo, selecione-o na janela Aplicativos . Você pode configurar seu aplicativo selecionando Configurações no menu de navegação à esquerda.

  • Permitir atualizações: indica se os pacotes de aplicativos podem ser atualizados ou excluídos. A predefinição é Sim. Se definido como Não, os pacotes de aplicativos existentes não podem ser atualizados ou excluídos, mas novas versões de pacotes de aplicativos ainda podem ser adicionadas.
  • Versão padrão: o pacote de aplicativo padrão a ser usado quando o aplicativo é implantado se nenhuma versão for especificada.
  • Nome para exibição: um nome amigável que sua solução em lote pode usar quando exibe informações sobre o aplicativo. Por exemplo, esse nome pode ser usado na interface do usuário de um serviço que você fornece aos seus clientes por meio do Batch.

Adicionar um novo pacote de aplicativo

Para adicionar uma versão do pacote de aplicativos para um aplicativo existente, selecione o aplicativo na página Aplicativos da sua conta Batch. Em seguida, selecione Adicionar.

Como fez para o novo aplicativo, especifique a versão do novo pacote, carregue o arquivo .zip no campo Pacote do aplicativo e selecione Enviar.

Atualizar ou excluir um pacote de aplicativo

Para atualizar ou excluir um pacote de aplicativo existente, selecione o aplicativo na página Aplicativos da sua conta Batch. Selecione as reticências na linha correspondente ao pacote de aplicações que pretende modificar. Em seguida, selecione a ação que deseja executar.

Captura de tela que mostra as opções de atualização e exclusão para pacotes de aplicativos no portal do Azure.

Se você selecionar Atualizar, poderá carregar um novo arquivo .zip. Este ficheiro substitui o ficheiro .zip anterior que enviou para essa versão.

Se você selecionar Excluir, será solicitado que confirme a exclusão dessa versão. Depois de selecionar OK, o Batch exclui o arquivo .zip da sua conta de Armazenamento do Azure. Se você excluir a versão padrão de um aplicativo, a configuração Versão padrão será removida para esse aplicativo.

Instalar aplicativos em nós de computação

Você aprendeu como gerenciar pacotes de aplicativos no portal do Azure. Agora você pode aprender como implantá-los em nós de computação e executá-los com tarefas em lote.

Instalar pacotes de aplicações de grupo

Para instalar um pacote de aplicativo em todos os nós de computação em um pool, especifique uma ou mais referências de pacote de aplicativo para o pool. Os pacotes de aplicações que especificar para um pool são instalados em cada nó de computação que é adicionado ao pool e em qualquer nó que for reiniciado ou reimaginado.

No Batch .NET, especifique um ou mais CloudPool.ApplicationPackageReferences ao criar um novo pool ou ao usar um pool existente. A classe ApplicationPackageReference especifica uma ID e uma versão do aplicativo a serem instaladas nos nós de computação de um pool.

// Create the unbound CloudPool
CloudPool myCloudPool =
    batchClient.PoolOperations.CreatePool(
        poolId: "myPool",
        targetDedicatedComputeNodes: 1,
        virtualMachineSize: "standard_d1_v2",
        VirtualMachineConfiguration: new VirtualMachineConfiguration(
            imageReference: new ImageReference(
                                publisher: "MicrosoftWindowsServer",
                                offer: "WindowsServer",
                                sku: "2019-datacenter-core",
                                version: "latest"),
            nodeAgentSkuId: "batch.node.windows amd64");

// Specify the application and version to install on the compute nodes
myCloudPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "litware",
        Version = "1.1001.2b" }
};

// Commit the pool so that it's created in the Batch service. As the nodes join
// the pool, the specified application package is installed on each.
await myCloudPool.CommitAsync();

Importante

Se a implantação de um pacote de aplicativo falhar, o serviço Batch marcará o nó como inutilizável e nenhuma tarefa será agendada para execução nesse nó. Se isso acontecer, reinicie o nó para recomeçar a implantação do pacote. A reinicialização do nó também permite o agendamento de tarefas novamente no nó.

Instalar pacotes de aplicativos de tarefas

Semelhante a um pool, você especifica referências de pacote de aplicativo para uma tarefa. Quando uma tarefa é agendada para ser executada em um nó, o pacote é baixado e extraído imediatamente antes da execução da linha de comando da tarefa. Se um pacote e uma versão especificados já estiverem instalados no nó, o pacote não será baixado e o pacote existente será usado.

Para instalar um pacote de aplicativo de tarefa, configure a propriedade CloudTask.ApplicationPackageReferences da tarefa:

CloudTask task =
    new CloudTask(
        "litwaretask001",
        "cmd /c %AZ_BATCH_APP_PACKAGE_LITWARE%\\litware.exe -args -here");

task.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference
    {
        ApplicationId = "litware",
        Version = "1.1001.2b"
    }
};

Execute as aplicações que estão instaladas

Os pacotes que você especifica para um pool ou tarefa são transferidos e extraídos para um diretório com nome dentro do AZ_BATCH_ROOT_DIR do nó. Batch também cria uma variável de ambiente que contém o caminho para o diretório nomeado. Suas linhas de comando de tarefa usam essa variável de ambiente ao fazer referência ao aplicativo no nó.

Nos nós do Windows, a variável está no seguinte formato:

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

Nos nós Linux, o formato é ligeiramente diferente. Pontos finais (.), hífenes (-) e sinais numéricos (#) são convertidos em sublinhados na variável ambiente. Além disso, o caso do ID da aplicação é preservado. Por exemplo:

Linux:
AZ_BATCH_APP_PACKAGE_applicationid_version

APPLICATIONID e version são valores que correspondem à versão do aplicativo e do pacote que você especificou para implantação. Por exemplo, se você especificar que a versão 2.7 do liquidificador de aplicativos deve ser instalada nos nós do Windows, suas linhas de comando de tarefa usarão essa variável de ambiente para acessar seus arquivos:

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

Nos nós Linux, especifique a variável de ambiente neste formato. Nivele os sinais de pontos (.), hífenes (-) e numéricos (#) para sublinhar e preservar o caso do ID do aplicativo:

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

Ao carregar um pacote de aplicativo, você pode especificar uma versão padrão para implantar em seus nós de computação. Se você especificou uma versão padrão para um aplicativo, poderá omitir o sufixo de versão ao fazer referência ao aplicativo. Você pode especificar a versão padrão do aplicativo no portal do Azure, na janela Aplicativos , conforme mostrado em Carregar e gerenciar aplicativos.

Por exemplo, se você definir "2.7" como a versão padrão para o liquidificador de aplicativos e suas tarefas fizerem referência à seguinte variável de ambiente, os nós do Windows usarão a versão 2.7:

AZ_BATCH_APP_PACKAGE_BLENDER

O trecho de código a seguir mostra uma linha de comando de tarefa de exemplo que inicia a versão padrão do aplicativo blender :

string taskId = "blendertask01";
string commandLine =
    @"cmd /c %AZ_BATCH_APP_PACKAGE_BLENDER%\blender.exe -args -here";
CloudTask blenderTask = new CloudTask(taskId, commandLine);

Sugestão

Para obter mais informações sobre as configurações do ambiente do nó de computação, consulte Configurações de ambiente para tarefas.

Atualizar os pacotes de aplicativos de um pool

Se um pool existente já tiver sido configurado com um pacote de aplicativo, você poderá especificar um novo pacote para o pool. Isto significa:

  • O serviço Batch instala o pacote recém-especificado em todos os novos nós que ingressam no pool e em qualquer nó existente que seja reinicializado ou recriado.
  • Os nós de computação que já estão no pool quando você atualiza as referências de pacote não instalam automaticamente o novo pacote de aplicativo. Estes nós de computação devem ser reinicializados ou reinstalados para receber o novo pacote.
  • Quando um novo pacote é implantado, as variáveis de ambiente criadas refletem as novas referências do pacote de aplicativo.

Neste exemplo, o pool existente tem a versão 2.7 da aplicação blender configurada como uma das suas CloudPool.ApplicationPackageReferences. Para atualizar os nós do pool com a versão 2.76b, especifique um novo ApplicationPackageReference com a nova versão e confirme a alteração.

string newVersion = "2.76b";
CloudPool boundPool = await batchClient.PoolOperations.GetPoolAsync("myPool");
boundPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "blender",
        Version = newVersion }
};
await boundPool.CommitAsync();

Agora que a nova versão foi configurada, o serviço Batch instala a versão 2.76b em qualquer novo nó que se junte ao pool. Para instalar o 2.76b nos nós que já estão no pool, reinicie-os ou crie uma nova imagem. Os nós reinicializados retêm arquivos de implantações de pacotes anteriores.

Listar os aplicativos em uma conta Batch

Você pode listar os aplicativos e seus pacotes em uma conta Batch usando o método ApplicationOperations.ListApplicationSummaries .

// List the applications and their application packages in the Batch account.
List<ApplicationSummary> applications = await batchClient.ApplicationOperations.ListApplicationSummaries().ToListAsync();
foreach (ApplicationSummary app in applications)
{
    Console.WriteLine("ID: {0} | Display Name: {1}", app.Id, app.DisplayName);

    foreach (string version in app.Versions)
    {
        Console.WriteLine("  {0}", version);
    }
}

Próximos passos