你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
租赁容器
Lease Container
操作针对删除操作建立并管理容器上的锁。 锁的持续时间可以是 15 到 60 秒,也可以是无限期。
可以在以下模式之一中调用 Lease Container
操作:
Acquire
,用于请求新的租约。Renew
,用于续订现有的租约。Change
,用于更改现有租约的 ID。Release
,如果不再需要租约,则释放租约,以便另一个客户端可以立即获取针对容器的租约。Break
,以结束租约,但请确保其他客户端在当前租约期到期之前无法获取新租约。
注意
版本 2012-02-12 和更高版本中提供了 Lease Container
操作。
请求
可以按如下所示构造 Lease Container
请求。 建议使用 HTTPS。 将 myaccount 替换为存储帐户的名称。
方法 | 请求 URI | HTTP 版本 |
---|---|---|
PUT |
https://myaccount.blob.core.windows.net/mycontainer?comp=lease&restype=container |
HTTP/1.1 |
若要指定根容器,请输入 $root
作为容器名称。
模拟存储服务 URI
对模拟存储服务发出请求时,将模拟器主机名和Azure Blob 存储端口指定为 127.0.0.1:10000
,后跟模拟的存储帐户名称。
方法 | 请求 URI | HTTP 版本 |
---|---|---|
PUT |
http://127.0.0.1:10000/mycontainer?comp=lease&restype=container |
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> |
续订、更改或释放租约所必需的。 可以采用任何有效的 GUID 字符串格式指定 的值 x-ms-lease-id 。 有关有效格式的列表 ,请参阅 Guid 构造函数 (字符串) 。 |
x-ms-lease-action: <acquire ¦ renew ¦ change ¦ release ¦ break> |
acquire :请求新的租约。 如果容器没有活动租约,Blob 存储会在容器上创建租约,并返回新的租约 ID。 如果容器具有活动租约,则只能使用活动租约 ID 请求新租约。 但是,可以为永不过期的租约指定一个新的 x-ms-lease duration ,包括负 (-1) 。renew :续订租约。 如果请求中指定的租约 ID 与容器关联的 ID 匹配,则可以续订租约。 请注意,即使租约已过期,也可以续订该租约,前提是该容器自该租约到期后未再次租用。 在续订租约时,将重置租约持续时间时钟。change :更改活动租约的租约 ID。 必须在 change 中包含当前租约 ID,并在 中包含x-ms-lease-id x-ms-proposed-lease-id 新的租约 ID。release :释放租约。 如果请求中指定的租约 ID 与容器关联的 ID 匹配,则可以释放租约。 释放租约允许另一个客户端在发布完成后立即获取容器的租约。break :如果容器具有活动租约,则中断该租约。 租约中断后,无法续订。 任何授权的请求都可能会中断租约。 无需请求即可指定匹配的租约 ID。 当租约中断时,允许租用中断期过。 在此期间,只能对容器执行 break 和 release 租用操作。 在租约成功中断后,响应指示可以获取新租约之前等待的时间间隔(秒)。也可以释放已中断的租约。 客户端可以立即获取已释放的容器租约。 |
x-ms-lease-break-period: N |
可选。 对于操作 break ,此标头是租约中断前应继续的建议持续时间,介于 0 到 60 秒之间。 仅当此中断期短于租约的剩余时间时,才使用此中断期。 如果超过租约的剩余时间,则使用租约的剩余时间。 在中断期到期之前,新租约将不可用,但租约的保留期可能长于中断期。 如果此标头未随操作一 break 起显示,则固定持续时间的租约将在剩余租约期过后中断,无限租约将立即中断。 |
x-ms-lease-duration: -1 ¦ n seconds |
对于 acquire 是必需的。 指定租约的持续时间(秒),或者指定 -1 以表示永不过期的租约。 有限期租约在 15 到 60 秒之间。 不能使用 renew 或 change 更改租约持续时间。 |
x-ms-proposed-lease-id: <ID> |
对于 是 acquire 可选的,对于 是必需的 change 。 建议的租约 ID,采用 GUID 字符串格式。 如果建议的租约 ID 格式不正确,Blob 存储将返回 400 (Invalid request) 。 有关有效格式的列表 ,请参阅 Guid 构造函数 (字符串) 。 |
Origin |
可选。 指定从中发出请求的来源。 如果存在此标头,则会在响应中产生跨域资源共享 (CORS) 标头。 有关详细信息 ,请参阅对存储服务的 CORS 支持 。 |
x-ms-client-request-id |
可选。 提供客户端生成的不透明值,其中包含 1-kiB (KiB) 配置日志记录时记录在日志中的字符限制。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅监视Azure Blob 存储。 |
此操作还支持仅在满足指定条件时才使用条件标头运行操作。 有关详细信息,请参阅 为 Blob 存储操作指定条件标头。
请求正文
无。
示例请求
以下示例请求说明了如何获取租约:
Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=lease HTTP/1.1
Request Headers:
x-ms-version: 2012-02-12
x-ms-lease-action: acquire
x-ms-lease-duration: -1
x-ms-proposed-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5
x-ms-date: Thu, 26 Jan 2012 23:30:18 GMT
Authorization: SharedKey testaccount1:esSKMOYdK4o+nGTuTyeOLBI+xqnqi6aBmiW4XI699+o=
响应
响应包括 HTTP 状态代码和一组响应标头。
状态代码
为租约操作返回的成功状态代码如下所示:
Acquire
:此操作成功后返回状态代码 201(已创建)。Renew
:此操作成功后返回状态代码 200(正常)。Change
:此操作成功后返回状态代码 200(正常)。Release
:此操作成功后返回状态代码 200(正常)。Break
:此操作成功后返回状态代码 202(已接受)。
有关状态代码的信息,请参阅 状态和错误代码。
响应头
此操作的响应包括以下标头。 响应还可以包含其他标准 HTTP 标头。 所有标准标头都符合 HTTP/1.1 协议规范。
语法 | 说明 |
---|---|
ETag |
ETag 容器的 。 针对版本 2013-08-15 及更高版本发出的请求返回此标头,并且 ETag 值在引号中。
Lease Container 针对版本 2013-08-15 及更高版本执行的操作不会修改此属性,但以前的版本会修改此属性。 |
Last-Modified |
针对版本 2013-08-15 及更高版本发出的请求返回。 返回上次修改容器的日期和时间。 有关详细信息,请参阅 标头中日期时间值的表示形式。 修改容器或其属性或元数据的任何操作都更新上次修改时间。 这包括设置容器的权限。 对 Blob 的操作不会影响容器的上次修改时间。 Lease Container 针对版本 2013-08-15 及更高版本执行的操作不会修改此属性,但以前的版本会修改此属性。 |
x-ms-lease-id: <id> |
请求租约时,Blob 存储将返回唯一的租约 ID。 虽然租约处于活动状态,但是任何请求都必须包括租约 ID 才能删除容器,或续订、更改或释放租约。 成功的续订操作还会返回活动租约的租约 ID。 |
x-ms-lease-time: seconds |
在租约期内的大约剩余时间(秒)。 仅为成功的租约中断请求返回此标头。 如果立即中断,则返回 0。 |
x-ms-request-id |
此标头唯一标识发出的请求,可用于对请求进行故障排除。 有关详细信息,请参阅 API 操作疑难解答。 |
x-ms-version |
指示用于运行请求的 Blob 存储版本。 针对 2009-09-19 和更高版本发出的请求将返回此标头。 |
日期 | 一个 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 。 该值最多为 1,024 个可见 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: 2012-02-12
x-ms-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5
Date: Thu, 26 Jan 2012 23:30:18 GMT
授权
在 Azure 存储中调用任何数据访问操作时,都需要授权。 可以授权操作, Lease Container
如以下部分所述。
重要
Microsoft 建议将 Microsoft Entra ID 与托管标识配合使用来授权对 Azure 存储的请求。 与共享密钥授权相比,Microsoft Entra ID提供优越的安全性和易用性。
Azure 存储支持使用 Microsoft Entra ID 授权对 Blob 数据的请求。 使用 Microsoft Entra ID,可以使用 Azure 基于角色的访问控制 (Azure RBAC) 向安全主体授予权限。 安全主体可以是用户、组、应用程序服务主体或 Azure 托管标识。 安全主体由 Microsoft Entra ID 进行身份验证,以返回 OAuth 2.0 令牌。 然后,可以使用令牌来授权针对 Blob 存储的请求。
若要详细了解如何使用Microsoft Entra ID授权,请参阅使用 Microsoft Entra ID 授权访问 blob。
权限
以下 RBAC 操作对于Microsoft Entra用户、组、托管标识或服务主体调用Lease Container
操作以及包含此操作的最小特权内置 Azure RBAC 角色是必需的:
- Azure RBAC 操作: Microsoft.Storage/storageAccounts/blobServices/containers/write
- 最低特权内置角色: 存储 Blob 数据参与者
若要详细了解如何使用 Azure RBAC 分配角色,请参阅 分配 Azure 角色以访问 Blob 数据。
注解
容器租约提供对容器的排他删除访问。 容器租约仅控制使用“删除容器”操作删除 容器 的能力。 要删除具有活动租约的容器,客户端必须将活动租约 ID 包括在删除请求中。 如果未包含租约 ID,则操作将失败,) 412 (前置条件失败。 所有其他容器操作在租用容器上都成功,但不包括租约 ID。 在获取租约时指定的持续时间内授予租约,该持续时间可以是 15 到 60 秒,也可以是无限期。
在客户端获取租约时,将返回租约 ID。 如果未在获取请求中指定租约 ID,Blob 存储将生成一个租约 ID。 客户端可以使用此租约 ID 续订租约、更改其租约 ID 或释放租约。 下图显示了租约的可能状态,以及导致租约状态更改的命令或事件。
租约可以处于五个状态之一,具体取决于租约是锁定还是已解锁,以及该租约在该州是否可续订。 上图中显示的租用操作会导致状态转换。
续订状态 | 锁定的租约 | 已解锁租约 |
---|---|---|
可续订租约 | 已租用 | 已过期 |
不可续订的租赁 | 重大 | 已中断,可用 |
Available
,租约已解锁而可以获取。 允许的操作:acquire
。Leased
,租约已锁定。 允许的操作:acquire
(仅相同租约 ID)、renew
、change
、release
和break
。Expired
,租约已过期。 允许的操作:acquire
、renew
、release
和break
。Breaking
,租约已中断,但租约将继续锁定,直到中断期过期。 允许的操作:release
和break
。Broken
,租约已中断,中断期已过期。 允许的操作:acquire
、release
和break
。
Blob 存储在容器租约过期后保留租约 ID。 客户端可以使用其过期的租约 ID 续订或释放租约。 如果客户端尝试使用其以前的租约 ID 续订或释放过期的租约,并且请求失败,则容器已再次租用或删除,因为客户端的租约是上次活动状态。
如果租约过期而不是显式释放,客户端可能需要等待长达一分钟,然后才能获取容器的新租约。 但是,客户端可以通过过期的租约 ID 立即续订租约。
容器的 Last-Modified-Time
属性不会通过调用 Lease Container
来更新。
下面的表说明对具有各种租约状态的租约的容器进行操作的结果。 字母 (A) 、 (B) 和 (C) 表示租约 ID, (X) 表示 Blob 存储生成的租约 ID。
按租约状态对容器进行使用尝试的结果
操作 | 可用 | 已租用 (A) | 正在中断 (A) | 已中断 (A) | 已过期 (A) |
---|---|---|---|---|---|
使用 (A) 删除 | 失败 (412) | 已租用 (A),删除成功 | 正在中断 (A),删除成功 | 失败 (412) | 失败 (412) |
使用 (B) 删除 | 失败 (412) | (409) 失败 | 失败 (412) | 失败 (412) | 失败 (412) |
删除,未指定租约 | 可用,删除成功 | 失败 (412) | 失败 (412) | 可用,删除成功 | 可用,删除成功 |
使用 (A) 的其他操作 | 失败 (412) | 已租用 (A),操作成功 | 正在中断 (A),操作成功 | 失败 (412) | 失败 (412) |
使用 (B) 的其他操作 | 失败 (412) | (409) 失败 | (409) 失败 | 失败 (412) | 失败 (412) |
操作,未指定租约 | 可用,操作成功 | 已租用 (A),操作成功 | 正在中断 (A),操作成功 | 已中断 (A),操作成功 | 已过期 (A),操作成功 |
按租约状态对容器进行租约操作的结果
操作 | 可用 | 已租用 (A) | 正在中断 (A) | 已中断 (A) | 已过期 (A) |
---|---|---|---|---|---|
Acquire ,无建议的租约 ID |
已租用 (X) | (409) 失败 | (409) 失败 | 已租用 (X) | 已租用 (X) |
Acquire (A) |
已租用 (A) | 已租用 (A),新的持续时间 | (409) 失败 | 已租用 (A) | 已租用 (A) |
Acquire (B) |
已租用 (B) | (409) 失败 | (409) 失败 | 已租用 (B) | 已租用 (B) |
Break ,期间 = 0 |
(409) 失败 | 已中断 (A) | 已中断 (A) | 已中断 (A) | 已中断 (A) |
Break ,句点>0 |
(409) 失败 | 正在中断 (A) | 正在中断 (A) | 已中断 (A) | 已中断 (A) |
Change ,(A) 到 (B) |
(409) 失败 | 已租用 (B) | (409) 失败 | (409) 失败 | (409) 失败 |
Change ,(B) 到 (A) |
(409) 失败 | 已租用 (A) | (409) 失败 | (409) 失败 | (409) 失败 |
Change ,(B) 到 (C) |
(409) 失败 | (409) 失败 | (409) 失败 | (409) 失败 | (409) 失败 |
Renew (A) |
(409) 失败 | 已租用 (A),重置到期时钟 | (409) 失败 | (409) 失败 | 已租用 (A) |
Renew (B) |
(409) 失败 | (409) 失败 | (409) 失败 | (409) 失败 | (409) 失败 |
Release (A) |
(409) 失败 | 可用 | 可用 | 可用 | 可用 |
Release (B) |
(409) 失败 | (409) 失败 | (409) 失败 | (409) 失败 | (409) 失败 |
持续时间过期 | 可用 | 已过期 (A) | 已中断 (A) | 已中断 (A) | 已过期 (A) |
计费
定价请求可能源自使用 Blob 存储 API 的客户端,可以直接通过 Blob 存储 REST API 或 Azure 存储客户端库。 这些请求按事务产生费用。 事务类型会影响帐户的收费方式。 例如,读取事务累算到与写入事务不同的计费类别。 下表显示了基于存储帐户类型的请求的计费类别 Lease Container
:
操作 | 存储帐户类型 | 计费类别 |
---|---|---|
租用容器 (获取、发布、续订) | 高级块 blob 标准常规用途 v2 |
其他操作 |
租用容器 (获取、发布、续订) | 标准常规用途 v1 | 读取操作 |
租用容器 (中断、更改) | 高级块 blob 标准常规用途 v2 |
其他操作 |
租用容器 (中断、更改) | 标准常规用途 v1 | 写入操作 |
若要了解指定计费类别的定价,请参阅Azure Blob 存储定价。