Criar e utilizar ficheiros de recursos
Uma tarefa do Lote do Azure geralmente requer alguma forma de dados para processar. Os arquivos de recursos são a maneira de fornecer esses dados à sua máquina virtual (VM) em lote por meio de uma tarefa. Todos os tipos de tarefas suportam arquivos de recursos: 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 de como criar arquivos de recursos e colocá-los em uma VM.
Os arquivos de recursos colocam dados em uma VM em lote, mas o tipo de dados e como eles são usados é flexível. Existem, no entanto, alguns casos de uso comuns:
- Provisione arquivos comuns em cada VM usando arquivos de recursos em uma tarefa inicial.
- Provisionar dados de entrada a serem processados por tarefas.
Os arquivos comuns podem ser, por exemplo, arquivos em uma tarefa inicial usados para instalar aplicativos que suas tarefas executam. Os dados de entrada podem ser dados brutos de imagem ou vídeo, ou qualquer informação a ser processada pelo Batch.
Tipos de arquivos de recursos
Existem algumas opções diferentes disponíveis para gerar arquivos de recursos, cada uma com seus próprios métodos. O processo de criação de arquivos de recursos varia dependendo de onde os dados originais são armazenados e se vários arquivos devem ser criados.
- URL do contêiner de armazenamento: gera arquivos de recursos de qualquer contêiner de armazenamento no Azure.
- Nome do contêiner de armazenamento: gera arquivos de recursos a partir do nome de um contêiner na conta de armazenamento do Azure vinculada à sua conta de lote (a conta de armazenamento automático).
- Arquivo de recurso único do ponto de extremidade da Web: gera um único arquivo de recurso a partir de qualquer URL HTTP válido.
URL do contêiner de armazenamento
Usar uma URL de contêiner de armazenamento significa, com as permissões corretas, que você pode acessar arquivos em qualquer contêiner de armazenamento no Azure.
Neste exemplo em C#, os arquivos já foram carregados em um contêiner de armazenamento do Azure como armazenamento de blob. 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 Partilhado
Crie um URI de assinatura de acesso compartilhado (SAS) com as permissões corretas para acessar o contêiner de armazenamento. Defina o tempo de expiração e as permissões para o SAS. Neste caso, nenhuma hora de início é especificada, de modo que o SAS torna-se válido imediatamente e expira duas horas após ser gerado.
SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(2),
Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List
};
Nota
Para acesso ao contêiner, você deve ter ambas as permissões, enquanto com o Read
List
acesso de blob, você só precisa de Read
permissão.
Depois que as permissões estiverem configuradas, crie o token SAS e formate a URL SAS para acessar o contêiner de armazenamento. Usando a URL 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 gerida
Crie uma identidade gerenciada atribuída pelo usuário e atribua-lhe a Storage Blob Data Reader
função para seu contêiner de Armazenamento do Azure. Em seguida, atribua a identidade gerenciada ao seu pool para que suas VMs possam acessar a identidade. Finalmente, você pode acessar os arquivos em seu contêiner especificando a identidade para o Batch usar.
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 SAS ou usar uma identidade gerenciada é habilitar o acesso de leitura anônimo e público a um contêiner e seus blobs no armazenamento de Blobs do Azure. Ao fazer isso, você pode conceder acesso somente leitura a esses recursos sem compartilhar sua chave de conta e sem exigir uma SAS. O acesso público é normalmente usado para cenários em que você deseja que determinados blobs estejam sempre disponíveis para acesso de leitura anônimo. Se esse cenário se adequar à sua solução, consulte Configurar acesso de leitura público anônimo para 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 SAS, você pode usar o nome do contêiner de armazenamento do Azure para acessar seus dados de blob. O contêiner de armazenamento que você usa deve estar na conta de armazenamento do Azure vinculada à sua conta de lote, às vezes chamada de conta de armazenamento automático. O uso do contêiner de armazenamento automático permite ignorar a configuração e a criação de uma URL SAS para acessar um contêiner de armazenamento. Em vez disso, você fornece o nome do contêiner de armazenamento em sua conta de armazenamento vinculada.
Se você ainda não tiver uma conta de armazenamento automático, consulte as etapas em Criar uma conta de lote para obter detalhes sobre como criar e vincular uma conta de armazenamento.
O exemplo a seguir usa AutoStorageContainer para gerar o arquivo a partir de dados na conta de armazenamento automático.
ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName);
Assim como em uma URL de contêiner de armazenamento, você pode 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 único arquivo de recurso, você pode especificar uma URL HTTP válida contendo seus dados de entrada. A URL é fornecida para a API em lote e, em seguida, os dados são usados para criar um arquivo de recurso. Esse método pode ser usado se os dados para criar seu arquivo de recurso estiverem no Armazenamento do Azure ou em qualquer 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 contém uma URL válida e, em seguida, gera um arquivo de recurso para ser usado pela tarefa. Nenhuma credencial é necessária para esse cenário. (As credenciais são necessárias se estiver usando o armazenamento de blob, a menos que o acesso público de leitura esteja habilitado no contêiner de blob.)
ResourceFile inputFile = ResourceFile.FromUrl(yourURL, filePath);
Você também pode usar uma cadeia de caracteres definida como uma URL (ou uma combinação de cadeias de caracteres que, juntas, 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
);
Nota
A autenticação de identidade gerenciada só funcionará com arquivos no Armazenamento do Azure. A identidade gerenciada precisa da Storage Blob Data Reader
atribuição de função para o contêiner em que o arquivo está e também deve ser atribuída ao pool de lotes.
Dicas e sugestões
As tarefas do Lote do Azure podem usar arquivos de várias maneiras, e é por isso que o Lote fornece várias opções para gerenciar arquivos em tarefas. Os cenários a seguir não devem ser abrangentes, mas abrangem algumas situações comuns e fornecem recomendações.
Muitos arquivos de recursos
Se os arquivos de tarefas comuns forem compartilhados entre muitas tarefas em seu trabalho em lote, convém usar um pacote de aplicativo para conter esses arquivos. Os pacotes de aplicativos fornecem otimização para a velocidade de download e os dados nos pacotes de aplicativos são armazenados em cache entre as tarefas. Com pacotes de aplicativos, você não precisa gerenciar manualmente vários arquivos de recursos ou gerar URLs SAS para acessar os arquivos no Armazenamento do Azure. O Batch funciona em segundo plano com o Armazenamento do Azure para armazenar e implantar pacotes de aplicativos em nós de computação. Se seus arquivos de tarefas não forem alterados com frequência, os pacotes de aplicativos podem ser uma boa opção para sua solução.
Por outro lado, se cada uma das suas tarefas tiver muitos arquivos exclusivos para essa tarefa, os arquivos de recursos provavelmente serão a melhor opção. As tarefas que usam arquivos exclusivos geralmente precisam ser atualizadas ou substituídas, o que não é tão fácil de fazer com o conteúdo do pacote do aplicativo. Os arquivos de recursos oferecem flexibilidade adicional para atualizar, adicionar ou editar arquivos individuais.
Número de arquivos de recursos por tarefa
Quando uma tarefa especifica um grande número de arquivos de recursos, o Batch pode rejeitá-la por ser muito grande. Isso depende do comprimento total dos nomes de arquivos ou URLs (bem como da referência de identidade) de todos os arquivos adicionados à tarefa. É melhor manter suas tarefas pequenas minimizando o número de arquivos de recursos na própria tarefa.
Se não houver como minimizar o número de arquivos de que sua tarefa precisa, você poderá otimizá-la criando um único arquivo de recurso que faça referência a um contêiner de armazenamento de arquivos de recursos. Para fazer isso, coloque seus arquivos de recurso em um contêiner de Armazenamento do Azure e use um dos métodos descritos acima para gerar arquivos de recursos conforme necessário.
Próximos passos
- Saiba mais sobre os pacotes de aplicativos como uma alternativa aos arquivos de recursos.
- Saiba mais sobre como usar contêineres para arquivos de recursos.
- Saiba como reunir e salvar os dados de saída de suas tarefas.
- Saiba mais sobre o Ferramentas e APIs do Batch disponíveis para criação de soluções para o Batch.