Criar e gerenciar arrendamentos de contêineres com JavaScript ou TypeScript
Este artigo mostra como criar e gerenciar concessões de contêineres usando a Biblioteca de clientes para JavaScript do Armazenamento do Microsoft Azure. Use a biblioteca de clientes para adquirir, renovar, liberar e interromper concessões de contêiner.
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 como configurar seu projeto, incluindo a instalação do pacote, adicionando diretivas e criando um objeto cliente autorizado, veja Introdução ao Armazenamento de Blobs do Azure e JavaScript.
- O mecanismo de autorização deve ter permissões para trabalhar com o tempo de concessão de blob. Para saber mais, consulte as diretrizes de autorização para as seguintes operações de API REST:
Sobre as concessões de contêiner
Uma concessão estabelece e gerencia um bloqueio em um contêiner para operações de exclusão. A duração do bloqueio pode ser de 15 a 60 segundos, ou pode ser infinita. Uma concessão em um contêiner fornece acesso de gravação e exclusão exclusivo ao contêiner. A concessão do contêiner controla somente a capacidade de excluir o contêiner usando a operação Excluir Contêiner da API REST. Para excluir um contêiner com uma concessão ativa, o cliente deve incluir a ID da concessão ativa com a solicitação de exclusão. Todas as outras operações de contêiner são realizadas com êxito em um contêiner concedido sem a ID da concessão. Se você habilitou a exclusão temporária de contêiner, é possível restaurar contêineres excluídos.
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.
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 as concessões de blobs usando a biblioteca do cliente, confira Criar e gerenciar concessões de blobs com JavaScript.
Adquirir uma concessão
Ao adquirir uma concessão de contêiner, você obterá uma ID de concessão que o código poderá usar para operar no contêiner. Se o contêiner 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 contêiner:
async function acquireContainerLeaseAsync(blobContainerClient) {
const leaseClient = blobContainerClient.getBlobLeaseClient();
await leaseClient.acquireLease(30);
return leaseClient;
}
Renovar uma concessão
Você pode renovar uma concessão de contêiner se a ID de concessão especificada na solicitação corresponder à ID de concessão associada ao contêiner. A concessão pode ser renovada mesmo se tiver expirada, desde que o contêiner não tenha sido 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 de contêiner:
async function renewContainerLeaseAsync(blobContainerClient, leaseID) {
const leaseClient = blobContainerClient.getBlobLeaseClient(leaseID);
await leaseClient.renewLease();
}
Liberar uma concessão
Você poderá liberar uma concessão de contêiner se a ID de concessão especificada na solicitação corresponder à ID de concessão associada ao contêiner. A liberação da concessão permite que outro cliente adquira a concessão do contêiner imediatamente assim que a liberação é concluída.
Você pode liberar uma concessão usando um dos seguintes métodos em uma instância de BlobLeaseClient:
O exemplo a seguir libera uma concessão em um contêiner:
async function releaseContainerLeaseAsync(blobContainerClient, leaseID) {
const leaseClient = blobContainerClient.getBlobLeaseClient(leaseID);
await leaseClient.releaseLease();
}
Interromper uma concessão
Você pode interromper uma concessão de contêiner se o contêiner 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 a concessão em um contêiner:
async function breakContainerLeaseAsync(blobContainerClient) {
const leaseClient = blobContainerClient.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 contêiner 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 a solicitação falhar, o cliente sabe que o contêiner foi novamente submetido a concessão ou foi excluído desde a última vez em que a concessão estava ativa.
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 contêiner. No entanto, o cliente pode renovar a concessão com a ID expirada imediatamente.
Recursos
Para saber mais sobre como gerenciar concessões de contêineres usando a biblioteca de clientes do Armazenamento de Blobs do Azure para JavaScript, confira os seguintes recursos.
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 contêiner 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.