Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Uma tarefa do Azure Batch geralmente requer algum tipo 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).
- Ficheiro de recurso único de um endpoint web: Gera um único ficheiro de recurso a partir de qualquer URL HTTP válida.
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 ficheiros já foram carregados para um contentor de armazenamento do Azure como 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 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 aceder ao contentor, tem de ter ambas as permissões Read e List, ao passo que, para aceder a blobs, só precisa da permissão Read.
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 contentor de armazenamento, gera um ficheiro de recurso com o StorageContainerUri.
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. Por fim, pode aceder aos ficheiros no contentor especificando a identidade a utilizar pelo Batch.
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 seguinte utiliza AutoStorageContainerName para gerar o ficheiro a partir dos dados da conta de autoarmazenamento.
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. Este método pode ser utilizado quer os dados para criar o seu ficheiro de recursos estejam no Armazenamento do Azure, quer em qualquer outra localização web, como um endpoint do GitHub.
O exemplo seguinte usa HttpUri para recuperar o ficheiro de uma string que contém uma URL válida, gerando depois um ficheiro de recurso para ser usado pela sua 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 gerida precisa da atribuição da função Storage Blob Data Reader no contentor em que o ficheiro se encontra e também tem de ser atribuída ao conjunto do Batch.
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 as APIs e ferramentas do Batch disponíveis para criar soluções em Batch.