快照 Blob
Snapshot Blob
作業可建立 Blob 的唯讀快照集。
要求
您可以建構 Snapshot Blob
要求,如下所示。 建議使用 HTTPS。 以您的記憶體帳戶名稱取代 myaccount :
PUT 方法要求 URI | HTTP 版本 |
---|---|
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=snapshot |
HTTP/1.1 |
模擬記憶體服務 URI
當您對模擬記憶體服務提出要求時,請將模擬器主機名和 Azure Blob 儲存體 埠指定為 127.0.0.1:10000
,後面接著仿真的帳戶名稱:
PUT 方法要求 URI | HTTP 版本 |
---|---|
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=snapshot |
HTTP/1.1 |
如需詳細資訊,請參閱使用 Azure 模擬器進行本機 Azure 儲存體開發。
URI 參數
您可以在要求 URI 上指定下列額外參數。
參數 | 描述 |
---|---|
timeout |
選擇性。
timeout 參數以秒為單位。 如需詳細資訊,請參閱 設定 Blob 記憶體作業的逾時。 |
要求標頭
下表描述必要的和選用的要求標頭。
要求標頭 | 描述 |
---|---|
Authorization |
必要。 指定授權配置、帳戶名稱和簽章。 如需詳細資訊,請參閱授權對 Azure 儲存體提出要求。 |
Date 或 x-ms-date |
必要。 指定要求的「國際標準時間」(UTC)。 如需詳細資訊,請參閱授權對 Azure 儲存體提出要求。 |
x-ms-version |
所有已授權要求都需要。 指定用於這個要求的作業版本。 如需詳細資訊,請參閱 Azure 儲存體服務的版本。 |
x-ms-meta-name:value |
選擇性。 指定與 Blob 相關聯的使用者定義名稱/值組。 如果您未指定任何名稱/值組,作業會將基底 Blob 元數據複製到快照集。 如果您指定一或多個名稱/值組,則會使用指定的元數據建立快照集,而且不會從基底 Blob 複製元數據。 請注意,從 2009-09-19 版開始,元數據名稱必須遵守 C# 識別碼的命名規則。 如需詳細資訊,請參閱 命名和參考容器、Blob 和元數據 。 |
If-Modified-Since |
選擇性。
DateTime 值。 請指定此條件式標頭來擷取 Blob 的快照集,只有在自指定的日期/時間之後已修改。 如果基底 Blob 尚未修改,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。 |
If-Unmodified-Since |
選擇性。
DateTime 值。 請指定此條件式標頭來擷取 Blob 的快照集,只有當它自指定的日期/時間之後尚未修改時。 如果基底 Blob 已修改,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。 |
If-Match |
選擇性。
ETag 值。
ETag 指定這個條件式標頭的值,以擷取 Blob 的快照集,只有當其ETag 值符合指定的值時。 如果值不相符,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。 |
If-None-Match |
選擇性。
ETag 值。ETag 指定這個條件式標頭的值來擷取 Blob 的快照集,只有當其ETag 值不符合指定的值時。 如果值相同,Blob 記憶體會傳回狀態代碼 412 (前置條件失敗) 。 |
x-ms-encryption-scope |
選擇性。 表示用來加密要求內容的加密範圍。 2019-02-02 版和更新版本支援此標頭。 |
x-ms-lease-id:<ID> |
選擇性。 如果您指定此標頭,只有在符合下列兩個條件時,才會執行作業: - Blob 的租用目前為作用中。 - 要求中指定的租用標識碼符合 Blob 的租用標識碼。 如果指定此標頭,而且不符合上述任一條件,要求就會失敗。 作業 Snapshot Blob 失敗,狀態代碼為 412 (前置條件失敗) 。 |
x-ms-client-request-id |
選擇性。 提供客戶端產生的不透明值,其中包含設定記錄時記錄的 1 kibibyte (KiB) 字元限制。 強烈建議您使用此標頭,將用戶端活動與伺服器接收的要求相互關聯。 如需詳細資訊,請參閱監視 Azure Blob 儲存體。 |
只有在符合指定的條件時,此作業也支援使用條件標頭來執行作業。 如需詳細資訊,請參閱 指定 Blob 記憶體作業的條件式標頭。
要求標頭 (客戶提供的加密金鑰)
從 2019-02-02 版開始,您可以在要求上指定下列標頭,以使用客戶提供的密鑰加密 Blob。 使用客戶提供的金鑰進行加密 (,而對應的標頭集) 是選擇性的。 如果 Blob 先前已使用客戶提供的密鑰加密,則必須在要求中包含這些標頭,才能順利完成讀取作業。
要求標頭 | 描述 |
---|---|
x-ms-encryption-key |
必要。 Base64 編碼的 AES-256 加密金鑰。 |
x-ms-encryption-key-sha256 |
必要。 加密金鑰的Base64編碼SHA256哈希。 |
x-ms-encryption-algorithm: AES256 |
必要。 指定要用於加密的演算法。 此標頭的值必須設定為 AES256 。 |
要求本文
無。
回應
回應包括 HTTP 狀態碼和一組回應標頭。
狀態碼
成功的作業會傳回狀態碼「201 (已建立)」。 如需狀態代碼的相關信息,請參閱 狀態和錯誤碼。
回應標頭
這項作業的回應包括下列標頭。 回應也可以包含額外的標準 HTTP 標頭。 所有標準標頭都符合 HTTP/1.1 通訊協議規格。
語法 | 描述 |
---|---|
x-ms-snapshot: <DateTime> |
傳回可唯一 DateTime 識別快照集的值。 此標頭的值表示快照集版本,您可以在後續要求中使用它來存取快照集。 請注意,此值為不透明。 |
ETag |
ETag 快照集的 。 如果要求版本是 2011-08-18 或更新版本,此值 ETag 將會以引號括住。 請注意,快照集無法寫入,因此 ETag 特定快照集的 永遠不會變更。 不過,如果要求提供新的元數據, ETag 快照集的 會不同於基底 Blob 的 Snaphot Blob 。 如果未使用要求指定任何元數據, ETag 則快照集的 會在建立快照集時,與基底 Blob 的元數據相同。 |
Last-Modified |
上次修改快照集的時間。 如需詳細資訊,請參閱 標頭中的日期時間值表示。 請注意,快照集無法寫入,因此特定快照集的上次修改時間永遠不會變更。 不過,如果要求提供新的元數據,快照集的上次修改時間會與基底 Blob 的時間 Snaphot Blob 不同。 如果未使用要求指定任何元數據,在建立快照集時,快照集的上次修改時間會與基底 Blob 的相同。 |
x-ms-request-id |
可唯一識別提出的要求,並可用於對要求進行疑難解答。 如需詳細資訊,請參閱 針對 API 作業進行疑難解答。 |
x-ms-version |
指出用來執行要求的 Blob 記憶體版本。 對 2009-09-19 及更新版本提出要求會傳回此標頭。 |
Date |
UTC 日期/時間值,指出起始響應的時間。 服務會產生此值。 |
x-ms-request-server-encrypted: true/false |
版本 2019-02-02 或更新版本。 如果要求的內容使用指定的演算法成功加密,這個標頭的值會設定 true 為 。 否則,會將值設定為 false 。 |
x-ms-encryption-key-sha256 |
版本 2019-02-02 或更新版本。 如果要求使用客戶提供的金鑰進行加密,則傳回 。 用戶端可以使用提供的金鑰,確保要求的內容已成功加密。 |
x-ms-encryption-scope |
版本 2019-02-02 或更新版本。 如果要求使用加密範圍,則傳回 。 用戶端可以使用加密範圍,確保要求的內容已成功加密。 |
x-ms-version-id: <DateTime> |
版本 2019-12-12 和更新版本。 傳回可唯一識別 Blob 的不透明 DateTime 值。 此標頭的值表示 Blob 的版本,您可以在後續要求中使用它來存取 Blob。 |
x-ms-client-request-id |
可用來針對要求和對應的回應進行疑難解答。 如果此標頭存在於要求中,則此標頭的值等於標頭的值 x-ms-client-request-id 。 此值最多為 1,024 個可見的 ASCII 字元。
x-ms-client-request-id 如果要求中沒有標頭,它就不會出現在回應中。 |
回應本文
無。
授權
在 Azure 記憶體中呼叫任何數據存取作業時,需要授權。 您可以授權 Snapshot 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 使用者、群組、受控識別或服務主體呼叫Snapshot Blob
作業所需的 RBAC 動作,以及包含此動作的最低特殊許可權 Azure RBAC 角色:
- Azure RBAC 宏指令:Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write 或 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
- 最低特殊許可權的內建角色:記憶體 Blob 數據參與者
若要深入瞭解如何使用 Azure RBAC 指派角色,請參閱 指派 Azure 角色以存取 Blob 數據。
備註
快照集提供 Blob 的唯讀版本。 建立快照集之後,您可以讀取、複製或刪除快照集,但無法加以修改。
快照集提供便利的方式將 Blob 資料備份。 您可以使用快照集,藉由呼叫 複製 Blob 將 Blob 還原至舊版,以覆寫基底 Blob 及其快照集。
當您建立快照集時,Blob 記憶體會傳回可唯一 DateTime
識別相對於其基底 Blob 之快照集的值。 您可以使用此值在快照集上執行進一步的作業。 請注意,您應該將此值 DateTime
視為不透明。
值 DateTime
會識別URI上的快照集。 例如,基底 Blob 及其快照集的 URI 類似如下:
基底 Blob:
http://myaccount.blob.core.windows.net/mycontainer/myblob
快照:
http://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
請注意,每次呼叫 Snapshot Blob
作業時,都會建立具有唯 DateTime
一值的新快照集。 Blob 可支援任意數目的快照集。 不會覆寫現有的快照集。 您可以藉由呼叫 Delete Blob,並將標頭設定 x-ms-include-snapshots
為適當的值來明確刪除它們。
成功呼叫 以 Snapshot Blob
傳回 DateTime
回應標頭中的 x-ms-snapshot
值。 然後,您可以使用此值 DateTime
在特定快照集版本上執行讀取、刪除或複製作業。 您可以藉由在 Blob 名稱後面指定 ?snapshot=<DateTime>
,呼叫任何適用於快照集的 Blob 記憶體作業。
當您建立 Blob 的快照集時,會將下列系統屬性複製到快照集,並保留相同的值:
Content-Type
Content-Encoding
Content-Language
Content-Length
Cache-Control
Content-MD5
x-ms-blob-sequence-number
僅分頁 Blob 的 ()x-ms-blob-committed-block-count
僅附加 blob 的 ()x-ms-copy-id
(2012-02-12 版和更新版本)x-ms-copy-status
(2012-02-12 版和更新版本)x-ms-copy-source
(2012-02-12 版和更新版本)x-ms-copy-progress
(2012-02-12 版和更新版本)x-ms-copy-completion-time
(2012-02-12 版和更新版本)x-ms-copy-status-description
(2012-02-12 版和更新版本)
如果 Blob 是區塊 Blob,基底 Blob 的認可封鎖清單也會複製到快照集。 不會複製任何未認可的區塊。
建立快照集時,快照集 Blob 的大小一律與基底 Blob 相同。 快照集 Blob 的 Content-Length
標頭值會與基底 Blob 的值相同。
您可以在要求中指定 x-ms-meta-name:value
標頭,為快照集指定一個或多個新的中繼資料值。 如果未指定此標頭,則與基底 Blob 相關聯的元數據會複製到快照集。
與基底 Blob 相關聯的任何標記會複製到快照集。 無法設定快照集的新標籤。
只有在符合條件時,才可以在要求上指定條件標頭,以擷取 Blob 的快照集。 如果不符合指定的條件,則不會建立快照集。 服務會傳回狀態代碼 412 (前置條件失敗) ,以及未符合條件的其他錯誤資訊。
如果基底 Blob 有作用中的租用,只要下列任一條件成立,您就可以擷取 Blob 的快照集:
已指定條件式
x-ms-lease-id
標頭,並在要求中包含基底 Blob 的作用中租用識別碼。 此條件會指定只有在租用為作用中時,才會建立快照集,而且指定的租用標識符與 Blob 相關聯的標識符相符。x-ms-lease-id
標頭完全未指定,在此情況下會忽略獨佔寫入租用。
請注意,與基底 Blob 相關聯的租用不會複製到快照集。 無法租用快照集。
當您使用 複製 Blob 作業複製基底 Blob 時,基底 Blob 的任何快照集都不會複製到目的地 Blob。 用某個複本覆寫目的地 Blob 時,與目的地 Blob 相關聯的任何快照集都會保留名稱且保持不變。
您可以將快照集 Blob 複製到基底 Blob,以還原舊版的 Blob。 快照集會保留,但會以可讀取/寫入的複本覆寫基底 Blob。
注意
升級快照集不會產生額外的記憶體資源費用。 這是因為區塊或頁面會在快照集與基底 Blob 之間共用。
您可以從 REST 2019-12-12-12 版開始,在快照集上設定 Blob 層。 如果在根 Blob 上設定階層,則所有快照集都會從基底 Blob 繼承該層。 在封存的 Blob 上擷取快照集將會失敗。 在對象上明確設定階層會產生物件完整大小的計費。 擷取具有階層集之 Blob 的快照集,會產生根 Blob 和快照集的完整複製計費。 如需區塊 Blob 層級階層處理的詳細資訊,請參閱 經常性存取、非經常性存取和封存儲存層。
根據快照集,Azure 進階儲存體 帳戶和標準記憶體帳戶之間有一些差異:
進階儲存體 帳戶中每個分頁 Blob 的快照集數目限制為 100。 如果超過該限制,作業會
Snapshot Blob
傳回錯誤碼 409 (快照集計數超過) 。您可以每隔十分鐘一次在 進階儲存體 帳戶中建立分頁 Blob 的快照集。 如果超過該速率,作業會
Snapshot Blob
傳回錯誤碼 409 (快照集作業速率超過) 。您無法使用取得 Blob,在 進階儲存體 帳戶中讀取分頁 Blob 的快照集。 在此情況下,服務會傳回錯誤碼 400 (無效的作業) 。 不過,您可以針對快照集呼叫 取得 Blob 屬性 和 取得 Blob 元數據 。
若要讀取快照集,您可以使用 複製 Blob 作業,將快照集複製到帳戶中的其他分頁 Blob。 複製作業的目的地 Blob 不可以包含任何現有的快照集。 如果目的地 Blob 已有快照集,
Copy Blob
會傳回錯誤碼 409 (SnapshotsPresent)。
如需詳細資訊,請參閱搭配 Azure 進階儲存體 使用 Blob 記憶體作業。
啟用版本設定時,建立 Blob 的快照集也會產生新版本,並儲存舊版的基底 Blob。 參數 x-ms-version-id
會傳回新版 Blob 的不透明 DateTime
值。
計費
定價要求可能源自使用 Blob 記憶體 API 的用戶端,無論是直接透過 Blob 記憶體 REST API,還是來自 Azure 記憶體用戶端連結庫。 這些要求會累算每個交易的費用。 交易類型會影響帳戶的收費方式。 例如,讀取交易會累算到與寫入交易不同的計費類別。 下表根據記憶體帳戶類型顯示要求的計費類別 Snapshot Blob
:
作業 | 儲存體帳戶類型 | 計費類別 |
---|---|---|
快照 Blob | 進階區塊 Blob 標準一般用途 v2 標準一般用途 v1 |
讀取作業 |
若要瞭解指定計費類別的定價,請參閱 Azure Blob 儲存體 定價。