物件生命週期管理

設定物件生命週期管理 設定範例

為支援常見用途,例如為物件設定存留時間 (TTL)、保留非現行版本的物件,或是將物件儲存空間級別「降級」,Cloud Storage 提供了物件生命週期管理功能。

本頁面說明這項功能,以及使用時可用的選項。如需生命週期設定檔的一般格式,請參閱 JSON 的 bucket 資源表示法或 XML 的生命週期設定格式。

簡介

如要使用物件生命週期管理功能,請定義生命週期設定,且必須在 bucket 上設定。設定包含一組規則,適用於 bucket 中目前和未來的物件。當物件符合其中一個規則的條件時,Cloud Storage 會自動對此物件執行指定的操作。以下是一些範例用途:

  • 將存在超過 365 天的物件儲存空間級別降為 Coldline Storage。
  • 刪除 2019 年 1 月 1 日前建立的物件。
  • 在啟用版本管理的值區中,僅保留每個物件的 3 個最新版本。

生命週期設定

每項生命週期管理設定都包含一組規則。每項規則都包含一個動作和一或多個條件。

  • 物件必須符合規則中所有條件,才會執行規則中的動作。

  • 如果您指定多項含有相同動作的規則,當物件符合任一規則的條件時,系統就會對該物件採取動作。

  • 如果單一物件同時滿足多項規則的條件,Cloud Storage 只會根據下列考量因素,執行其中一項規則的相關動作:

    • Delete 動作的優先順序高於任何 SetStorageClass 動作。
    • 系統會優先執行 SetStorageClass 動作,將物件切換至靜態儲存空間價格最低的儲存空間級別。

    舉例來說,假設您有一項規則會將物件的類別變更為 Nearline Storage,另一項規則則會將物件的類別變更為 Coldline Storage,但這兩項規則使用完全相同的條件,那麼當條件符合時,物件的類別一律會變更為 Coldline Storage。

  • 請先在開發資料上測試生命週期規則,再套用至正式環境,確保規則不會在非預期的條件組合下執行動作。如果無法這麼做,您應使用規則中的 matchesPrefix 或 matchesSuffix 條件,測試一小部分的正式版資料。

  • 儲存空間生命週期設定變更後,最慢 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 動作並搭配其他條件的規則時,會發生錯誤。

生命週期條件

生命週期規則包含物件必須符合的條件,符合條件後,系統才會對物件執行規則中定義的動作。生命週期規則支援下列條件:

所有條件都是選擇性的,但至少需要有一個條件。如果嘗試進行無效的生命週期設定(例如透過使用不存在的操作或條件),則會收到 400 Bad request 錯誤響應,並且任何現有的生命週期設定都會保留在原位。

age

當資源達到指定天數的期限時,即符合 age 條件。年齡是從資源建立時間開始計算。

  • 如果是物件,建立時間是指物件成功寫入 bucket 的時間,例如上傳完成時。

    • 物件變成非現行版本後,物件的存留時間不會受到影響。
  • 如果是多部分上傳,建立時間就是上傳作業啟動的時間。

  • 如果 age 條件設為 0 值,則物件建立後,系統會在世界標準時間午夜滿足條件。

舉例來說,如果資源是在 2022 年 1 月 10 日 10:00 UTC 建立,且age條件為 10 天,則資源會在 2022 年 1 月 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 年 5 月 26 日 10:00 UTC 之後滿足條件。

如果物件未設定 Custom-Time 中繼資料,則一律不會滿足 daysSinceCustomTime。

daysSinceNoncurrentTime

daysSinceNoncurrentTime 條件通常只會與物件版本管理搭配使用。如果物件的使用中版本遭到刪除或取代,導致物件成為非現行版本,且經過指定天數後,系統就會滿足條件。舉例來說,如果物件在 2020 年 7 月 8 日下午 3 點 (世界標準時間) 變成非當前版本,且 daysSinceNoncurrentTime 條件為 10 天,則該物件會在 2020 年 7 月 18 日下午 3 點 (世界標準時間) 之後滿足條件。

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 條件,也應一併加入下列項目:

  • 如果 bucket 位於區域,請在條件中加入 REGIONAL 和 DURABLE_REDUCED_AVAILABILITY。

  • 如果值區位於多地區或雙地區中,請在條件中加入 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 值區設定物件生命週期管理功能後,Cloud Storage 會定期檢查所有物件,並根據值區規則執行所有適用的動作。Cloud Storage 會以非同步方式執行動作,因此條件符合後,可能要過一段時間才會執行動作。應用程式不應依賴生命週期動作,在符合生命週期條件後的一段時間內發生。

舉例來說,如果物件符合刪除條件,物件可能不會立即刪除,您會看到物件,直到系統對該物件執行生命週期動作為止。

物件維持原始狀態時,仍須支付適用費用,但如果物件符合下列所有條件,則可免除靜態儲存空間費用:

  • 物件位於已停用虛刪除功能的 bucket 中。

  • 該物件受限於具有 Delete 動作的規則。

  • 規則的條件只能是 age 條件,或是 age 和 matchesStorageClass 條件的組合。

  • 如果規則只有年齡條件,物件就會符合 age 條件。如果刪除規則同時包含 age 和 matchesStorageClass 條件,物件就必須滿足這兩項條件。

  • 物件沒有任何物件保留設定。

版本化物件的物件生命週期行為

在啟用物件版本管理功能的 bucket 中,根據生命週期規則刪除的使用中物件,會在一段時間內處於非現行狀態。如果物件的非現行版本也符合刪除規則的條件,系統會在時間到期後刪除該版本。

舉例來說,假設有項生命週期規則會刪除存在超過 180 天的物件。如果使用中的物件已存在 200 天,系統會刪除該物件並設為非現行版本。現在非現行物件的保留時間仍超過 180 天,因此一段時間後,系統也會刪除該物件。

SetStorageClass 費用注意事項

使用 SetStorageClass 屬於A 級作業,系統會根據目的地儲存空間級別決定費率。這項行為與手動變更物件的儲存空間級別類似。

與手動變更物件的儲存空間類別不同,使用 SetStorageClass 不會重寫物件。這項功能為物件生命週期管理帶來以下價格優勢:

  • 變更儲存空間級別時,絕不會產生跨區域複製費用、擷取費用或提前刪除費用。不過,如果儲存空間級別有指定最短儲存時間,且物件在時間結束前遭到刪除,則須支付提前刪除費用。

  • 物件在原始儲存空間級別中設定的時間,會計入新儲存空間級別適用的最短儲存時間。

舉例來說,假設您以 Nearline Storage 上傳物件,20 天後生命週期設定將物件的儲存空間級別變更為 Coldline Storage。這項異動不會產生檢索或提前刪除費用。 如果您在儲存空間級別變更後 60 天刪除物件,由於 Coldline Storage 的最低儲存時間為 90 天,而物件總共存在 80 天,因此只會產生 10 天的提前刪除費用。

舉例來說,假設您上傳物件時選擇 Nearline Storage,20 天後使用重寫功能變更儲存空間級別 (再次變更為 Coldline Storage)。這項變更會產生檢索費用和 10 天的提前刪除費用。如果您在重寫後 60 天刪除物件, 則會產生 30 天的提前刪除費用。

在這兩個範例中,如果 bucket 啟用虛刪除功能,儲存費用會增加,但提前刪除費用會根據虛刪除保留期限長度而減少。

物件建立時間

在許多情況下,物件上傳會在開始後不久完成;不過,如果是透過多個要求進行上傳 (例如可續傳的上傳作業),傳送初始上傳要求和傳送最終上傳要求之間可能會間隔數天。在這種情況下,請注意以下事項:

  • 物件上傳完成後,才會受到生命週期規則的約束。
  • 物件的建立時間是以上傳完成時間為準。這會影響 age 和 createdBefore 的生命週期條件。
  • 為物件設定 Custom-Time 時,請在上傳開始時進行。如果您根據要求時間設定 Custom-Time,則 Custom-Time 可能會比物件的建立時間早得多。這會影響 customTimeBefore 和 daysSinceCustomTime 的生命週期條件。

到期時間中繼資料

如果為具有 age 條件的 bucket 指定 Delete 動作 (且沒有 matchesStorageClass 以外的其他條件),則部分物件可能會標記到期時間中繼資料。物件的到期時間是指物件符合物件生命週期管理功能刪除資格的時間 (或已符合資格的時間)。如果 bucket 的生命週期設定或保留政策有所變更,到期時間可能會隨之變動。

請注意,沒有過期時間中繼資料並不表示一定不會刪除物件,而是沒有足夠的資訊確定何時或是否將其刪除。舉例來說,如果物件建立時間為 2020 年 1 月 10 日 10:00 UTC,且 age 條件設為 10 天,則物件到期時間為 2020 年 1 月 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 主題。請注意,這項功能不會記錄執行動作的使用者。

後續步驟