Compartilhar via


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.

Um diagrama mostrando estados de concessão de contêiner e gatilhos de alteração de estado.

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

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

Confira também

  • Este artigo faz parte do guia para desenvolvedores 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.