Criar e gerenciar concessões de blob com o JavaScript ou o TypeScript
Esse artigo mostra como criar e gerenciar concessões de blob usando a biblioteca de clientes do Armazenamento do Microsoft Azure para JavaScript. Você pode usar a biblioteca de clientes para adquirir, renovar, liberar e interromper concessões de blob.
Pré-requisitos
- Os exemplos neste artigo pressupõem que você já tenha um projeto configurado para trabalhar com a biblioteca de clientes do Armazenamento de Blobs do Azure para JavaScript. Para saber mais sobre a configuração do seu projeto, incluindo a instalação de pacotes, a importação de módulos e a criação de um objeto cliente autorizado para trabalhar com recursos de dados, confira Introdução ao Armazenamento de Blobs do Azure e o JavaScript.
- O mecanismo de autorização deve ter permissões para trabalhar com uma concessão de blob. Para saber mais, consulte as diretrizes de autorização para as seguintes operações de API REST:
Sobre concessões de blob
Uma concessão cria e gerencia um bloqueio em um blob para operações de gravação e exclusão. A duração do bloqueio pode ser de 15 a 60 segundos, ou pode ser infinita. Uma concessão em um blob fornece acesso de gravação e exclusão exclusivo ao blob. Para gravar em um blob com uma concessão ativa, um cliente deverá incluir a ID da concessão ativa com a solicitação de gravação.
Para saber mais sobre os estados de concessão e quando você pode executar uma determinada ação em uma concessão, confira Estados e ações de concessão.
Todas as operações de contêiner são permitidas em um contêiner que inclui blobs com uma concessão ativa, inclusive Excluir contêiner. Dessa forma, um contêiner poderá ser excluído mesmo se os blobs contidos nele tiverem concessões ativas. Use a operação Contêiner sob concessão para controlar direitos de excluir um contêiner.
As operações de concessão são tratadas pela classe BlobLeaseClient, que fornece um cliente que contém todas as operações de concessão para blobs e contêineres. Para saber mais sobre concessões de contêiner usando a biblioteca de clientes, consulte Criar e gerenciar concessões de contêiner com JavaScript.
Adquirir uma concessão
Ao adquirir uma concessão, você obterá uma ID de concessão que seu código pode usar para operar no blob. Se o blob já tiver uma concessão ativa, você só poderá solicitar uma nova concessão usando a ID de concessão ativa. No entanto, você pode especificar uma nova duração de concessão.
Para adquirir uma concessão, crie uma instância da classe BlobLeaseClient e use um dos métodos a seguir:
O exemplo a seguir adquire uma concessão de 30 segundos para um blob:
async function acquireBlobLeaseAsync(blobClient) {
const leaseClient = blobClient.getBlobLeaseClient();
await leaseClient.acquireLease(30);
return leaseClient;
}
Renovar uma concessão
Você poderá renovar uma concessão de blob se a ID de concessão especificada na solicitação corresponder à ID de concessão associada ao blob. Observe que a concessão poderá ser renovada mesmo se tiver expirado, desde que o blob não tenha sido alterado nem concedido novamente desde a expiração da concessão. Ao renovar uma concessão, sua duração será redefinida.
Para renovar uma concessão, use um dos seguintes métodos em uma instância de BlobLeaseClient:
O exemplo a seguir renova uma concessão para um blob:
async function renewBlobLeaseAsync(blobClient, leaseID) {
const leaseClient = blobClient.getBlobLeaseClient(leaseID);
await leaseClient.renewLease();
}
Liberar uma concessão
Você poderá liberar uma concessão de blob se a ID de concessão especificada na solicitação corresponder à ID de concessão associada ao blob. A liberação da concessão permite que outro cliente adquira a concessão do blob assim que a liberação for concluída.
Libere uma concessão usando um dos seguintes métodos em uma instância de BlobLeaseClient JavaScript:
O exemplo a seguir libera uma concessão em um blob:
async function releaseBlobLeaseAsync(blobClient, leaseID) {
const leaseClient = blobClient.getBlobLeaseClient(leaseID);
await leaseClient.releaseLease();
}
Interromper uma concessão
Você poderá interromper uma concessão de blob se o blob tiver uma concessão ativa. Qualquer solicitação autorizada pode interromper a concessão; a solicitação não precisa especificar uma ID de concessão correspondente. Um contrato de concessão não pode ser renovado depois de quebrado, e a quebra de uma concessão impede que uma nova concessão seja adquirida até que a concessão original expire ou seja liberada.
Você pode interromper uma concessão usando um dos seguintes métodos em uma instância de BlobLeaseClient:
O exemplo a seguir interrompe uma concessão em um blob:
async function breakBlobLeaseAsync(blobClient) {
const leaseClient = blobClient.getBlobLeaseClient();
await leaseClient.breakLease();
}
Estados e ações de concessão
O diagrama a seguir mostra os cinco estados de uma concessão, bem como os comandos ou os eventos que causam alterações no estado da concessão.
A tabela a seguir lista os cinco estados de concessão, fornece uma breve descrição de cada um e lista as ações de concessão permitidas em um determinado estado. Essas ações de concessão causam transições de estado, conforme mostrado no diagrama.
Estado da concessão | Descrição | Ações permitidas da concessão |
---|---|---|
Disponível | A concessão está desbloqueada e pode ser adquirida. | acquire |
Concedida | A concessão está bloqueada. | acquire (apenas a mesma ID de concessão), renew , change , release e break |
Expirada | A duração de concessão expirou. | acquire , renew , release e break |
Quebra | A concessão foi interrompida, mas ela permanecerá bloqueada até que o ponto de interrupção expire. | release e break |
Desfeito | A concessão foi interrompida, e o ponto de interrupção expirou. | acquire , release , e break |
Quando a concessão expira, a ID será mantida pelo serviço Blob até que o blob seja modificado ou sob concessão novamente. Um cliente pode tentar renovar ou liberar a concessão usando a ID de concessão expirada. Se essa operação for bem-sucedida, o cliente saberá que o blob não foi alterado desde que a ID de concessão foi válida pela última vez. Se a solicitação falhar, o cliente sabe que o blob foi modificado ou foi novamente submetido a concessão desde a última vez em que a concessão estava ativa. O cliente deverá adquirir uma nova concessão do blob.
Se uma concessão expirar em vez de ser explicitamente liberada, talvez o cliente precise aguardar um minuto para que seja possível adquirir uma nova concessão para o blob. No entanto, o cliente poderá renovar a concessão com a sua ID imediatamente se o blob não tiver sido modificado.
Uma concessão não pode ser fornecida para um instantâneo de blob, uma vez que instantâneos são somente leitura. A solicitação de uma concessão em um instantâneo resulta no código de status 400 (Bad Request)
.
Recursos
Para saber mais sobre como gerenciar concessões de blob usando a biblioteca de clientes do Armazenamento de Blobs do Azure para JavaScript, confira os recursos a seguir.
Exemplos de código
- Exibir exemplos de código JavaScript e TypeScript deste artigo (GitHub)
Operações da API REST
O SDK do Azure para JavaScript contém bibliotecas que se baseiam na API REST do Azure, permitindo a interação com as operações de API REST por meio de paradigmas conhecidos do JavaScript. Os métodos da biblioteca de clientes para gerenciar concessões de blob usam a seguinte operação da API REST:
Recursos da biblioteca de clientes
- Documentação de referência da biblioteca de clientes
- Código-fonte da biblioteca de clientes
- Pacote (npm)
Confira também
Conteúdo relacionado
- Este artigo faz parte do guia do desenvolvedor do Armazenamento de Blobs para JavaScript/TypeScript. Para saber mais, confira a lista completa de artigos do guia do desenvolvedor em Criar seu aplicativo JavaScript/TypeScript.