Criar e usar arquivos de recurso

Uma tarefa do Lote do Azure geralmente requer que alguma forma de dados seja processada. Os arquivos de recurso são a maneira de fornecer esses dados para a VM (máquina virtual) do Lote por meio de uma tarefa. Todos os tipos de tarefas dão suporte a arquivos de recurso: tarefas, tarefas de início, tarefas de preparação de trabalho, tarefas de liberação de trabalho etc. Este artigo aborda alguns métodos comuns sobre como criar arquivos de recursos e colocá-los em uma VM.

Os arquivos de recurso colocam dados em uma VM no Lote, mas o tipo de dados e como ele é usado é flexível. No entanto, há alguns casos de uso comuns:

  • Provisionar arquivos comuns em cada VM usando arquivos de recurso em uma tarefa de início.
  • Provisionar dados de entrada a serem processados por tarefas.

Os arquivos comuns podem ser, por exemplo, arquivos em uma tarefa de início usada para instalar aplicativos executados por suas tarefas. Os dados de entrada podem ser dados brutos de imagem ou de vídeo, bem como qualquer informação a ser processada pelo Lote.

Tipos de arquivos de recurso

Há algumas opções diferentes disponíveis para gerar arquivos de recursos, cada um com seus próprios métodos. O processo de criação de arquivos de recursos varia dependendo de onde os dados originais estão armazenados e se vários arquivos devem ser criados.

URL do contêiner de armazenamento

Usar uma URL de contêiner de armazenamento significa que, com as permissões corretas, você pode acessar arquivos em qualquer contêiner de armazenamento no Azure.

Neste exemplo de C#, os arquivos já foram carregados em um contêiner de armazenamento do Azure como armazenamento de Blobs. Para acessar os dados necessários para criar um arquivo de recurso, primeiro precisamos obter acesso ao contêiner de armazenamento. Isso pode ser feito de várias maneiras.

Assinatura de acesso compartilhado

Crie um URI de SAS (assinatura de acesso compartilhado ) com as permissões corretas para acessar o contêiner de armazenamento. Defina o tempo de expiração e as permissões para a SAS. Nesse caso, nenhuma hora de início é especificada. Portanto, a SAS se torna válida imediatamente e expira duas horas após sua geração.

SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy
{
    SharedAccessExpiryTime = DateTime.UtcNow.AddHours(2),
    Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List
};

Observação

Para acesso ao contêiner, você deve ter as permissões Read e List. Já para acessar o Blob, você precisa apenas da permissão Read.

Depois que as permissões forem configuradas, crie o token SAS e formate a URL de SAS para acesso ao contêiner de armazenamento. Usando a URL de SAS formatada para o contêiner de armazenamento, gere um arquivo de recurso com FromStorageContainerUrl.

CloudBlobContainer container = blobClient.GetContainerReference(containerName);

string sasToken = container.GetSharedAccessSignature(sasConstraints);
string containerSasUrl = String.Format("{0}{1}", container.Uri, sasToken);

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(containerSasUrl);

Se desejar, você pode usar a propriedade blobPrefix para limitar os downloads apenas aos blobs cujo nome começa com um prefixo especificado:

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(containerSasUrl, blobPrefix = yourPrefix);

Identidade gerenciada

Crie uma identidade gerenciada atribuída pelo usuário e atribua a ela a função Storage Blob Data Reader em seu contêiner de Armazenamento do Azure. Em seguida, atribua a identidade gerenciada ao seu pool para suas VMs possam acessar a identidade. Por fim, você pode acessar os arquivos em seu contêiner especificando a identidade do Lote a ser usada.

CloudBlobContainer container = blobClient.GetContainerReference(containerName);

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(container.Uri, identityReference: new ComputeNodeIdentityReference() { ResourceId = "/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name" });

Acesso público

Uma alternativa para gerar uma URL de SAS ou usar uma identidade gerenciada é habilitar o acesso de leitura pública anônima para um contêiner e seus blobs no armazenamento de Blobs do Azure. Ao fazer isso, você poderá conceder acesso somente leitura a esses recursos sem compartilhar a chave da conta nem exigir uma SAS. O acesso público é geralmente usado para cenários em que você quer que determinados blobs estejam sempre disponíveis para acesso de leitura anônimo. Se esse cenário se adequar à sua solução, confira Configurar acesso público de leitura anônimo a contêineres e blobs para saber mais sobre como gerenciar o acesso aos seus dados de blob.

Nome do contêiner de armazenamento (armazenamento automático)

Em vez de configurar e criar uma URL de SAS, você pode usar o nome do seu contêiner de armazenamento do Azure para acessar os dados de blob. O contêiner de armazenamento que você usa deve estar na conta de armazenamento do Azure vinculada à conta do Lote, ocasionalmente chamada de conta de armazenamento automático. O uso do contêiner de armazenamento automático permite ignorar a configuração e criação de uma URL de SAS para acessar um contêiner de armazenamento. Em vez disso, você fornece o nome do contêiner de armazenamento à conta de armazenamento vinculada.

Se você ainda não tiver uma conta de armazenamento automático, consulte as etapas em Criar uma conta do Lote para obter detalhes sobre como criar e vincular uma conta de armazenamento.

O exemplo a seguir usa AutoStorageContainer para gerar o arquivo de dados na conta de armazenamento automático.

ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName);

Assim como para uma URL de contêiner de armazenamento, é possível usar a propriedade blobPrefix para especificar quais blobs serão baixados:

ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName, blobPrefix = yourPrefix);

Arquivo de recurso único do ponto de extremidade da Web

Para criar um arquivo de recurso único, você pode especificar uma URL HTTP válida contendo os dados de entrada. A URL é fornecida para a API do Lote e, em seguida, os dados são usados para criar um arquivo de recurso. Esse método poderá ser usado se os dados para criar o arquivo de recurso estiverem no Armazenamento do Microsoft Azure ou em outro local da Web, como um ponto de extremidade do GitHub.

O exemplo a seguir usa FromUrl para recuperar o arquivo de uma cadeia de caracteres que contenha uma URL válida e, em seguida, gerar um arquivo de recurso que será usado pela tarefa. Nenhuma credencial é necessária para este cenário. (As credenciais serão necessárias se estiver usando o armazenamento de blobs, a menos que o acesso de leitura público esteja habilitado no contêiner de blobs.)

ResourceFile inputFile = ResourceFile.FromUrl(yourURL, filePath);

Adicionalmente, é possível usar uma cadeia de caracteres que você define como uma URL (ou uma combinação de cadeia de caracteres que, em conjunto, criam a URL completa para o arquivo).

ResourceFile inputFile = ResourceFile.FromUrl(yourDomain + yourFile, filePath);

Se o arquivo estiver no Armazenamento do Azure, você poderá usar uma identidade gerenciada em vez de gerar uma Assinatura de Acesso Compartilhado para o arquivo de recurso.

ResourceFile inputFile = ResourceFile.FromUrl(yourURLFromAzureStorage, 
    identityReference: new ComputeNodeIdentityReference() { ResourceId = "/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name"},
    filePath: filepath
);

Observação

A autenticação de identidade gerenciada só funcionará com arquivos no Armazenamento do Azure. A identidade gerenciada precisa da atribuição da função Storage Blob Data Reader para o contêiner no qual o arquivo está e também deve ser atribuída ao pool do Lote.

Dicas e sugestões

As tarefas do Lote do Azure podem usar arquivos de várias maneiras e por isso o Lote fornece várias opções para gerenciar arquivos em tarefas. Os cenários a seguir não pretendem ser abrangentes, mas abordam algumas situações comuns e fornecem recomendações.

Muitos arquivos de recurso

Se os arquivos de tarefas comuns forem compartilhados entre muitas tarefas no Trabalho em lotes, use um pacote de aplicativos para conter esses arquivos. Os pacotes de aplicativos fornecem otimização para velocidade de download e os dados em pacotes de aplicativos são armazenados em cache entre as tarefas. Com os pacotes de aplicativos, você não precisa gerenciar manualmente vários arquivos de recurso nem gerar URLs de SAS para acessar os arquivos no Armazenamento do Azure. O Lote funciona em segundo plano com o Armazenamento do Azure para armazenar e implantar os pacotes de aplicativos nos nós de computação. Se os arquivos de tarefa não são alterados com frequência, os pacotes de aplicativos podem ser um bom ajuste para a sua solução.

Se ao invés disso cada tarefa tiver muitos arquivos exclusivos para uma determinada tarefa, os arquivos de recursos provavelmente serão a melhor opção. Tarefas que usam arquivos exclusivos frequentemente precisam ser atualizadas ou substituídas, o que não é tão fácil de fazer com o conteúdo do pacote de aplicativos. Os arquivos de recurso fornecem flexibilidade adicional para atualizar, adicionar ou editar arquivos individuais.

Número de arquivos de recurso por tarefa

Quando uma tarefa especifica um grande número de arquivos de recurso, o Lote pode rejeitar a tarefa como sendo muito grande. Isso depende do tamanho total dos nomes de arquivo ou URLs (bem como referência de identidade) para todos os arquivos adicionados à tarefa. É melhor manter suas tarefas em tamanho pequeno, minimizando o número de arquivos de recurso na própria tarefa.

Se não houver como reduzir o número de arquivos de que sua tarefa precisa, você poderá otimizar a tarefa criando um único arquivo de recurso que faça referência a um contêiner de armazenamento de arquivos de recurso. Para fazer isso, coloque os arquivos de recursos em um contêiner do Armazenamento do Microsoft Azure e use um dos métodos descritos acima para gerar os arquivos de recursos, conforme necessário.

Próximas etapas