Cloud Storage 提供物件生命週期管理功能,可支援常見用途,例如為物件設定存留時間 (TTL)、保留非現行版本的物件,或是將物件儲存空間級別「降級」來管理成本。
本頁面將說明這項功能,以及使用時可用的選項。如要瞭解生命週期設定檔的一般格式,請參閱 JSON 的 bucket 資源表示法或 XML 的生命週期設定格式。
簡介
如要使用物件生命週期管理功能,請定義生命週期設定,並在 bucket 上設定。設定包含一組規則,適用於值區中目前和未來的物件。當物件符合其中一個規則的條件時,Cloud Storage 會自動對此物件執行指定的操作。以下是一些範例用途:
- 將存在超過 365 天的物件儲存空間級別降級為 Coldline Storage。
- 刪除 2019 年 1 月 1 日前建立的物件。
- 在啟用版本管理的值區中,僅保留每個物件的 3 個最新版本。
生命週期設定
每項生命週期管理設定都包含一組規則。每項規則包含一個動作和一或多個條件。
物件必須符合規則中指定的「所有」條件,系統才會執行規則中的動作。
如果您指定多個包含相同動作的規則,只要物件符合任一規則的條件,系統就會對該物件執行動作。
如果單一物件同時符合多項規則的條件,Cloud Storage 只會執行其中一項規則的動作,判斷依據如下:
Delete動作的優先順序高於任何SetStorageClass動作。- 系統會優先執行
SetStorageClass動作,將物件切換至靜態儲存定價最低的儲存空間級別。
舉例來說,假設您有一項規則會將物件的級別變更為 Nearline Storage,另一項規則會將物件的級別變更為 Coldline Storage,但這兩項規則使用完全相同的條件,則符合條件時,物件的級別一律會變更為 Coldline Storage。
請先在開發資料上測試生命週期規則,再套用至正式環境,確保規則不會在非預期的條件下執行動作。如果無法做到,請使用規則中的
matchesPrefix或matchesSuffix條件,對一小部分實際工作環境資料進行測試。變更 bucket 的生命週期設定後,最多可能需要 24 小時才會生效,在這段期間,物件生命週期管理仍會根據舊的設定執行操作。
例如,如果將
age條件從 10 天變更為 20 天,則由於舊設定的條件,已建立 11 天的物件仍可能在變更後 24 小時內被物件生命週期管理刪除。
如需用途,請參閱「物件生命週期管理的設定範例」。
生命週期操作
生命週期規則會指定下列其中一項動作:
刪除
當物件符合生命週期規則中指定的所有條件時,Delete 動作會刪除該物件。根據預設,刪除使用中的物件時,物件會變成虛刪除狀態,Cloud Storage 會保留七天。您可以在虛刪除保留時長內還原這個虛刪除物件。
例外狀況:在啟用物件版本管理功能的值區中,刪除物件的使用中版本會使其成為非現行版本,而刪除非現行版本則會從值區中刪除該版本。如需搭配使用 Delete 動作和物件版本管理功能的範例,請參閱刪除物件的設定。
如果物件設有物件保留或尚未滿足資料保留政策,則 Delete 動作不會對物件生效。只要物件仍符合 Delete 動作的條件,系統就會在移除所有物件保留設定,並履行所有資料保留政策後,執行 Delete 動作。
SetStorageClass
當物件符合生命週期規則中指定的所有條件時,SetStorageClass 動作會變更物件的儲存空間級別,並更新物件的修改時間。
SetStorageClass 支援下列儲存空間級別轉換:
| 原始儲存空間級別 | 新儲存空間級別 |
|---|---|
| Durable Reduced Availability (DRA) 儲存空間 | Nearline Storage Coldline Storage Archive Storage Multi-Regional Storage/Regional Storage1 |
| Standard Storage、Multi-Regional Storage 或 Regional Storage | Nearline Storage Coldline Storage Archive Storage |
| Nearline Storage | Coldline Storage Archive Storage |
| Coldline Storage | Archive Storage |
1 對於區域中的 bucket,新的儲存空間級別不得為 Multi-Regional Storage。如果 bucket 位於多區域或雙區域,新的儲存空間級別不得為 Regional Storage。
Cloud Storage 不會驗證儲存空間級別轉換的正確性。也就是說,您可以指定上表未列出的儲存空間級別轉換,但轉換不會發生。請確認生命週期規則使用列出的其中一種儲存空間級別轉換。
使用SetStorageClass 動作時,請注意費用考量。
取消未完成的多部分上傳作業
當分段上傳符合生命週期規則中指定的條件時,AbortIncompleteMultipartUpload 動作會取消未完成的分段上傳,並刪除相關聯的部分。
這項動作只能搭配下列生命週期條件使用:
如果嘗試建立的規則同時使用 AbortIncompleteMultipartUpload 動作和其他條件,就會發生錯誤。
生命週期條件
生命週期規則包含物件必須符合的條件,才能對物件執行規則中定義的操作。生命週期規則支援下列條件:
agecreatedBeforecustomTimeBeforedaysSinceCustomTimedaysSinceNoncurrentTimeisLivematchesStorageClassmatchesPrefix和matchesSuffixnoncurrentTimeBeforenumNewerVersionssizeAboveBytes和sizeBelowBytes
所有條件都是選擇性的,但至少需要有一個條件。如果嘗試進行無效的生命週期設定(例如透過使用不存在的操作或條件),則會收到 400 Bad request 錯誤響應,並且任何現有的生命週期設定都會保留在原位。
age
當資源達到指定的存在時間 (以天為單位) 時,即符合 age 條件。存在時間是從資源建立時間起算。
物件的建立時間是指物件成功寫入 bucket 的時間,例如上傳完成時。
- 物件變成非現行版本後,其存在時間不會受到影響。
如果是多部分上傳,建立時間是指上傳作業啟動的時間。
如果
age條件設為0,則物件建立後,在世界標準時間午夜時即符合條件。
舉例來說,如果資源是在 2022/01/10 10:00 UTC 建立,且 age 條件為 10 天,則該資源在 2022/01/20 10:00 UTC 當天及之後即符合條件。
createdBefore
如果物件是在指定日期午夜前建立 (以世界標準時間為準),則符合 createdBefore 條件。
customTimeBefore
如果物件 Custom-Time 中繼資料的日期部分早於這項條件中指定的日期,則符合 customTimeBefore 條件。這項條件是使用 YYYY-MM-DD 日期格式設定。如果物件未設定 Custom-Time 中繼資料,則一律不符合 customTimeBefore。
daysSinceCustomTime
如果物件的Custom-Time 中繼資料欄位中指定的日期和時間,已超過指定天數,則符合 daysSinceCustomTime 條件。舉例來說,如果物件的 Custom-Time 為 2020-05-16T10:00:00Z,且 daysSinceCustomTime 條件為 10 天,則在世界標準時間 2020/05/26 10:00 當天及之後,物件就會符合條件。
如果物件未設定 Custom-Time 中繼資料,則一律不符合 daysSinceCustomTime。
daysSinceNoncurrentTime
daysSinceNoncurrentTime 條件通常只會與物件版本管理搭配使用。當物件因使用中版本遭到刪除或取代而成為非現行版本,且經過指定天數後,即符合條件。舉例來說,如果物件在 2020/07/08 15:00 UTC 變成非現行版本,且 daysSinceNoncurrentTime 條件為 10 天,則該物件在 2020/07/18 15:00 UTC 當天及之後即符合條件。
isLive
isLive 條件通常只會與物件版本管理搭配使用。如果設為 false,則物件的任何非現行版本都會滿足這項條件。如果設為 true,物件的使用中版本就會符合這項條件。如果不使用版本管理功能,系統會將所有物件視為有效,並在 isLive 為 true 時比對。
matchesPrefix 和 matchesSuffix
如果物件名稱的開頭或結尾與指定的前置字串或後置字串完全相符 (區分大小寫),則符合 matchesPrefix 和 matchesSuffix 條件。您可以將多個字串指定為清單 (例如 "matchesSuffix": [".jpg", ".png"])。
使用 matchesPrefix 時,請勿加入 bucket 名稱或大多數要求路徑中物件名稱前面的 /。舉例來說,在 Google Cloud CLI 中,名為 my_bucket 的 bucket 內物件路徑格式類似於 gs://my_bucket/pictures/paris_2022.jpg。如要比對物件,請使用 "matchesPrefix":["pictures/paris_"] 等條件。
所有規則中指定的前置字串和後置字串總數最多為 1,000 個。在 Google Cloud 控制台中,您最多可以複製及貼上 1, 000 個前置字串或後置字串。在單一條件中,前置字元或後置字元不得使用兩次。
matchesStorageClass
當 bucket 中的物件以指定的儲存空間級別儲存時,即符合 matchesStorageClass 條件。matchesStorageClass 可使用下列值:STANDARD、NEARLINE、COLDLINE、ARCHIVE、MULTI_REGIONAL、REGIONAL 和 DURABLE_REDUCED_AVAILABILITY。
一般來說,如果您打算對 Standard Storage 物件使用 matchesStorageClass 條件,也應加入下列項目:
如果值區位於單一地區中,請在條件中加入
REGIONAL和DURABLE_REDUCED_AVAILABILITY。如果 bucket 位於多區域或雙區域,請在條件中加入
MULTI_REGIONAL和DURABLE_REDUCED_AVAILABILITY。
加入這些額外類別,可確保生命週期規則涵蓋 bucket 中可能設為舊版儲存空間級別的舊物件。
noncurrentTimeBefore
noncurrentTimeBefore 條件通常只會與物件版本管理搭配使用。如果物件在指定日期前變成非現行版本,即符合條件。條件是以日期格式 YYYY-MM-DD 設定。noncurrentTimeBefore 永遠不適用於使用中的物件。
numNewerVersions
numNewerVersions 條件通常只會與物件版本管理搭配使用。如果將這個條件的值設為 N,則當有至少 N 個版本 (包括使用中版本) 比某個物件版本新時,該物件版本即符合條件。如果是使用中的物件版本,較新版本的數量會視為 0。如果是最新的非現行版本,新版本的數量為 1 (如果沒有使用中的物件版本,則為 0),以此類推。
sizeAboveBytes 和 sizeBelowBytes
當物件大小大於指定值時,即符合 sizeAboveBytes 條件。使用這項條件,定義生命週期動作的大小下限門檻。
舉例來說,如果是小型物件,變更儲存空間級別的 A 類作業費用,可能會超過將物件儲存在費用較低的儲存空間級別所省下的費用。使用 sizeAboveBytes 條件排除小型物件,因為這類物件的轉換成本高於潛在節省費用。
當物件大小小於指定值時,即符合 sizeBelowBytes 條件。使用這項條件,定義生命週期動作的大小門檻上限。
如要定義物件大小範圍,請在同一規則中同時使用 sizeAboveBytes 條件和 sizeBelowBytes 條件。
物件生命週期管理會評估物件資料的大小 (以位元組為單位),不含物件中繼資料的大小。sizeAboveBytes 或 sizeBelowBytes 的最大值為 5 TiB。
物件生命週期行為
為 Cloud Storage bucket 設定物件生命週期管理功能後,Cloud Storage 會定期檢查所有物件,並根據 bucket 的規則執行所有適用動作。Cloud Storage 會以非同步方式執行動作,因此從條件滿足到動作執行之間可能會有延遲。應用程式不應依賴在符合生命週期條件後,於特定時間內發生的生命週期動作。
舉例來說,如果物件符合刪除條件,可能不會立即刪除,您會看到該物件,直到對物件執行生命週期動作為止。
如果物件符合下列所有條件,則可免除靜態儲存空間費用,但物件維持原始狀態時,仍須支付適用費用:
物件所在的值區已停用虛刪除功能。
物件受限於具有
Delete動作的規則。規則的唯一條件是
age條件,或age和matchesStorageClass條件的組合。如果規則包含其他條件,例如matchesPrefix、matchesSuffix或daysSinceCustomTime,則在物件刪除前,系統會持續收取儲存費用。在只有存在時間條件的規則中,物件符合
age條件。如果刪除規則同時包含這兩項條件,則物件必須同時符合age和matchesStorageClass條件。物件沒有任何物件保留設定。
版本化物件的物件生命週期行為
在已啟用物件版本管理功能的 bucket 中,根據生命週期規則刪除的使用中物件,會有一段時間處於非現行狀態。如果物件的非現行版本也符合刪除規則的條件,則該版本也會在時間經過後刪除。
舉例來說,假設有一項生命週期規則會刪除存在超過 180 天的物件。如果使用中的物件已存在 200 天,就會遭到刪除並變成非現行版本。現在,非現行物件仍超過 180 天,因此非現行物件也會在一段時間後刪除。
SetStorageClass 費用注意事項
使用 SetStorageClass 會計為 A 類作業,並依目標儲存空間級別決定的費率計費。這項行為與手動變更物件的儲存空間級別類似。
與手動變更物件的儲存空間級別不同,使用 SetStorageClass 不會重寫物件。因此,物件生命週期管理功能在定價方面具有特定優勢:
變更儲存空間級別時,絕不會產生跨區域複製費用、擷取費用或提前刪除費用。不過,如果儲存空間級別中的物件有指定最短儲存時間,且在該時間結束前刪除,則須支付提前刪除費用。
物件在原始儲存空間級別設定的時間,會計入新儲存空間級別適用的最短儲存時間。
舉例來說,假設您將物件上傳為 Nearline Storage,20 天後,生命週期設定將物件的儲存空間級別變更為 Coldline Storage。這項異動不會產生檢索或提前刪除費用。如果您在變更儲存空間級別 60 天後刪除物件,則只會產生 10 天的提前刪除費用,因為 Coldline Storage 的最短儲存時間為 90 天,而物件總共存在 80 天。
相較之下,假設您將物件上傳為 Nearline Storage,並在 20 天後使用重寫功能變更儲存空間級別 (再次變更為 Coldline Storage)。這項變更會產生檢索費用和 10 天的提前刪除費用。如果在重寫 60 天後刪除物件,則會產生 30 天的提前刪除費用。
在這兩個範例中,如果 bucket 啟用虛刪除功能,儲存費用會增加,但提前刪除費用會根據虛刪除保留期限長度而減少。
物件建立時間
在許多情況下,物件上傳作業會在開始後不久完成。不過,如果上傳作業涉及多個要求 (例如支援續傳的上傳作業),則從傳送初始上傳要求到傳送最終上傳要求之間,可能會有幾天的時間。在這種情況下,請留意下列事項:
- 物件上傳完成後,才會受到生命週期規則的規範。
- 物件的建立時間取決於上傳完成時間。這會影響
age和createdBefore生命週期條件。 - 為物件設定
Custom-Time時,請在上傳作業開始時設定。如果根據要求時間設定Custom-Time,Custom-Time可能會遠早於物件的建立時間。這會影響customTimeBefore和daysSinceCustomTime生命週期條件。
到期時間中繼資料
如果為具有 age 條件 (且除了 matchesStorageClass 之外沒有其他條件) 的 bucket 指定 Delete 動作,則某些物件可能會標記到期時間中繼資料。物件的到期時間是指物件符合物件生命週期管理刪除條件的時間。到期時間可能會隨著 bucket 的生命週期設定或保留政策而變更。
請注意,沒有過期時間中繼資料並不表示一定不會刪除物件,而是沒有足夠的資訊確定何時或是否將其刪除。舉例來說,如果物件建立時間為 2020/01/10 10:00 UTC,且 age 條件設為 10 天,則物件到期時間為 2020/01/20 10:00 UTC。不過,如果發生下列情況,物件就不會顯示到期時間:
Delete規則中指定了其他條件,但matchesStorageClass除外。您使用的
matchesStorageClass條件不包含物件的儲存空間級別。物件處於保留狀態,因為 Cloud Storage 無法得知何時會移除保留。
bucket 已啟用虛刪除功能。
即使未立即刪除物件,系統也不會在物件到期時間後收取儲存費用。您可以在刪除物件之前繼續存取該物件,但要負擔其他費用(要求、網路頻寬)。如果物件沒有到期時間,則系統會收取物件儲存費用,直到物件被刪除為止。
處理到期時間時,請注意以下事項:
如果 bucket 設有資料保留政策,到期時間會是物件生命週期管理
age條件,以及物件符合資料保留政策指定保留期限的時間,兩者中較晚的時間。如果由於不同的生命週期管理規則而有多個適用於物件的到期時間,則使用最早的適用到期時間。
追蹤生命週期操作的選項
要追蹤 Cloud Storage 進行的生命週期管理操作,請使用以下選項之一:
- 使用 Cloud Storage 儲存空間用量記錄。此功能記錄操作和執行操作的人員。位於記錄項目
cs_user_agent欄位的GCS Lifecycle Management值表示 Cloud Storage 根據生命週期設定所進行的操作。
- 為 bucket 啟用 Cloud Storage 的 Pub/Sub 通知。這項功能會在指定動作發生時,將通知傳送至您選擇的 Pub/Sub 主題。請注意,這項功能不會記錄執行動作的使用者。
後續步驟
- 啟用物件生命週期管理。
- 查看生命週期設定範例。
- 查看 JSON API 要求和 XML API 要求中生命週期設定的一般格式。
- 運用 Cloud Storage 基本技能,透過 AI 程式設計助理自動設定生命週期政策。