租用 Blob
此 Lease Blob
作業會建立和管理 Blob 上的鎖定,以進行寫入和刪除作業。 鎖定持續時間的範圍是 15 到 60 秒,也可以設為無限。 在 2012-02-12 之前的版本中,鎖定持續時間為 60 秒。
重要
從 2012-02-12 版開始,Lease Blob
作業不同於舊版。 例如,在舊版中,您可以在發行租用之後更新租用。 從 2012-02-12 版開始,此租用要求會失敗,但使用舊版的 Lease Blob
呼叫仍會成功。 如需此作業行為變更的清單,請參閱本文稍後的一節。
您可以在下列其中一種模式中呼叫 Lease Blob
作業:
Acquire
:要求新租用。Renew
:更新現有的租用。Change
:變更現有租用的識別碼。Release
如果不再需要租用,則為釋放租用,讓另一個用戶端可以立即取得 Blob 的租用。Break
,以結束租用,但請確定另一個用戶端在目前的租用期間到期之前,無法取得新的租用。
要求
您可以建構 Lease Blob
要求,如下所示。 建議使用 HTTPS。 以記憶體帳戶的名稱取代 myaccount 。
PUT 方法要求 URI | HTTP 版本 |
---|---|
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease |
HTTP/1.1 |
模擬記憶體服務 URI
當您對模擬記憶體服務提出要求時,請將模擬器主機名和 Azure Blob 儲存體 埠指定為 127.0.0.1:10000
,後面接著仿真的記憶體帳戶名稱。
PUT 方法要求 URI | 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> |
需要更新、變更或釋放租用。 您可以使用任何有效的 GUID 字串格式來指定 的值 x-ms-lease-id 。 如需有效格式的清單,請參閱 Guid 建構函式 (字串) 。 |
x-ms-lease-action: <acquire ¦ renew ¦ change ¦ release ¦ break> |
acquire :要求新租用。 如果 Blob 沒有作用中的租用,Blob 記憶體會在 Blob 上建立租用,並傳回新的租用標識符。 如果 Blob 有作用中的租用,您只能使用使用中租用標識碼來要求新的租用。 不過,您可以針對永不過期的租用指定新的 x-ms-lease-duration ,包括負一 (-1) 。renew :更新租用。 如果要求上指定的租用標識符符合與 Blob 相關聯的租用標識碼,您可以更新租用。 請注意,即使租用已過期,也可以更新租用,只要 Blob 自該租用到期后尚未再次修改或租用即可。 當您更新租用時,租用持續時間的時鐘會重設。change :版本 2012-02-12 和更新版本。 變更作用中租用的租用識別碼。
change 必須包含 中的x-ms-lease-id 目前租用標識碼,以及 中的x-ms-proposed-lease-id 新租用標識符。release :釋放租用。 如果要求上指定的租用標識符符合與 Blob 相關聯的租用標識碼,您可以釋放租用。 釋放租用可讓另一個用戶端在發行完成後立即取得 Blob 的租用。break :如果 Blob 有作用中的租用,則中斷租用。 租用中斷之後,就無法更新。 任何授權的要求都可以中斷租用;不需要要求即可指定相符的租用標識符。 當租用中斷時,允許租用中斷期間經過,在此期間 break ,以及 release 您可以在 Blob 上執行的唯一租用作業。 當租用成功中斷時,回應會指出可取得新租用之前的間隔秒數。已中斷的租用也可以釋出,在此情況下,另一個用戶端可以立即取得 Blob 上的租用。 |
x-ms-lease-break-period: N |
選擇性。 版本 2012-02-12 和更新版本。 就 break 作業而言,這是租用在中斷之前應持續的建議秒數,介於 0 到 60 秒之間。 只有在租用剩餘的時間還短時,才會使用此中斷期間。 如果時間較長,則會使用租用的剩餘時間。 在中斷期間到期之前,將無法使用新的租用,但租用可以保留超過中斷期間。 如果此標頭未與作業一起 break 出現,則會在剩餘租用期間經過之後中斷固定持續時間租用,而無限租用會立即中斷。 |
x-ms-lease-duration: -1 ¦ n seconds |
版本 2012-02-12 和更新版本。 只有在作業上 acquire 才允許和必要。 指定租用的持續時間 (秒數),或指定負一 (-1),代表租用永不到期。 非無限期的租用可以介於 15 到 60 秒之間。 無法使用 或 change 來變更renew 租用持續時間。 |
x-ms-proposed-lease-id: <ID> |
版本 2012-02-12 和更新版本。 選擇性的 acquire , 為 ,且 為 change 必要專案。 建議的租用識別碼,使用 GUID 字串格式。 如果建議的租用識別碼的格式不正確,Blob 記憶體會 400 (Invalid request) 傳回 。 如需有效格式的清單,請參閱 Guid 建構函式 (字串) 。 |
Origin |
選擇性。 指定發出要求的來源。 此標頭的顯示會導致在回應上跨原始資源共用 (CORS) 標頭。 如需詳細資訊 ,請參閱記憶體服務的CORS支援 。 |
x-ms-client-request-id |
選擇性。 提供客戶端產生的不透明值,其中包含設定記錄時記錄的 1 kibibyte (KiB) 字元限制。 強烈建議您使用此標頭,將用戶端活動與伺服器接收的要求相互關聯。 如需詳細資訊,請參閱監視 Azure Blob 儲存體。 |
只有在符合指定的條件時,此作業也支援使用條件標頭來執行作業。 如需詳細資訊,請參閱 指定 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 (OK)」。Change
:成功的作業會傳回狀態碼「200 (OK)」。Release
:成功的作業會傳回狀態碼「200 (OK)」。Break
:成功的作業會傳回狀態碼「202 (已接受)」。
如需狀態代碼的相關信息,請參閱 狀態和錯誤碼。
回應標頭
這項作業的回應包括下列標頭。 回應也可以包含額外的標準 HTTP 標頭。 所有標準標頭都符合 HTTP/1.1 通訊協議規格。
語法 | 描述 |
---|---|
ETag |
包含可用來有條件地執行作業的值。 如需詳細資訊 ,請參閱指定 Blob 記憶體作業的條件標頭 。 此標頭會針對針對 2013-08-15 版和更新版本提出的要求傳回,且 ETag 此值會以引號括住。作業 Lease Blob 不會修改此屬性。 |
Last-Modified |
上次修改 Blob 的日期/時間。 如需詳細資訊,請參閱 標頭中的日期時間值表示。 Blob 上的任何寫入作業 (包括 Blob 的中繼資料或屬性更新) 都會變更 Blob 的上次修改時間。 作業 Lease Blob 不會修改此屬性。 |
x-ms-lease-id: <id> |
當您要求租用時,Blob 記憶體會傳回唯一的租用標識符。 當租用為作用中時,您必須包含租用識別碼,以及寫入至 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 。 此值最多為 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: 2015-02-21
x-ms-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5
Date: <date>
授權
在 Azure 記憶體中呼叫任何數據存取作業時,需要授權。 您可以授權 Lease Blob
作業,如下所述。
重要
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 的存取權。
權限
以下是 Microsoft Entra 使用者、群組、受控識別或服務主體呼叫Lease Blob
作業所需的 RBAC 動作,以及包含此動作的最低特殊許可權 Azure RBAC 角色:
- Azure RBAC 動作:Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
- 最低特殊許可權的內建角色:記憶體 Blob 數據參與者
若要深入瞭解如何使用 Azure RBAC 指派角色,請參閱 指派 Azure 角色以存取 Blob 數據。
備註
Blob 上的租用提供寫入及刪除 Blob 的專有存取權。 若要寫入含有作用中租用的 Blob,用戶端必須包含具有寫入要求的租用識別碼。 租用會在取得租用時所指定的持續時間授與租用。 此持續時間可以是 15 到 60 秒,或無限持續時間。
當用戶端取得租用時,會傳回租用識別碼。 如果取得要求中未指定租用標識符,Blob 記憶體會產生租用標識碼。 用戶端可以使用此租用標識符來更新租用、變更其租用標識碼,或釋放租用。
當租用為作用中,租用識別碼必須包含在下列任何作業的要求:
複製目的地 Blob) 所需的 Blob (租用標識符
如果未包含租用識別碼,這些作業就會在租用的 Blob 上失敗,並具有 412 – Precondition failed
。
下列作業在租用的 Blob 上成功,而不包含租用標識碼:
取得頁面範圍 (機器翻譯)
複製 Blob (來源 blob.) 不需要租用標識符
租用 Blob (REST API) (.) 不需要
x-ms-lease-action: break
租用標識符
對於具有使用中租用之 Blob 上的作業,不需要包含租用 GET
標識碼。 不過,所有 GET
作業都支持條件式租用參數,其中只有在要求隨附的租用標識符有效時,作業才會繼續進行。
容器上允許所有容器作業,其中包含具有使用中租用的 Blob,包括 刪除容器。 因此,即使容器內的 Blob 有作用中的租用,也可以刪除容器。 使用 租用容器 作業來控制刪除容器的許可權。
租用狀態
下圖顯示租用的五個狀態,以及會導致租用狀態變更的命令或事件。
租用可以處於下列其中一種狀態,根據租用是否已鎖定或解除鎖定,以及租用是否在該狀態中可更新。 上圖中顯示的租用動作會導致狀態轉換。
更新狀態 | 鎖定的租用 | 解除鎖定的租用 |
---|---|---|
可更新租用 | 已租用 | 已過期 |
非可更新租用 | 中斷 | 中斷、可用 |
Available
:租用已解除鎖定,而且可以取得。 允許的動作:acquire
。Leased
:租用已鎖定。 允許的動作:acquire
(僅限相同的租用識別碼)、renew
、change
、release
和break
。Expired
:租用期間已過期。 允許的動作:acquire
、renew
、release
和break
。Breaking
:租用已中斷,但租用會繼續鎖定,直到中斷期間過期為止。 允許的動作:release
和break
。Broken
:租用已中斷,且中斷期間已過期。 允許的動作:acquire
、release
和break
。
租用過期之後,Blob 記憶體會維護租用標識符,直到再次修改或租用 Blob 為止。 用戶端可以使用過期的租用標識碼來嘗試更新或釋放租用。 如果作業成功,這表示 Blob 自租用標識符上次有效之後尚未變更。
如果客戶端嘗試使用先前的租用標識符來更新或釋放租用,且要求失敗,則因為用戶端的租用上次使用中,Blob 已修改或租用。 而用戶端就必須在 Blob 上取得新的租用。
如果租用到期,而不是明確釋放,用戶端可能需要等候最多一分鐘,才能取得 Blob 的新租用。 不過,如果 Blob 尚未修改,用戶端就可以立即使用其租用標識碼來更新租用。
請注意,無法為 Blob 快照集授與租用,因為快照集是唯讀的。 向快照集要求租用會導致狀態碼 400 (不正確的要求)。
對的呼叫Lease Blob
不會更新 Blob 的 Last-Modified-Time
屬性。
下表顯示租用處於各種租用狀態時,在 Blob 上執行動作的結果。 字母 (A) 、 (B) 和 (C) 代表租用標識符,而 (X) 代表 Blob 記憶體所產生的租用標識符。
Blob 上的使用嘗試結果 (依租用狀態)
動作 | 可用 | 已租用 (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),讀取成功 |
Blob 上的租用作業結果 (依租用狀態)
動作 | 可用 | 已租用 (A) | 正在中斷 (A) | 已中斷 (A) | 已過期 (A) |
---|---|---|---|---|---|
Acquire :沒有建議的租用識別碼 |
已租用 (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) | 如果 Blob 尚未修改,租用 (A) 。 失敗 (409),如果 Blob 已修改。 |
Renew (B) |
失敗 (409) | 失敗 (409) | 失敗 (409) | 失敗 (409) | 失敗 (409) |
Release (A) |
失敗 (409) | 可用 | 可用 | 可用 | 可用 |
Release (B) |
失敗 (409) | 失敗 (409) | 失敗 (409) | 失敗 (409) | 失敗 (409) |
持續時間到期 | 可用 | 已過期 (A) | 已中斷 (A) | 已中斷 (A) | 已過期 (A) |
2012-02-12 版中引進的租用 Blob 變更
下列清單會指定 2012-02-12 版中引進的行為變更 Lease Blob
。
呼叫
Lease Blob
以取得租用現在必須包含租用持續時間標頭。 如果您嘗試取得租用而不指定租用持續時間,服務會傳400 Bad Request – Missing required header
回 。在釋放租用之後,無法再將其更新。 如果您嘗試這樣做,服務會傳
409 Conflict – The lease ID specified did not match the lease ID for the blob
回 。 呼叫 release,然後呼叫 renew 的應用程式現在ETag
必須從發行呼叫儲存 。 然後,應用程式必須使用條件式標頭呼叫 acquireIf-Match
,才能在 Blob 未變更時取得租用。在釋放租用之後,您無法再將其中斷。 如果您嘗試這樣做,服務會傳
409 Conflict – There is currently no lease on the blob
回 。您現在可以中斷正在中斷或已中斷的租用,使中斷作業等冪。 在舊版中,這樣會失敗並出現下列訊息:
409 Conflict – The lease has already been broken and cannot be broken again
。 這項變更可讓您縮短中斷的持續時間。 如果您中斷處於中斷狀態的租用,並包含比剩餘中斷期間還短的持續時間,則會使用較短的持續時間。
計費
定價要求可能源自使用 Blob 記憶體 API 的用戶端,無論是直接透過 Blob 記憶體 REST API,還是來自 Azure 記憶體用戶端連結庫。 這些要求會累算每個交易的費用。 交易類型會影響帳戶的收費方式。 例如,讀取交易會累算到與寫入交易不同的計費類別。 下表根據記憶體帳戶類型顯示要求的計費類別 Lease Blob
:
作業 | 儲存體帳戶類型 | 計費類別 |
---|---|---|
租用 Blob (取得、發行、更新) | 進階區塊 Blob 標準一般用途 v2 |
其他作業 |
租用 Blob (取得、發行、更新) | 標準一般用途 v1 | 讀取作業 |
租用 Blob (中斷、變更) | 進階區塊 Blob 標準一般用途 v2 |
其他作業 |
租用 Blob (中斷、變更) | 標準一般用途 v1 | 寫入作業 |
另請參閱
new-blob-lease-features-infinite-leases-smaller-lease-times-and-more.aspx)
授權對 Azure 記憶體的要求
狀態和錯誤碼
Blob 記憶體錯誤碼
租用容器