您可以使用生命週期管理原則,根據 Blob 的使用模式,將 Blob 轉換為符合成本效益的存取層。 您也可以在 Blob 生命週期結束時將其完全刪除。 原則可以在目前版本、舊版和快照集上運作,但原則不會在系統容器中的 Blob 上運作,例如 $logs 或 $web 容器。 如需一般資訊,請參閱 Azure Blob 記憶體生命週期管理概觀。
本文說明生命週期管理原則的元素。 如需原則範例,請參閱下列文章:
小提示
雖然生命週期管理可協助您優化單一帳戶的成本,但您可以使用 Azure 記憶體動作 ,跨多個帳戶大規模完成多個數據作業。
規則
生命週期管理原則是 JSON 文件中的規則集合。 下列範例 JSON 會顯示完整的規則定義:
{
"rules": [
{
"name": "rule1",
"enabled": true,
"type": "Lifecycle",
"definition": {...}
},
{
"name": "rule2",
"type": "Lifecycle",
"definition": {...}
}
]
}
| 參數名稱 | 參數類型 | 註釋 |
|---|---|---|
| 規則 | 規則物件的陣列 | 在一項政策中至少需要一條規則。 您可以在原則中定義最多 100 個規則。 |
原則中的每個規則都有數個參數,如下表所述:
| 參數名稱 | 類型 | 註釋 | 為必填項目 |
|---|---|---|---|
| 名字 | 繩子 | 規則名稱最多可以包括 256 個英數位元。 規則名稱會區分大小寫。 該名稱在原則內必須是唯一的。 | 是的 |
| 已啟用 | 布林值 | 選用布林值,可允許暫時停用規則。 預設值為 True。 | 否 |
| 類型 | 列舉值 | 目前有效的類型為 Lifecycle。 |
是的 |
| 定義 | 定義生命週期規則的物件 | 每個定義都是由篩選集和動作集組成。 | 是的 |
篩選
篩選會將動作限制為記憶體帳戶內的 Blob 子集。 您可以使用篩選條件來指定要納入的 Blob。 篩選條件無法指定要排除的 Blob。 如果定義了一個以上的篩選條件,邏輯 AND 就會套用至所有篩選。 下表描述每個參數。
| 篩選名稱 | 類型 | 說明 | 為必填項目 |
|---|---|---|---|
| blobTypes | 預先定義的列舉值陣列。 | Blob 的類型( blockblob 或 appendBlob) | 是的 |
| prefixMatch | 字串陣列 | 這些字串是要比對的前置詞。 | 否 |
| blobIndexMatch | 字典值的陣列 | 這些值是由要比對的 Blob 索引標籤索引鍵和值條件所組成。 | 否 |
前置詞比對篩選條件
如果您套用 prefixMatch 篩選,則每個規則最多可以定義 10 個區分大小寫的前置詞。 前置詞字串必須以容器名稱開頭。 例如,如果您想要比對路徑 https://myaccount.blob.core.windows.net/sample-container/blob1/...下的所有 Blob,請將 prefixMatch 指定為 sample-container/blob1。
此篩選條件會比對 sample-container 中名稱以 blob1 開頭的所有 Blob。 如果您未定義前置詞比對,則規則會套用至儲存體帳戶中的所有 Blob。 前置詞字串不支援萬用字元比對。 系統會將 * 和 ? 這類字元視為字串常值。
Blob 索引比對篩選條件
如果您套用 blobIndexMatch 篩選條件,則每個規則最多可以定義 10 個 Blob 索引標記條件。 例如,如果您想要比對 https://myaccount.blob.core.windows.net/ 下具有 Project = Contoso 的所有 Blob,則 blobIndexMatch 篩選條件為 {"name": "Project","op": "==","value": "Contoso"}。 如果您未定義 blobIndexMatch 篩選的值,則規則會套用至記憶體帳戶內的所有 Blob。
行動
您必須為每個規則定義至少一個動作。 當符合執行條件時,將動作套用至已篩選的 Blob。 若要深入瞭解執行條件,請參閱本文的 動作執行條件 一節。 下表描述原則定義中可用的每個動作。
| 動作 | 說明 |
|---|---|
| TierToCool | 將 Blob 設定為冷存取層。 不支援附加 Blob、分頁 Blob,或進階區塊 Blob 儲存體帳戶中的 Blob。 |
| TierToCold | 將 Blob 設定為冷存取層。 不支援附加 Blob、分頁 Blob,或進階區塊 Blob 儲存體帳戶中的 Blob。 |
| TierToArchive | 將 Blob 設定為封存存取層。 解除凍結 Blob 不會更新 Blob 的最後修改時間或最後存取時間屬性。 因此,此動作可能會將解除凍結的 Blob 移回封存層。 若要防止這種情況發生,請將 daysAfterLastTierChangeGreaterThan 條件新增至此動作。此動作不支援附加 Blob、分頁 Blob,或進階區塊 Blob 儲存體帳戶中的 Blob。 也不支援使用加密範圍的 Blob,或是在已設定為區域備援儲存體 (ZRS)、異地區域備援儲存體 (GZRS) / 讀取權限異地區域備援儲存體 (RA-GZRS) 帳戶中的 Blob。 |
| enableAutoTierToHotFromCool | 如果 Blob 設定為冷層,該 Blob 一旦被存取,就會自動移至熱層。 只有在 與 daysAfterLastAccessTimeGreaterThan 執行條件搭配使用時,才能使用此動作。 此動作不會影響在規則中啟用該動作之前已設為非經常性存取層的 Blob。 此動作會在 30 天內僅將 Blob 從非經常性存取層移至經常性存取層一次。 設定此保護措施可避免因多次提前刪除而向帳戶收取罰金。 不支援先前版本或快照集。 |
| 刪除 | 刪除 Blob。 不支援分頁 Blob 或不可變容器中的 Blob。 |
如果您在相同的 Blob 上定義多個動作,生命週期管理會將成本最低的動作套用至 Blob。 例如,刪除 動作比 tierToArchive 動作便宜,tierToArchive 動作則比 tierToCool 動作便宜。
在具有階層命名空間之帳戶中的刪除動作
當套用至已啟用階層命名空間的帳戶時,刪除動作會移除空的目錄。 如果目錄並非空白,則刪除動作會移除在第一個生命週期原則執行期間內符合原則條件的物件。 如果該動作產生了同樣符合原則條件的空白目錄,則該目錄將會在下一個執行循環的週期內移除,依此類推。
對具有版本與快照集之 Blob 的刪除動作
在已刪除與該 Blob 相關聯的任何舊版本或快照集之前,生命週期管理原則將不會刪除目前版本的 Blob。 如果儲存體帳戶中的 Blob 有舊版或快照集,在您將刪除動作指定為原則的一部分時,必須納入舊版和快照集。
動作執行條件
所有運行條件都是以時間為基礎的。 如果經過的天數超過條件中指定的天數,則可以執行相關動作。 原則條件在原則執行期間,每個物件僅評定一次。 在某些情況下,物件可能會在已由執行評定後才符合條件。 此類物件會在後續執行中處理。
目前版本使用上次修改時間或上次存取時間、先前版本使用版本建立時間,以及 Blob 快照集使用快照集建立時間來追蹤存在時間。
下表描述每個動作執行條件。
| 條件名稱 | 類型 | 說明 |
|---|---|---|
| daysAfterModificationGreaterThan | 整數 | Blob 自最後修改時間起算的天數。 適用於目前 Blob 版本的動作。 |
| daysAfterCreationGreaterThan | 整數 | 自建立時間起算的天數。 適用於目前 Blob 版本、先前版本的 Blob 或 Blob 快照集的動作。 |
| daysAfterLastAccessTimeGreaterThan | 整數 | 自上次存取時間起算的天數,或在某些情況下,自原則啟用日起算的天數。 若要深入瞭解,請參閱下方的 存取時間追蹤 一節。 在啟用存取追蹤時,適用於目前 Blob 版本的動作。 |
| daysAfterLastTierChangeGreaterThan | 整數 | 自最後一次 Blob 層變更時間起算的天數。 重新水合的 Blob 在返回到封存層之前,保留在經常性存取層、非經常性存取層或極非經常性存取層中的最短持續時間 (以天為單位)。 僅適用於 tierToArchive 動作。 |
存取時間追蹤
您可以啟用存取時間追蹤,以記錄 Blob 上次的讀取或寫入時間,並作為管理 Blob 數據分層和保留的篩選條件。
當您啟用存取時間追蹤時,名為 LastAccessTime 的 Blob 屬性會在讀取或寫入 Blob 時更新。 取得 Blob 和放置 Blob 作業是存取作業,並將更新 Blob 的存取時間。 不過, 取得 Blob 屬性、 取得 Blob 元數據和 取得 Blob 標籤 不是存取作業。 這些作業不會更新 Blob 的存取時間。
如果您將 daysAfterLastAccessTimeGreaterThan 執行條件套用至原則,則會透過LastAccessTime來判定是否符合該條件。
如果您將 daysAfterLastAccessTimeGreaterThan 執行條件套用至原則,但未啟用存取時間追蹤,則 LastAccessTime 不會使用 。 會改用上次啟用存取追蹤的日期。 事實上,在 Blob 的 LastAccessTime 屬性為 null 值的任何情況下,會使用最後一次啟用存取追蹤的日期。 即使您已啟用存取時間追蹤,但在啟用後未曾存取過該 Blob,也可能發生這種情況。
備註
為了將讀取存取延遲的影響降到最低,只有過去 24 小時的第一次讀取會更新前一次的存取時間。 在相同 24 小時期間內的後續讀取,不會更新前一次的存取時間。 如果在讀取之間修改 Blob,則上次存取時間會是兩個值中的較新值。
若要瞭解如何啟用存取時間追蹤,請參閱 選擇性地啟用存取時間追蹤。