Compartilhar via


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 do Lote do Azure e facilitar o gerenciamento dos aplicativos executados por suas tarefas. Com os 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 gerenciar pacotes de aplicativos fazem parte da biblioteca Batch Management .NET. As APIs para instalar pacotes de aplicativos em um nó de computação fazem parte da biblioteca Batch .NET. Recursos comparáveis estão disponíveis nas APIs em lote para outras linguagens de programação.

Este artigo explica como carregar e gerenciar pacotes de aplicativos no portal do Azure. Ele também mostra 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 do Batch.

Há restrições quanto ao número de aplicativos e pacotes de aplicativos dentro de uma conta Batch e no tamanho máximo dos pacotes de aplicativos. Para saber mais, confira Limites e cotas do serviço de Lote.

Observação

Os pools de lote criados antes de 5 de julho de 2017 não dão suporte a pacotes de aplicativos (a menos que tenham sido criados após 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 em Lote disponível em versões anteriores do serviço.

Entender aplicativos e pacotes de aplicativos

No Azure Batch, um aplicativo refere-se a um conjunto de binários versionados 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 todos os arquivos de suporte. Há suporte apenas para o formato .zip.

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

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

  • Os pacotes de aplicativos do pool são implantados em todos os nós do 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 a serem implantados ao criar um pool. Você também pode adicionar ou atualizar pacotes de um pool existente. Para instalar novos pacotes em um pool existente, você deve reiniciar seus nós.

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

    Os pacotes de aplicativos de tarefa são úteis em ambientes de pool compartilhado, em que 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, os pacotes de aplicativos de tarefa poderão minimizar a transferência de dados, pois o aplicativo é implantado apenas nos nós que executam tarefas.

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

Com os 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. 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 será outra opção. Você também pode criar um arquivo .zip que contém seus arquivos de recurso, carregar o arquivo como um blob no Armazenamento do Azure e descompactá-lo da linha de comando da tarefa inicial.

Carregar e gerenciar aplicativos

Você pode usar o portal do Azure ou as APIs de Gerenciamento de Lote para gerenciar os pacotes de aplicativos em sua conta do 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 do ARM, atualmente não é possível usar um modelo do ARM para carregar pacotes de aplicativos a serem usados em sua conta do Lote. Você deve carregá-los em 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 do Batch. O serviço do Lote usa a conta de armazenamento associada para armazenar os seus pacotes de aplicativos. Idealmente, você deve criar uma conta de armazenamento especificamente para uso com sua conta Batch.

Se você ainda não tiver configurado uma conta de armazenamento, o portal do Azure exibirá um aviso na primeira vez que você selecionar Aplicativos no menu de navegação à esquerda em sua conta do Lote. Se precisar vincular uma conta de armazenamento à sua conta do Lote:

  1. Selecione a janela Aviso informando: "Nenhuma conta de armazenamento configurada para esta 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 em 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 poderá implantar automaticamente os pacotes armazenados na conta de Armazenamento vinculada em seus nós de processamento.

Importante

Você não pode 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ê recebe uma cobrança como de costume pelos dados do 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 os custos, considere o tamanho e o número dos pacotes de aplicativos e remova periodicamente os 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 Batch, selecione Aplicações no menu de navegação esquerdo e, em seguida, selecione Adicionar.

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

Insira as seguintes informações:

  • ID do aplicativo: a ID do 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 necessários para executar o aplicativo.

A ID do aplicativo e a versão inseridas 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 é possível conter mais de 64 caracteres.
  • Deve ser exclusiva na conta do Lote.
  • As IDs preservam e não diferenciam maiúsculas e minúsculas.

Quando estiver pronto, selecione Enviar. Depois que o arquivo .zip tiver sido carregado em sua conta de Armazenamento do Azure, o portal exibirá uma notificação. Dependendo do tamanho do arquivo que você está carregando e da velocidade da conexão de rede, esse processo pode levar algum tempo.

Exibir aplicativos atuais

Para exibir os aplicativos em sua conta do Lote, selecione Aplicativos no menu de navegação à esquerda.

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

Selecionar essa opção de menu abre a janela Aplicativos . Esta 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 as atualizações e exclusões de pacote são permitidas.

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

Exibir detalhes do aplicativo

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. 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 aplicativo 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 sua solução do Batch pode usar ao 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 aos seus clientes por meio do Batch.

Adicionar um novo pacote de aplicativos

Para adicionar uma versão do pacote de aplicativos para 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 seu arquivo .zip no campo Pacote de aplicativos e selecione Enviar.

Atualizar ou excluir um pacote de aplicativos

Para atualizar ou excluir um pacote de aplicativos existente, selecione o aplicativo na página 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. Em seguida, selecione a ação que você deseja executar.

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

Se você selecionar Atualizar, poderá carregar um novo arquivo .zip. Esse arquivo substitui o arquivo de .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 de .zip de sua conta de Armazenamento do Azure. Se você excluir a versão padrão de um aplicativo, a configuração de 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 a implantá-los em nós de computação e executá-los com tarefas em 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 de 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 que ingressa no pool e em qualquer nó que é reinicializado ou tem a imagem recriada.

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 do aplicativo e uma versão 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 de pacote de aplicativos falhar, o serviço do Lote marcará o nó 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. Reiniciar o nó também habilita novamente o agendamento de tarefas no nó.

Instalar pacotes de aplicativos de tarefa

Semelhante a um pool, você especifica referências de pacote de aplicativos para uma tarefa. Quando uma tarefa é agendada para ser executada em um nó, o pacote é baixado e extraído pouco 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 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 nó AZ_BATCH_ROOT_DIR. O Batch também cria uma variável de ambiente que contém o caminho do diretório especificado. As linhas de comando da tarefa usam essa variável de ambiente ao referenciar o aplicativo no nó.

Nos 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 uso de maiúsculas e minúsculas da ID do aplicativo é 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 em 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 nesse formato. Mescle os pontos (.), hifens (-) e a tecla jogo da velha (#) como sublinhados e preserve o uso de maiúsculas e minúsculas da ID do aplicativo:

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

Ao carregar um pacote de aplicativos, 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 referenciar o aplicativo. Você pode especificar a versão do aplicativo padrão 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 um exemplo de linha de comando de tarefa 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);

Dica

Para obter mais informações sobre as configurações de ambiente do nó de computação, consulte as 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 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 é reinicializado ou que tem a imagem recriada.
  • Quando você atualiza as referências de pacote, nós de computação que já estão no pool não realizam a instalação automática do novo pacote de aplicações. Esses nós de computação precisam ser reinicializados ou ter a 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 uma de 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 do Lote instala a versão 2.76b em qualquer nó novo que ingresse no pool. Para instalar o 2.76b nos nós que já estão no pool, reinicialize-os ou reimagine-os. Os nós reinicializados retêm arquivos de implantações de pacote 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óximas etapas