Поделиться через


Создание аренды контейнеров и управление ими с помощью TypeScript

В этой статье показано, как создавать аренды контейнеров и управлять ими с помощью клиентской библиотеки служба хранилища Azure для JavaScript. Клиентская библиотека может использовать для получения, продления, выпуска и прерывания аренды контейнеров.

Необходимые компоненты

  • В примерах этой статьи предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для JavaScript. Сведения о настройке проекта, включая установку пакетов, импорт модулей и создание авторизованного клиентского объекта для работы с ресурсами данных, см. в статье "Начало работы с Хранилище BLOB-объектов Azure и TypeScript".
  • Механизм авторизации должен иметь разрешения на работу с арендой контейнера. Дополнительные сведения см. в руководстве по авторизации для следующей операции REST API:

Сведения об аренде контейнеров

Аренда устанавливает блокировку контейнера для операций удаления и управляет ими. Длительность блокировки может составлять 15–60 секунд либо быть бесконечной. Аренда контейнера предоставляет эксклюзивный доступ к удалению контейнера. Аренда контейнера управляет только возможностью удаления контейнера с помощью операции REST API удаления контейнера . Для удаления контейнера с активной арендой клиент наряду с запросом на удаление должен ввести активный идентификатор аренды. Все остальные операции контейнера успешно выполняются в арендованном контейнере без идентификатора аренды. Если вы включили обратимое удаление контейнера, можно восстановить удаленные контейнеры.

Дополнительные сведения о состояниях аренды и о том, когда можно выполнить данное действие по аренде, см. в разделе "Состояния аренды" и действия.

Операции аренды обрабатываются классом BlobLeaseClient , который предоставляет клиенту все операции аренды для больших двоичных объектов и контейнеров. Дополнительные сведения об аренде BLOB-объектов с помощью клиентской библиотеки см. в статье "Создание аренды BLOB-объектов и управление ими с помощью TypeScript".

Получение аренды

При получении аренды контейнера вы получите идентификатор аренды, который код может использовать для работы с контейнером. Если контейнер уже имеет активную аренду, можно запросить только новую аренду с помощью активного идентификатора аренды. Однако можно указать новую длительность аренды.

Чтобы получить аренду, создайте экземпляр класса BlobLeaseClient , а затем используйте один из следующих методов:

Следующий пример получает 30-секундную аренду контейнера:

async function acquireContainerLeaseAsync(blobContainerClient: ContainerClient) {
  const leaseClient: BlobLeaseClient = blobContainerClient.getBlobLeaseClient();
  await leaseClient.acquireLease(30);
  return leaseClient;
}

Продление аренды

Вы можете продлить аренду контейнера, если идентификатор аренды, указанный в запросе, соответствует идентификатору аренды, связанному с контейнером. Аренда может быть продлена даже в том случае, если срок его действия истек, если контейнер еще не был арендован с момента истечения срока действия этой аренды. При продлении аренды длительность сброса аренды.

Чтобы продлить аренду, используйте один из следующих методов в экземпляре BlobLeaseClient :

В следующем примере возобновляется аренда контейнера:

async function renewContainerLeaseAsync(blobContainerClient: ContainerClient, leaseID: string) {
  const leaseClient: BlobLeaseClient = blobContainerClient.getBlobLeaseClient(leaseID);
  await leaseClient.renewLease();
}

Освобождение аренды

Вы можете освободить аренду контейнера, если идентификатор аренды, указанный в запросе, соответствует идентификатору аренды, связанному с контейнером. Освобождение аренды позволяет другому клиенту получить аренду контейнера сразу после завершения выпуска.

Вы можете освободить аренду с помощью одного из следующих методов в экземпляре BlobLeaseClient :

В следующем примере освобождается аренда контейнера:

async function releaseContainerLeaseAsync(blobContainerClient: ContainerClient, leaseID: string) {
  const leaseClient: BlobLeaseClient = blobContainerClient.getBlobLeaseClient(leaseID);
  await leaseClient.releaseLease();
}

Прерывание аренды

Вы можете разорвать аренду контейнера, если контейнер имеет активную аренду. Любой авторизованный запрос может нарушить аренду; Запрос не требуется для указания соответствующего идентификатора аренды. Аренда не может быть продлена после того, как она нарушена, и разрыв аренды предотвращает получение новой аренды до истечения первоначального срока аренды или освобождения.

Вы можете разорвать аренду с помощью одного из следующих методов в экземпляре BlobLeaseClient :

В следующем примере прерывается аренда контейнера:

async function breakContainerLeaseAsync(blobContainerClient: ContainerClient, breakPeriod: number) {
  const leaseClient: BlobLeaseClient = blobContainerClient.getBlobLeaseClient();
  await leaseClient.breakLease(breakPeriod);
}

Состояния аренды и действия

На следующей схеме показаны пять состояний аренды, а также команды или события, вызывающие изменение состояния аренды.

A diagram showing container lease states and state change triggers.

В следующей таблице перечислены пять состояний аренды, краткое описание каждого из них и список действий аренды, разрешенных в заданном состоянии. Эти действия аренды вызывают переходы состояния, как показано на схеме.

Состояние аренды Description Разрешенные действия аренды
Доступно Аренда разблокирована и может быть приобретена. acquire
Аренду Аренда заблокирована. acquire (один и тот же идентификатор аренды), renew, change, releaseи break
Срок действия истек Срок аренды истек. acquire, renew, release и break
Нарушение Аренда была нарушена, но аренда будет по-прежнему заблокирована до истечения периода перерыва. release и break.
Неисправно Аренда была нарушена, и срок перерыва истек. acquire, release и break

По истечении срока аренды идентификатор аренды сохраняется службой BLOB-объектов до тех пор, пока контейнер не будет изменен или арендован снова. Клиент может попытаться продлить или освободить аренду с помощью идентификатора аренды с истекшим сроком действия. Если запрос завершается ошибкой, клиент знает, что контейнер был арендован снова или контейнер был удален с момента последнего активного аренды.

Если срок действия аренды истекает, а не освобождается явным образом, клиенту может потребоваться ждать до одной минуты, прежде чем будет получена новая аренда для контейнера. Однако клиент может немедленно продлить аренду с идентификатором аренды с истекшим сроком действия.

Ресурсы

Дополнительные сведения об управлении арендой контейнеров с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для JavaScript см. в следующих ресурсах.

Операции REST API

Пакет SDK Azure для JavaScript содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы JavaScript. Методы клиентской библиотеки для управления арендами контейнеров используют следующую операцию REST API:

Примеры кода

Ресурсы клиентской библиотеки

См. также