Implantar aplicativos em nós de computação com pacotes de aplicativos do Lote

Os pacotes de aplicativos podem simplificar o código em sua solução de Lote do Azure e reduzir a sobrecarga exigida para gerenciar os aplicativos que suas tarefas executam. Com os pacotes de aplicativos, você pode carregar e gerenciar diversas versões dos aplicativos que suas tarefas executam, incluindo seus arquivos de suporte. Você pode implantar automaticamente um ou mais desses aplicativos nos nós de computação em seu pool.

As APIs para criar e gerenciar pacotes de aplicativos fazem parte da biblioteca .NET do Gerenciamento do Lote. As APIs para instalar pacotes de aplicativos em um nó de computação fazem parte da biblioteca .NET do Lote. Os recursos comparáveis estão nas APIs do lote disponível para outros idiomas.

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

Requisitos do pacote de aplicativos

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

Há restrições ao número de aplicativos e pacotes de aplicativos em uma conta do Lote, bem como ao tamanho máximo do pacote de aplicativos. Para saber mais, confira Limites e cotas do serviço de Lote.

Observação

Os pools do Lote criados antes de 5 de julho de 2017 não dão suporte a pacotes de aplicativos (a menos que eles tenham sido criados após o dia 10 de março de 2016 usando a configuração dos Serviços de Nuvem). O recurso de pacotes de aplicativos descrito aqui substitui o recurso Aplicativos do Lote, disponível nas versões anteriores do serviço.

Entender aplicativos e pacotes de aplicativos

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

Cada pacote de aplicativos é um arquivo. zip que contém os binários do aplicativo e os arquivos de suporte. Só há suporte para o formato de arquivo .zip.

Diagrama mostrando uma exibição de alto nível dos aplicativos e pacotes de aplicativos.

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

  • Pacotes de aplicativos do pool são implantados em cada nó no pool. Os aplicativos são implantados quando um nó ingressa em um pool e quando ele é reinicializado ou tem a imagem recriada.

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

  • pacotes de aplicativos de tarefa são implantados somente em um nó de computação programado para executar uma tarefa, logo antes de executar a linha de comando da tarefa. Se o pacote de aplicativos 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 tarefa são úteis nos ambientes de pool compartilhado, onde diferentes trabalhos são executados em um pool, e o pool não é excluído quando um trabalho é concluído. Se o trabalho tiver menos tarefas do que os nós no pool, pacotes de aplicativos de tarefa poderão minimizar a transferência de dados, pois o aplicativo é implantado apenas para os nós que executam tarefas.

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

Com pacotes de aplicativos, a tarefa de inicialização do pool não precisa especificar uma longa lista de arquivos de recursos individuais para instalar nos nós. Não é preciso gerenciar manualmente diversas versões dos arquivos do aplicativo no Armazenamento do Azure nem em seus nós. E você não precisa se preocupar com a geração de URLs SAS para fornecer acesso aos arquivos em sua conta de armazenamento. O Lote funciona em segundo plano com o Armazenamento do Azure para armazenar os pacotes de aplicativos e implantá-los nos nós de computação.

Observação

O tamanho total de uma tarefa de início deve ser menor ou igual a 32,768 caracteres, incluindo arquivos de recurso e variáveis de ambiente. Se a tarefa de inicialização exceder esse limite, usar pacotes de aplicativos é outra opção. Você também pode criar um arquivo compactado contendo os arquivos de recurso, carregá-lo como um blob no Armazenamento do Azure e descompactá-lo na linha de comando da tarefa inicial.

Carregar e gerenciar aplicativos

Você pode usar o portal do Azure ou as APIs de Gerenciamento do Lote para gerenciar os pacotes de aplicativos em sua conta do Lote. As seções a seguir explicam como vincular uma conta de armazenamento e como 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 do ARM, atualmente não é possível usar um modelo do ARM para carregar pacotes de aplicativos para usar na conta do Lote. Você deve carregá-los em sua conta de armazenamento vinculada, conforme descrito em Adicionar novo aplicativo.

Para usar pacotes de aplicativos, é necessário vincular uma conta de Armazenamento do Microsoft Azure à sua conta do Lote. O serviço de Lote usa a conta de armazenamento associada para armazenar os pacotes de aplicativos. O ideal é criar uma conta de armazenamento especificamente para uso com sua conta do Lote.

Se você ainda não configurou uma conta de armazenamento, o portal do Azure exibe um aviso na primeira vez em que selecionar Aplicativos na sua conta do Lote. Para precisar vincular uma conta de armazenamento à sua conta do Lote:

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

Depois que você tiver vinculado as duas contas, o Lote poderá implantar automaticamente os pacotes armazenados na conta de armazenamento vinculada nos nós de computação.

Importante

Você não pode usar pacotes de aplicativos com contas de Armazenamento do Azure configuradas com regras de firewall ou com namespace hierárquico definido como Habilitado.

O serviço de Lote usa o Armazenamento do Azure para armazenar os pacotes de aplicativos como blobs de blocos. Você é cobrado normalmente pelos dados de blob de blocos e o tamanho de cada pacote não pode exceder o tamanho máximo do blob de blocos. Para obter mais informações, confira Escalabilidade e metas de desempenho do Armazenamento de Blobs. Para minimizar custos, certifique-se de considerar o tamanho e o número de pacotes de aplicativos e, periodicamente, remova pacotes preteridos.

Adicionar um novo aplicativo

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

Em sua conta do Lote, selecione Aplicativos no menu de navegação esquerdo e, em seguida, selecione Adicionar.

Captura de tela do processo de criação de Novo aplicativo no portal do Azure.

Insira as seguintes informações:

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

A ID do aplicativo e a Versão que você inserir devem seguir estes requisitos:

  • Em nós do Windows, a ID pode conter qualquer combinação de caracteres alfanuméricos, hifens e sublinhados. Em nós do Linux, são permitidos somente caracteres alfanuméricos e sublinhados.
  • Não podem conter mais de 64 caracteres.
  • Deve ser exclusiva na conta do Lote.
  • IDs não diferenciam maiúsculas de minúsculas e preservam maiúsculas e minúsculas.

Quando estiver tudo pronto, selecione Fechar. Depois que o arquivo. zip for carregado em sua conta de Armazenamento do Microsoft Azure, o portal exibirá uma notificação. Dependendo do tamanho do arquivo que você estiver carregando e da velocidade da conexão de rede, esse processo poderá demorar um pouco para ser concluído.

Exibir aplicativos atuais

Para exibir os aplicativos na sua conta do Lote, selecione Aplicativos no menu de navegação esquerdo.

Captura de tela do item de menu Aplicativos no portal do Azure.

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

  • Pacotes: O número de versões associadas a este aplicativo.
  • Versão padrão: se aplicável, a versão do aplicativo que será instalada se nenhuma versão for especificada ao implantar o aplicativo.
  • Permitir atualizações: especifica se são atualizações exclusões de pacotes são permitidas.

Para ver a estrutura de arquivos do pacote de aplicativos em um nó de computação, navegue até sua conta do Lote 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 aplicativos.

Exibir detalhes do aplicativo

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

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

Adicionar um novo pacote de aplicativos

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

Como você fez para o novo aplicativo, especifique a Versão do novo pacote, carregue o arquivo .zip no campo Pacote de aplicativos e, em seguida, selecione Enviar.

Atualizar ou excluir um pacote de aplicativos

Para atualizar ou excluir um pacote de aplicativos existente, selecione o aplicativo na seção Aplicativos da sua conta do Lote. Selecione as reticências na linha do pacote de aplicativos que você quer modificar e, em seguida, selecione a ação que deseja executar. Especifica a ação que você deseja executar.

Captura de tela mostrando 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. Isso substituirá o arquivo .zip anterior que você carregou para essa versão.

Se você selecionar Excluir, será solicitado a confirmar a exclusão dessa versão. Depois de selecionar OK, o lote excluirá o arquivo .zip da sua conta do 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 a 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 do Lote.

Instalar pacotes de aplicativos do pool

Para instalar um pacote de aplicativos em todos os nós de computação em um pool, especifique uma ou mais referências do pacote de aplicativos para o pool. Os pacotes de aplicativos que você especifica para um pool são instalados em cada nó de computação quando esse nó se une ao pool, e em qualquer nó que é reinicializado ou tem sua imagem refeita.

No .NET do Lote, especifique um ou mais CloudPool.ApplicationPackageReferences quando você criar um novo pool ou para um pool existente. A classe ApplicationPackageReference especifica uma ID e versão do aplicativo para instalar 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 uma implantação do pacote de aplicativos falhar por algum motivo, o serviço do Lote marcará o nó como inutilizável e nenhuma tarefa será agendada para execução nesse nó. Se isso ocorrer, reinicie o nó para reiniciar a implantação do pacote. A reinicialização do nó também habilita novamente nele o agendamento de tarefas.

Instalar pacotes de aplicativos de tarefa

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

Para instalar um pacote de aplicativos 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"
    }
};

Executar os aplicativos instalados

Os pacotes que você especificou para uma tarefa ou um pool são baixados e extraídos para um diretório nomeado dentro do AZ_BATCH_ROOT_DIR do nó. O Lote também cria uma variável de ambiente que contém o caminho para o diretório nomeado. As linhas de comando da tarefa usam essa variável de ambiente ao referenciar o aplicativo no nó.

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

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

Em nós do Linux, o formato é ligeiramente diferente. Pontos (.), hifens (-) e teclas jogo da velha (#) são transformados em sublinhados na variável de ambiente. Além disso, observe que o caso da ID do aplicativo é preservado. Por exemplo:

Linux:
AZ_BATCH_APP_PACKAGE_applicationid_version

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

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

Em nós do Linux, especifique a variável de ambiente neste formato. Mescle os pontos (.), hifens (-) e a tecla jogo da velha (#) como sublinhados e preserve a capitalização da ID do aplicativo:

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

Quando você carrega um pacote de aplicativos, você pode especificar uma versão padrão para implantar em seus nós de computação. Se você tiver especificado uma versão padrão para um aplicativo, poderá omitir o sufixo da versão ao referenciar o aplicativo. Você pode especificar a versão padrão do aplicativo no portal do Azure, na janela de Aplicativos, como mostrado em Carregue e gerencie aplicativos.

Por exemplo, se você definiu "2.7" como a versão padrão do misturador de aplicativos e suas tarefas referenciam a variável de ambiente a seguir, seus nós do Windows executarão a versão 2.7:

AZ_BATCH_APP_PACKAGE_BLENDER

O snippet de código a seguir mostra uma linha de comando da tarefa de exemplo que inicializa a versão padrão do blender de aplicativos:

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

Dica

Confira Configurações do ambiente para tarefas para saber mais sobre as configurações do ambiente do nó de computação.

Atualizar pacotes de aplicativos de um pool

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

  • O serviço de Lote 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 cuja imagem seja refeita.
  • Os nós de computação que já estão no pool quando você atualiza as referências do pacote não instalam automaticamente o novo pacote de aplicativos. Esses nós de computação devem ser reinicializados ou ter sua imagem recriada para receber o novo pacote.
  • Quando um novo pacote é implantado, as variáveis de ambiente criadas refletem as novas referências do pacote de aplicativos.

Neste exemplo, o pool existente tem a versão 2.7 do aplicativo blender configurada como um de seus 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 de Lote instala a versão 2.76b em qualquer nó novo que ingresse no pool. Para instalar a versão 2.76b nos nós que já estão no pool, reinicialize-os ou refaça a imagem deles. Observe que os nós reinicializados retém arquivos das implantações de pacotes anteriores.

Listar os aplicativos em uma conta do Lote

Você pode listar os aplicativos e seus pacotes em uma conta do Lote 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óximas etapas