Implementar aplicações em nós de computação com pacotes de aplicações do Batch

Os pacotes de aplicações podem simplificar o código na sua solução de Azure Batch e facilitar a gestão das aplicações que as suas tarefas executam. Com os pacotes de aplicações, pode carregar e gerir várias versões das aplicações que as suas tarefas executam, incluindo os respetivos ficheiros de suporte. Em seguida, pode implementar automaticamente uma ou mais destas aplicações nos nós de computação no seu conjunto.

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

Este artigo explica como carregar e gerir pacotes de aplicações no portal do Azure. Também mostra como instalá-los nos nós de computação de um conjunto com a biblioteca .NET do Batch .

Requisitos do pacote de aplicação

Para utilizar pacotes de aplicações, tem de ligar uma conta de Armazenamento do Azure à sua conta do Batch.

Existem restrições sobre o número de aplicações e pacotes de aplicações numa conta do Batch e no tamanho máximo do pacote de aplicações. Para obter mais informações, veja Quotas e limites do serviço Batch.

Nota

Os conjuntos de lotes criados antes de 5 de julho de 2017 não suportam pacotes de aplicações (a menos que tenham sido criados após 10 de março de 2016 com o Serviços Cloud Configuration). A funcionalidade de pacotes de aplicações descrita aqui substitui a funcionalidade Batch Apps disponível em versões anteriores do serviço.

Compreender as aplicações e os pacotes de aplicações

No Azure Batch, uma aplicação refere-se a um conjunto de binários com versões que podem ser transferidos automaticamente para os nós de computação no seu conjunto. Uma aplicação contém um ou mais pacotes de aplicações, que representam versões diferentes da aplicação.

Cada pacote de aplicação é um ficheiro .zip que contém os binários da aplicação e quaisquer ficheiros de suporte. Apenas o formato .zip é suportado.

Diagrama que mostra uma vista de alto nível de aplicações e pacotes de aplicações.

Pode especificar pacotes de aplicações ao nível do conjunto ou da tarefa.

  • Os pacotes de aplicações de conjunto são implementados em todos os nós do conjunto. As aplicações são implementadas quando um nó associa um conjunto e quando é reiniciado ou recriado.

    Os pacotes de aplicações de conjunto são adequados quando todos os nós num conjunto executam as tarefas de um trabalho. Pode especificar um ou mais pacotes de aplicações a implementar quando cria um conjunto. Também pode adicionar ou atualizar os pacotes de um conjunto existente. Para instalar um novo pacote num conjunto existente, tem de reiniciar os nós.

  • Os pacotes de aplicações de tarefas são implementados apenas num nó de computação agendado para executar uma tarefa, imediatamente antes de executar a linha de comandos da tarefa. Se o pacote e a versão da aplicação especificados já estiverem no nó, não serão reimplementados e o pacote existente será utilizado.

    Os pacotes de aplicações de tarefas são úteis em ambientes de conjunto partilhado, onde diferentes tarefas são executadas num conjunto e o conjunto não é eliminado quando uma tarefa é concluída. Se a sua tarefa tiver menos tarefas do que nós no conjunto, os pacotes de aplicações de tarefas podem minimizar a transferência de dados, uma vez que a sua aplicação é implementada apenas nos nós que executam tarefas.

    Outros cenários que podem beneficiar de pacotes de aplicações de tarefas são trabalhos que executam uma aplicação grande, mas apenas para algumas tarefas. Por exemplo, as aplicações de tarefas podem ser úteis para uma fase de pré-processamento pesado ou uma tarefa de intercalação.

Com os pacotes de aplicações, a tarefa de início do conjunto não tem de especificar uma longa lista de ficheiros de recursos individuais para instalar nos nós. Não tem de gerir manualmente várias versões dos seus ficheiros de aplicação no Armazenamento do Azure ou nos nós. Além disso, não precisa de se preocupar com a geração de URLs de SAS para fornecer acesso aos ficheiros na sua conta de Armazenamento do Azure. O Batch funciona em segundo plano com o Armazenamento do Azure para armazenar pacotes de aplicações e implementá-los em nós de computação.

Nota

O tamanho total de uma tarefa de início tem de ser menor ou igual a 32.768 carateres, incluindo ficheiros de recursos e variáveis de ambiente. Se a tarefa de início exceder este limite, utilizar pacotes de aplicações é outra opção. Também pode criar um ficheiro .zip que contém os seus ficheiros de recursos, carregar o ficheiro como um blob para o Armazenamento do Azure e, em seguida, deszipar o ficheiro da linha de comandos da tarefa de início.

Carregar e gerir aplicações

Pode utilizar o portal do Azure ou as APIs de Gestão do Batch para gerir os pacotes de aplicações na sua conta do Batch. As secções seguintes explicam como associar uma conta de armazenamento. Saiba como adicionar e gerir aplicações e pacotes de aplicações no portal do Azure.

Nota

Embora possa definir valores de aplicação no recurso Microsoft.Batch/batchAccounts de um modelo arm, atualmente não é possível utilizar um modelo do ARM para carregar pacotes de aplicações para utilizar na sua conta do Batch. Tem de carregá-los para a sua conta de armazenamento associada, conforme descrito em Adicionar uma nova aplicação.

Para utilizar pacotes de aplicações, tem de ligar uma conta de Armazenamento do Azure à sua conta do Batch. O serviço Batch utiliza a conta de armazenamento associada para armazenar os pacotes de aplicações. Idealmente, deve criar uma conta de armazenamento especificamente para utilização com a sua conta do Batch.

Se ainda não tiver configurado uma conta de armazenamento, o portal do Azure apresenta um aviso quando selecionar Aplicações pela primeira vez no menu de navegação esquerdo na sua conta do Batch. Para ter de ligar uma conta de armazenamento à sua conta do Batch:

  1. Selecione a janela Aviso que indica "Nenhuma conta de Armazenamento configurada para esta conta de lote".
  2. Em seguida, selecione Conjunto de Contas de Armazenamento... na página seguinte.
  3. Selecione a ligação Selecionar uma conta de armazenamento na secção Informações da Conta de Armazenamento .
  4. Selecione a conta de armazenamento que pretende utilizar com esta conta do Batch na lista no painel Escolher conta de armazenamento .
  5. Em seguida, selecione Guardar no canto superior esquerdo da página.

Depois de ligar as duas contas, o Batch pode implementar automaticamente os pacotes armazenados na conta de Armazenamento associada aos nós de computação.

Importante

Não pode utilizar pacotes de aplicações com contas de Armazenamento do Azure configuradas com regras de firewall ou com o espaço de nomes Hierárquico definido como Ativado.

O serviço Batch utiliza o Armazenamento do Azure para armazenar os pacotes de aplicações como blobs de blocos. É cobrado normalmente 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, veja Metas de escalabilidade e desempenho do Armazenamento de blobs. Para minimizar os custos, certifique-se de que considera o tamanho e o número dos pacotes de aplicações e remove periodicamente pacotes preteridos.

Adicionar uma nova aplicação

Para criar uma nova aplicação, adicione um pacote de aplicação e especifique um ID de aplicação exclusivo.

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

Captura de ecrã a mostrar o processo de criação de nova aplicação no portal do Azure.

Introduza as seguintes informações:

  • ID da Aplicação: o ID da sua nova aplicação.
  • Versão": a versão do pacote de aplicação que está a carregar.
  • Pacote de aplicação: o ficheiro .zip que contém os binários da aplicação e os ficheiros de suporte necessários para executar a aplicação.

O ID da Aplicação e a Versão que introduzir têm de seguir estes requisitos:

  • Nos nós do Windows, o ID pode conter qualquer combinação de carateres alfanuméricos, hífenes e carateres de sublinhado. Nos nós do Linux, só são permitidos carateres alfanuméricos e carateres de sublinhado.
  • Não pode conter mais de 64 carateres.
  • Tem de ser exclusivo na conta do Batch.
  • Os IDs são de preservação de maiúsculas e minúsculas e não são sensíveis a maiúsculas e minúsculas.

Quando estiver pronto, selecione Submeter. Depois de o ficheiro .zip ter sido carregado para a sua conta de Armazenamento do Azure, o portal apresenta 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 ver as aplicações na sua conta do 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 Aplicações . Esta janela apresenta o ID de cada aplicação na sua conta e as seguintes propriedades:

  • Pacotes: o número de versões associadas a esta aplicação.
  • Versão predefinida: se aplicável, a versão da aplicação que é instalada se não for especificada nenhuma versão ao implementar a aplicação.
  • Permitir atualizações: especifica se as atualizações e eliminações de pacotes são permitidas.

Para ver a estrutura de ficheiros do pacote de aplicação num nó de computação, navegue para a sua conta do Batch no portal do Azure. Selecione Conjuntos. Em seguida, selecione o conjunto que contém o nó de computação. Selecione o nó de computação no qual o pacote de aplicação está instalado e abra a pasta aplicações .

Ver detalhes da aplicação

Para ver os detalhes de uma aplicação, selecione-a na janela Aplicações . Pode configurar a sua aplicação ao selecionar Definições no menu de navegação esquerdo.

  • Permitir atualizações: indica se os pacotes de aplicações podem ser atualizados ou eliminados. A predefinição é Sim. Se estiver definido como Não, os pacotes de aplicações existentes não podem ser atualizados ou eliminados, mas ainda podem ser adicionadas novas versões do pacote de aplicações.
  • Versão predefinida: o pacote de aplicação predefinido a utilizar quando a aplicação é implementada se não for especificada nenhuma versão.
  • Nome a apresentar: um nome amigável que a sua solução do Batch pode utilizar quando apresenta informações sobre a aplicação. Por exemplo, este nome pode ser utilizado na IU de um serviço que fornece aos seus clientes através do Batch.

Adicionar um novo pacote de aplicação

Para adicionar uma versão do pacote de aplicação para uma aplicação existente, selecione a aplicação na página Aplicações da sua conta do Batch. Em seguida, selecione Adicionar.

Tal como fez para a nova aplicação, especifique a Versão do seu novo pacote, carregue o ficheiro .zip no campo Pacote de aplicação e, em seguida, selecione Submeter.

Atualizar ou eliminar um pacote de aplicação

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

Captura de ecrã que mostra as opções de atualização e eliminação dos pacotes de aplicações no portal do Azure.

Se selecionar Atualizar, pode carregar um novo ficheiro de .zip. Este ficheiro substitui o ficheiro de .zip anterior que carregou para essa versão.

Se selecionar Eliminar, ser-lhe-á pedido que confirme a eliminação dessa versão. Depois de selecionar OK, o Batch elimina o ficheiro de .zip da sua conta de Armazenamento do Azure. Se eliminar a versão predefinida de uma aplicação, a definição versão predefinida é removida para essa aplicação.

Instalar aplicações em nós de computação

Aprendeu a gerir pacotes de aplicações no portal do Azure. Agora, pode aprender a implementá-los em nós de computação e executá-los com tarefas do Batch.

Instalar pacotes de aplicações do conjunto

Para instalar um pacote de aplicação em todos os nós de computação num conjunto, especifique uma ou mais referências de pacotes de aplicações para o conjunto. Os pacotes de aplicações que especificar para um conjunto são instalados em cada nó de computação que associa o conjunto e em qualquer nó que seja reiniciado ou reimagedo.

No Batch .NET, especifique uma ou mais CloudPool.ApplicationPackageReferences quando criar um novo conjunto ou quando utilizar um conjunto existente. A classe ApplicationPackageReference especifica um ID de aplicação e uma versão para instalar nos nós de computação de um conjunto.

// 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 implementação de pacote de aplicação falhar, o serviço Batch marca o nó inutilizável e nenhuma tarefa está agendada para execução nesse nó. Se isto acontecer, reinicie o nó para reiniciar a implementação do pacote. Reiniciar o nó também ativa o agendamento de tarefas novamente no nó.

Instalar pacotes de aplicações de tarefas

Semelhante a um conjunto, especifica referências de pacotes de aplicações para uma tarefa. Quando uma tarefa está agendada para ser executada num nó, o pacote é transferido e extraído imediatamente antes da execução da linha de comandos da tarefa. Se um pacote e uma versão especificados já estiverem instalados no nó, o pacote não é transferido e o pacote existente é utilizado.

Para instalar um pacote de aplicação de tarefas, 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 as aplicações instaladas

Os pacotes que especificar para um conjunto ou tarefa são transferidos e extraídos para um diretório com nome no AZ_BATCH_ROOT_DIR nó. O Batch também cria uma variável de ambiente que contém o caminho para o diretório nomeado. As linhas de comandos de tarefa utilizam esta variável de ambiente ao referenciar a aplicação no nó.

Nos nós do Windows, a variável encontra-se no seguinte formato:

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

Nos nós do Linux, o formato é ligeiramente diferente. Os períodos (.), hífenes (-) e sinais de número (#) são achatados para sublinhados na variável de 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 da aplicação e do pacote que especificou para implementação. Por exemplo, se especificar que a versão 2.7 do liquidificador de aplicações deve ser instalada nos nós do Windows, as linhas de comandos de tarefas utilizarão esta variável de ambiente para aceder aos respetivos ficheiros:

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

Nos nós do Linux, especifique a variável de ambiente neste formato. Aplane os períodos (.), os hífenes (-) e os sinais de número (#) aos carateres de sublinhado e preserve o caso do ID da aplicação:

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

Quando carrega um pacote de aplicação, pode especificar uma versão predefinida para implementar nos nós de computação. Se tiver especificado uma versão predefinida para uma aplicação, pode omitir o sufixo de versão quando referenciar a aplicação. Pode especificar a versão predefinida da aplicação no portal do Azure, na janela Aplicações, conforme mostrado em Carregar e gerir aplicações.

Por exemplo, se definir "2.7" como a versão predefinida para o liquidificador de aplicações e as suas tarefas referenciarem a seguinte variável de ambiente, os nós do Windows utilizam a versão 2.7:

AZ_BATCH_APP_PACKAGE_BLENDER

O fragmento de código seguinte mostra uma linha de comandos de tarefa de exemplo que inicia a versão predefinida da aplicação 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 definições do ambiente do nó de computação, veja Definições de ambiente para tarefas.

Atualizar os pacotes de aplicações de um conjunto

Se um conjunto existente já tiver sido configurado com um pacote de aplicação, pode especificar um novo pacote para o conjunto. Isto significa:

  • O serviço Batch instala o pacote recentemente especificado em todos os novos nós que se associam ao conjunto e em qualquer nó existente que seja reiniciado ou reimagedo.
  • Os nós de computação que já se encontram no conjunto quando atualiza as referências do pacote não instalam automaticamente o novo pacote de aplicações. Estes nós de computação têm de ser reiniciados ou reimagedos para receber o novo pacote.
  • Quando um novo pacote é implementado, as variáveis de ambiente criadas refletem as novas referências do pacote de aplicações.

Neste exemplo, o conjunto existente tem a versão 2.7 da aplicação blender configurada como uma das respetivas CloudPool.ApplicationPackageReferences. Para atualizar os nós do conjunto com a versão 2.76b, especifique uma nova ApplicationPackageReference com a nova versão e consolide 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 para qualquer novo nó que adira ao conjunto. Para instalar 2,76b nos nós que já se encontram no conjunto, reinicie ou reimage-os. Os nós reiniciados retêm ficheiros de implementações de pacotes anteriores.

Listar as aplicações numa conta do Batch

Pode listar as aplicações e os respetivos pacotes numa conta do Batch com 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);
    }
}

Passos seguintes