物件生命週期管理

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

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 支援下列儲存空間級別轉換:

原始儲存空間級別 新儲存空間級別
Standard Storage Nearline Storage
Coldline Storage
Archive Storage
Nearline Storage Coldline Storage
Archive Storage
Coldline Storage Archive Storage

Cloud Storage 不會驗證儲存空間級別轉換的正確性。也就是說,您可以指定上表未列出的儲存空間級別轉換,但轉換不會發生。請確認生命週期規則使用列出的其中一種儲存空間級別轉換。

取消未完成的多部分上傳作業

當分段上傳符合生命週期規則中指定的條件時,AbortIncompleteMultipartUpload 動作會取消未完成的分段上傳,並刪除相關聯的部分。

這項動作只能搭配下列生命週期條件使用:

如果嘗試建立的規則同時使用 AbortIncompleteMultipartUpload 動作和其他條件,就會發生錯誤。

生命週期條件

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

所有條件都是選擇性的,但至少需要有一個條件。如果嘗試進行無效的生命週期設定(例如透過使用不存在的操作或條件),則會收到 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 個。在 Cloud de Confiance 控制台中,您最多可以複製及貼上 1, 000 個前置字串或後置字串。在單一條件中,前置字元或後置字元不得使用兩次。

matchesStorageClass

當 bucket 中的物件以指定的儲存空間級別儲存時,即符合 matchesStorageClass 條件。matchesStorageClass 可使用下列值:STANDARD、NEARLINE、COLDLINE 和 ARCHIVE。

noncurrentTimeBefore

noncurrentTimeBefore 條件通常只會與物件版本管理搭配使用。如果物件在指定日期前變成非現行版本,即符合條件。條件是以日期格式 YYYY-MM-DD 設定。noncurrentTimeBefore 永遠不適用於使用中的物件。

numNewerVersions

numNewerVersions 條件通常只會與物件版本管理搭配使用。如果將這個條件的值設為 N,則當有至少 N 個版本 (包括使用中版本) 比某個物件版本新時,該物件版本即符合條件。如果是使用中的物件版本,較新版本的數量會視為 0。如果是最新的非現行版本,新版本的數量為 1 (如果沒有使用中的物件版本,則為 0),以此類推。

sizeAboveBytes 和 sizeBelowBytes

當物件大小大於指定值時,即符合 sizeAboveBytes 條件。使用這項條件,定義生命週期動作的大小下限門檻。

當物件大小小於指定值時,即符合 sizeBelowBytes 條件。使用這項條件,定義生命週期動作的大小門檻上限。

如要定義物件大小範圍,請在同一規則中同時使用 sizeAboveBytes 條件和 sizeBelowBytes 條件。

物件生命週期管理會評估物件資料的大小 (以位元組為單位),不含物件中繼資料的大小。sizeAboveBytes 或 sizeBelowBytes 的最大值為 5 TiB。

物件生命週期行為

為 Cloud Storage bucket 設定物件生命週期管理功能後,Cloud Storage 會定期檢查所有物件,並根據 bucket 的規則執行所有適用動作。Cloud Storage 會以非同步方式執行動作,因此從條件滿足到動作執行之間可能會有延遲。應用程式不應依賴在符合生命週期條件後,於特定時間內發生的生命週期動作。

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

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

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

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

物件建立時間

在許多情況下,物件上傳作業會在開始後不久完成。不過,如果上傳作業涉及多個要求 (例如支援續傳的上傳作業),則從傳送初始上傳要求到傳送最終上傳要求之間,可能會有幾天的時間。在這種情況下,請留意下列事項:

  • 物件上傳完成後,才會受到生命週期規則的規範。
  • 物件的建立時間取決於上傳完成時間。這會影響 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 進行的生命週期管理操作,請使用以下選項之一:

  • 為 bucket 啟用 Cloud Storage 的 Pub/Sub 通知。這項功能會在指定動作發生時,將通知傳送至您選擇的 Pub/Sub 主題。請注意,這項功能不會記錄執行動作的使用者。

後續步驟