Lease Blob (Аренда BLOB-объекта)

Операция Lease Blob создает блокировку большого двоичного объекта и управляет ею для операций записи и удаления. Длительность блокировки может составлять 15–60 секунд либо быть бесконечной. В версиях до 12.02.2012 длительность блокировки составляет 60 секунд.

Важно!

Начиная с версии 2012-02-12, некоторые операции Lease Blob работают не так, как в предыдущих версиях. Например, в предыдущих версиях можно было продлить аренду после ее выпуска. Начиная с версии 2012-02-12 этот запрос на аренду завершается сбоем, но вызовы, использующие более старые версии, по-прежнему Lease Blob успешно. Список изменений в поведении этой операции см. в разделе "Примечания" далее в этой статье.

Операцию можно вызвать Lease Blob в одном из следующих режимов:

  • Acquire — запрос новой аренды;

  • Renew — продление существующей аренды;

  • Change — изменение идентификатора существующей аренды;

  • Release, чтобы освободить аренду, если она больше не нужна, чтобы другой клиент сразу же получил аренду большого двоичного объекта.

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

Запрос

Запрос можно создать Lease Blob следующим образом. Рекомендуется использовать протокол HTTPS. Замените myaccount именем своей учетной записи хранения.

URI запроса метода PUT параметр "Версия HTTP"
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease HTTP/1.1

URI эмулированной службы хранилища

При выполнении запроса к эмулированной службе хранилища укажите имя узла эмулятора и порт Хранилище BLOB-объектов Azure в качестве 127.0.0.1:10000, за которым следует эмулированное имя учетной записи хранения.

URI запроса метода PUT параметр "Версия HTTP"
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=lease HTTP/1.0

HTTP/1.1

Дополнительные сведения см. в статье Использование эмулятора Azurite для разработки локальной службы хранилища Azure.

Параметры универсального кода ресурса (URI)

В URI запроса можно указать следующий дополнительный параметр.

Параметр Описание
timeout Необязательный элемент. Параметр timeout указывается в секундах. Дополнительные сведения см. в разделе Настройка времени ожидания для операций с хранилищем BLOB-объектов.

Заголовки запросов

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

Заголовок запроса Описание
Authorization Обязательный. Указывает схему авторизации, имя учетной записи и подпись. Дополнительные сведения см. в статье Авторизация запросов к Службе хранилища Azure.
Date или x-ms-date Обязательный. Задает время запроса в формате UTC. Дополнительные сведения см. в статье Авторизация запросов к Службе хранилища Azure.
x-ms-version Необязательный элемент. Задает версию операции, используемой для этого запроса. Дополнительные сведения см. в разделе Управление версиями для служб хранилища Azure.
x-ms-lease-id: <ID> Обязательно при продлении, изменении или освобождении аренды.

Значение можно указать в любом допустимом x-ms-lease-id формате строки GUID. Список допустимых форматов см. в разделе Конструктор GUID (строка).
x-ms-lease-action: <acquire ¦ renew ¦ change ¦ release ¦ break> acquire: запрашивает новую аренду. Если у большого двоичного объекта нет активной аренды, хранилище BLOB-объектов создает аренду большого двоичного объекта и возвращает новый идентификатор аренды. Если большой двоичный объект имеет активную аренду, вы можете запросить новую аренду только с помощью идентификатора активной аренды. Однако можно указать новый x-ms-lease-duration, включая отрицательный (-1) для аренды, срок действия которого не истекает.

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

change: версия 12.02.2012 и более поздняя. Изменяет идентификатор активной аренды. Объект change должен содержать текущий идентификатор аренды в x-ms-lease-id, а новый идентификатор аренды — в x-ms-proposed-lease-id.

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

break: прерывает аренду, если большой двоичный объект имеет активную аренду. После разрыва аренды ее нельзя будет продлить. Любой авторизованный запрос может нарушить аренду; запрос не требуется для указания соответствующего идентификатора аренды. При прерывании аренды допускается период перерыва аренды, в течение которого breakrelease и являются единственными операциями аренды большого двоичного объекта. После успешного прекращения аренды ответ указывает интервал в секундах, прежде чем можно будет приобрести новую аренду.

Неисправная аренда также может быть освобождена. В этом случае другой клиент может сразу же получить аренду большого двоичного объекта.
x-ms-lease-break-period: N Необязательный элемент. Версия 12.02.2012 и более поздняя. Для операции break это предполагаемая длительность аренды в секундах, прежде чем она может быть прекращена (0–60 секунд). Этот период перерыва используется только в том случае, если он короче времени, оставшегося в аренде. В противном случае используется оставшееся время аренды. Новая аренда не будет доступна до истечения периода перерыва, но она может храниться дольше, чем период перерыва. Если этот заголовок не отображается вместе с операцией break , по истечении оставшегося периода аренды прерывается период аренды с фиксированной длительностью и немедленно прерывается бесконечная аренда.
x-ms-lease-duration: -1 ¦ n seconds Версия 12.02.2012 и более поздняя. Только разрешено и требуется для acquire операции. Указывает срок аренды в секундах или отрицательное число (-1) для бесконечной аренды. Конечная аренда может находиться в пределах от 15 до 60 секунд. Длительность аренды нельзя изменить с помощью renew или change.
x-ms-proposed-lease-id: <ID> Версия 12.02.2012 и более поздняя. Необязательный параметр для acquireи обязательный для change. Идентификатор предлагаемой аренды в формате строки GUID. Хранилище BLOB-объектов возвращает значение 400 (Invalid request) , если предлагаемый идентификатор аренды не в правильном формате. Список допустимых форматов см. в разделе Конструктор GUID (строка).
Origin Необязательный элемент. Указывает источник, от которого выдан запрос. Наличие этого заголовка приводит к появлению в ответе заголовков совместного использования ресурсов (CORS). Дополнительные сведения см. в разделе Поддержка CORS для служб хранилища .
x-ms-client-request-id Необязательный элемент. Предоставляет созданное клиентом непрозрачное значение с ограничением в 1 кибибайт (КиБ), которое записывается в журналы при настройке ведения журнала. Мы настоятельно рекомендуем использовать этот заголовок для сопоставления действий на стороне клиента с запросами, получаемыми сервером. Дополнительные сведения см. в разделе Мониторинг Хранилище BLOB-объектов Azure.

Эта операция также поддерживает использование условных заголовков для выполнения операции, только если выполняется указанное условие. Дополнительные сведения см. в разделе Указание условных заголовков для операций с хранилищем BLOB-объектов.

Текст запроса

Нет.

Пример запроса

В следующем примере показан запрос на приобретение аренды.

  
Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease HTTP/1.1  
  
Request Headers:  
x-ms-version: 2015-02-21  
x-ms-lease-action: acquire  
x-ms-lease-duration: -1  
x-ms-proposed-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5  
x-ms-date: <date>  
Authorization: SharedKey testaccount1:esSKMOYdK4o+nGTuTyeOLBI+xqnqi6aBmiW4XI699+o=  
  

Ответ

Ответ включает код состояния HTTP и набор заголовков ответа.

Код состояния

Коды состояния успешного выполнения для операций аренды.

  • Acquire: успешная операция возвращает код состояния 201 (создано).

  • Renew: успешная операция возвращает код состояния 200 (ОК).

  • Change: успешная операция возвращает код состояния 200 (ОК).

  • Release: успешная операция возвращает код состояния 200 (ОК).

  • Break: успешная операция возвращает код состояния 202 (Принято).

Сведения о кодах состояния см. в разделе Коды состояния и ошибок.

Заголовки ответов

Ответ для этой операции включает следующие заголовки. Ответ также может содержать дополнительные стандартные заголовки HTTP. Все стандартные заголовки соответствуют спецификации протокола HTTP/1.1.

Синтаксис Описание
ETag Содержит значение, которое можно использовать для условного выполнения операций. Дополнительные сведения см. в разделе Указание условных заголовков для операций с хранилищем BLOB-объектов .

Этот заголовок возвращается для запросов, выполненных в версии 2013-08-15 и более поздних версий, а ETag значение — в кавычках.

Операция Lease Blob не изменяет это свойство.
Last-Modified Дата и время последнего изменения BLOB-объекта. Дополнительные сведения см. в разделе Представление значений даты и времени в заголовках.

Любая операция записи в большой двоичный объект, включая обновления метаданных или свойств, изменяет время последнего изменения большого двоичного объекта. Операция Lease Blob не изменяет это свойство.
x-ms-lease-id: <id> При запросе аренды Хранилище BLOB-объектов возвращает уникальный идентификатор аренды. Пока аренда активна, следует включать ее идентификатор с любым запросом записи в большой двоичный объект, продления, изменения или освобождения аренды.

Успешная операция продления также возвращает идентификатор активной аренды.
x-ms-lease-time: seconds Приблизительное время, оставшееся до истечения срока аренды в секундах. Этот заголовок возвращается только для успешного запроса прекращения аренды. Если разрыв является немедленным, 0 возвращается значение .
x-ms-request-id Этот заголовок однозначно идентифицирует выполненный запрос и может использоваться для устранения неполадок с запросом. Дополнительные сведения см. в разделе Устранение неполадок с операциями API.
x-ms-version Указывает версию Хранилища BLOB-объектов, используемую для выполнения запроса. Этот заголовок возвращается для запросов к версии 2009-09-19 и более поздним версиям.
Date Значение даты и времени в формате UTC, указывающее время, когда был инициирован ответ. Служба создает это значение.
Access-Control-Allow-Origin Возвращается, если запрос содержит Origin заголовок, а CORS включен с правилом сопоставления. В случае совпадения этот заголовок возвращает значение заголовка источника запроса.
Access-Control-Expose-Headers Возвращается, если запрос содержит Origin заголовок, а CORS включен с правилом сопоставления. Возвращает список заголовков ответа, которые должны быть предоставлены клиенту или отправителю запроса.
Access-Control-Allow-Credentials Возвращается, если запрос включает заголовок Origin , а CORS включен с правилом сопоставления, которое не разрешает все источники. Этот заголовок имеет значение true.
x-ms-client-request-id Этот заголовок можно использовать для устранения неполадок с запросами и соответствующими ответами. Значение этого заголовка равно значению заголовка x-ms-client-request-id , если он присутствует в запросе. Значение равно не более 1024 видимых символов ASCII. Если заголовок x-ms-client-request-id отсутствует в запросе, он не будет присутствовать в ответе.

Текст ответа

Нет.

Пример ответа

Ниже приведен пример ответа на запрос приобретения аренды.

Response Status:  
HTTP/1.1 201 Created  
  
Response Headers:  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: cc6b209a-b593-4be1-a38a-dde7c106f402  
x-ms-version: 2015-02-21  
x-ms-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5  
Date: <date>  
  

Авторизация

При вызове любой операции доступа к данным в службе хранилища Azure требуется авторизация. Вы можете авторизовать Lease Blob операцию, как описано ниже.

Служба хранилища Azure поддерживает использование Microsoft Entra ID для авторизации запросов к данным BLOB-объектов. С помощью Microsoft Entra ID можно использовать управление доступом на основе ролей Azure (Azure RBAC) для предоставления разрешений субъекту безопасности. Субъект безопасности может быть пользователем, группой, субъектом-службой приложения или управляемым удостоверением Azure. Субъект безопасности проходит проверку подлинности с помощью Microsoft Entra ID для возврата маркера OAuth 2.0. Затем маркер можно использовать для авторизации запроса к службе BLOB-объектов.

Дополнительные сведения об авторизации с помощью Microsoft Entra ID см. в статье Авторизация доступа к BLOB-объектам с помощью Microsoft Entra ID.

Разрешения

Ниже перечислены действия RBAC, необходимые для Microsoft Entra пользователя, группы или субъекта-службы для вызова Lease Blob операции, а также встроенная роль Azure RBAC с наименьшими привилегиями, которая включает это действие:

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

Комментарии

Аренда большого двоичного объекта предоставляет монопольный доступ к большому двоичному объекту для записи в него и удаления. Для записи в большой двоичный объект с активной арендой клиент должен включить идентификатор активной аренды в запрос записи. Аренда предоставляется на период, указанный при получении аренды. Эта длительность может быть от 15 до 60 секунд или бесконечной.

Когда клиент приобретает аренду, возвращается идентификатор аренды. Хранилище BLOB-объектов создает идентификатор аренды, если он не указан в запросе на получение. Клиент может использовать этот идентификатор аренды для продления аренды, изменения идентификатора аренды или освобождения аренды.

Когда аренда активна, идентификатор аренды необходимо включать в запрос любой из следующих операций:

Если идентификатор аренды не включен, эти операции завершаются сбоем в арендованном большом двоичном объекте с 412 – Precondition failedпомощью .

Следующие операции с арендованным BLOB-объектом успешно выполняются без включения идентификатора аренды:

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

Все операции с контейнерами разрешены в контейнере, который включает большие двоичные объекты с активной арендой, включая удаление контейнера. Таким образом, контейнер можно удалить, даже если большие двоичные объекты в нем имеют активные аренды. Используйте операцию Аренды контейнера для управления правами на удаление контейнера.

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

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

Схема, показывающая состояния аренды BLOB-объекта и триггеры изменения состояния.

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

Состояние продления Заблокированная аренда Разблокированная аренда
Возобновляемая аренда Арендовано Срок действия истек
Невозобновляемая аренда Критическое Прекращенная, доступна
  • Available: аренда разблокирована и может быть приобретена. Разрешенное действие: acquire.

  • Leased: аренда заблокирована. Допустимые действия: acquire (только тот же идентификатор аренды), renew, change, releaseи break.

  • Expired: срок аренды истек. Допустимые действия: acquire, renew, releaseи break.

  • Breaking: аренда была нарушена, но аренда будет по-прежнему заблокирована до истечения периода перерыва. Допустимые действия: release и break.

  • Broken: аренда нарушена, и истек период перерыва. Допустимые действия: acquire, releaseи break.

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

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

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

Обратите внимание, что аренда не может быть предоставлена для большого двоичного объекта snapshot, так как моментальные снимки доступны только для чтения. Запрос аренды для моментального снимка завершается кодом состояния 400 (неверный запрос).

Свойство большого Last-Modified-Time двоичного объекта не обновляется вызовами Lease Blob.

В следующих таблицах показаны результаты действий с большими двоичными объектами с арендой в разных состояниях. Буквы (A), (B) и (C) представляют идентификаторы аренды, а (X) — идентификатор аренды, созданный хранилищем BLOB-объектов.

Результаты действий с большими двоичными объектами по состоянию аренды

Действие Доступно Арендовано (А) Прекращение (А) Прекращено (А) Истек срок (А)
Запись с помощью (A) Ошибка (412) Арендовано (А), успешная запись Прекращение (А), успешная запись Ошибка (412) Ошибка (412)
Запись с помощью (B) Ошибка (412) Сбой (409) Ошибка (412) Ошибка (412) Ошибка (412)
Запись, аренда не указана Доступно, успешная запись Ошибка (412) Ошибка (412) Доступно, успешная запись Доступно, успешная запись
Чтение с помощью (A) Ошибка (412) Арендовано (А), успешное чтение Прекращение (А), успешное чтение Ошибка (412) Ошибка (412)
Чтение с помощью (B) Ошибка (412) Сбой (409) Сбой (409) Ошибка (412) Ошибка (412)
Чтение, аренда не указана Доступно, успешное чтение Арендовано (А), успешное чтение Прекращение (А), успешное чтение Прекращение (А), успешное чтение Истек срок (А), успешное чтение

Результаты операций с большими двоичными объектами по состоянию аренды

Действие Доступно Арендовано (А) Прекращение (А) Прекращено (А) Истек срок (А)
Acquire — предлагаемый идентификатор аренды отсутствует Арендовано (X) Сбой (409) Сбой (409) Арендовано (X) Арендовано (X)
Acquire (A) Арендовано (А) Арендовано (А), новый срок Сбой (409) Арендовано (А) Арендовано (А)
Acquire (B) Арендовано (B) Сбой (409) Сбой (409) Арендовано (B) Арендовано (B)
Break, срок=0 Сбой (409) Прекращено (А) Прекращено (А) Прекращено (А) Прекращено (А)
Break, период>0 Сбой (409) Прекращение (А) Прекращение (А) Прекращено (А) Прекращено (А)
Change, (A) в (B) Сбой (409) Арендовано (B) Сбой (409) Сбой (409) Сбой (409)
Change, (B) в (A) Сбой (409) Арендовано (А) Сбой (409) Сбой (409) Сбой (409)
Change, (B) в (C) Сбой (409) Сбой (409) Сбой (409) Сбой (409) Сбой (409)
Renew (A) Сбой (409) Арендовано (А), сброс срока Сбой (409) Сбой (409) Leased(A), если большой двоичный объект не был изменен.

Ошибка (409), если большой двоичный объект был изменен.
Renew (B) Сбой (409) Сбой (409) Сбой (409) Сбой (409) Сбой (409)
Release (A) Сбой (409) Доступно Доступно Доступно Доступно
Release (B) Сбой (409) Сбой (409) Сбой (409) Сбой (409) Сбой (409)
Срок истекает Доступно Истек срок (А) Прекращено (А) Прекращено (А) Истек срок (А)

Изменения в аренде BLOB-объекта, появившиеся в версии 2012-02-12

В следующем списке указаны изменения в Lease Blob поведении, появившиеся в версии 2012-02-12.

  • Вызов для Lease Blob получения аренды теперь должен содержать заголовок длительности аренды. При попытке получить аренду без указания срока аренды служба возвращает 400 Bad Request – Missing required header.

  • После освобождения аренды ее уже нельзя продлить. Если попытаться сделать это, служба возвращает 409 Conflict – The lease ID specified did not match the lease ID for the blob. Приложения, которые вызывали выпуск, а затем вызывали продление ETag , теперь должны сохранять из вызова выпуска. Затем приложения должны вызывать метод acquire с условным заголовком If-Match , чтобы получить аренду только в том случае, если большой двоичный объект не изменился.

  • После освобождения аренды ее уже нельзя прекратить. Если попытаться сделать это, служба возвращает 409 Conflict – There is currently no lease on the blob.

  • Теперь можно прекратить прекращение или прекращенную аренду и сделать операции прекращения идемпотентными. В предыдущих версиях такое действие завершалось ошибкой 409 Conflict – The lease has already been broken and cannot be broken again. Это новшество позволяет уменьшить время прекращения. Если вы прерываете аренду, которая находится в состоянии прерывания, и включаете более короткий срок, чем оставшийся период перерыва, используется более короткая длительность.

Выставление счетов

Запросы на ценообразование могут поступать от клиентов, использующих API хранилища BLOB-объектов, напрямую через REST API хранилища BLOB-объектов или из клиентской библиотеки службы хранилища Azure. Эти запросы начисляют плату за транзакцию. Тип транзакции влияет на способ оплаты учетной записи. Например, транзакции чтения начисляются к категории выставления счетов, отличной от категории операций записи. В следующей таблице показана категория выставления счетов для Lease Blob запросов на основе типа учетной записи хранения.

Операция Тип учетной записи хранения Категория выставления счетов
Аренда BLOB-объекта (приобретение, выпуск, продление) Блочный BLOB-объект (ценовая категории "Премиум")
Общего назначения версии 2 (цен. категория "Стандартный")
Другие операции
Аренда BLOB-объекта (приобретение, выпуск, продление) Стандартная общего назначения версии 1 Операции чтения
Аренда BLOB-объекта (перерыв, изменение) Блочный BLOB-объект (ценовая категории "Премиум")
Общего назначения версии 2 (цен. категория "Стандартный")
Другие операции
Аренда BLOB-объекта (перерыв, изменение) Стандартная общего назначения версии 1 Операции записи

См. также раздел

new-blob-lease-features-infinite-leases-smaller-lease-times-and-more.aspx)
Авторизация запросов к службе хранилища Azure
Коды состояний и ошибок
Коды ошибок хранилища BLOB-объектов
Аренда контейнера