為了支援常見用途,例如為物件設定存留時間 (TTL)、保留非現行版本的物件,或是將物件儲存空間級別「降級」,Cloud Storage 提供了物件生命週期管理功能。
本頁面將說明這項功能及可用選項。如需生命週期設定檔的通用格式,請參閱 JSON 適用的值區資源表示法或 XML 適用的生命週期設定格式。
簡介
如要使用物件生命週期管理功能,請定義生命週期設定,且必須在值區上設定。此設定包含一組適用於值區中目前和未來物件的規則。當物件符合其中一個規則的條件時,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
支援下列儲存空間級別轉換:
原始儲存空間級別 | 新儲存空間級別 |
---|---|
Standard Storage | Nearline Storage Coldline Storage Archive Storage |
Nearline Storage | Coldline Storage Archive Storage |
Coldline Storage | Archive Storage |
Cloud Storage 不會驗證儲存空間類別轉換是否正確。也就是說,您可以指定上表未列出的儲存空間類別轉換,但轉換不會發生。請確認生命週期規則使用所列的其中一種儲存空間類別轉換。
取消未完成的多部分上傳作業
如果多部分上傳作業符合生命週期規則中指定的條件,系統就會執行 AbortIncompleteMultipartUpload
動作,中止未完成的多部分上傳作業,並刪除相關部分。
這項動作只能搭配下列生命週期條件使用:
如果嘗試建立使用 AbortIncompleteMultipartUpload
動作的規則,並搭配其他條件,就會發生錯誤。
生命週期條件
生命週期規則包含物件必須符合的條件,符合條件後,系統才會對物件執行規則中定義的動作。生命週期規則支援下列條件:
age
createdBefore
customTimeBefore
daysSinceCustomTime
daysSinceNoncurrentTime
isLive
matchesStorageClass
matchesPrefix
和matchesSuffix
noncurrentTimeBefore
numNewerVersions
所有條件都是選擇性的,但至少需要有一個條件。如果嘗試進行無效的生命週期設定(例如透過使用不存在的操作或條件),則會收到 400 Bad request
錯誤響應,並且任何現有的生命週期設定都會保留在原位。
age
當資源達到指定存在時間 (以天為單位) 時,即滿足 age
條件。存在時間從資源的建立時間開始測量。
舉例來說,如果資源是在 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 (世界標準時間) 成為非最新版本,且 daysSinceNoncurrentTime
條件為 10 天,則 2020/07/18 15:00 (世界標準時間) 當天及之後的物件條件都會滿足。
isLive
isLive
條件通常只會搭配物件版本管理使用。如果設為 false
,則物件的任何非目前版本都會滿足此條件。如果設為 true
,物件的使用中版本即滿足此條件。如果您未使用版本控管,系統會將所有物件視為有效,並在 isLive
為 true
時進行比對。
matchesPrefix
和 matchesSuffix
當物件名稱的開頭或結尾與指定前置字串或後置字串完全相符 (區分大小寫) 時,即滿足 matchesPrefix
和 matchesSuffix
條件。您可以指定多個字串做為清單 (例如 "matchesSuffix": [".jpg", ".png"]
)。
使用 matchesPrefix
時,請勿加入 bucket 名稱,或大多數要求路徑中物件名稱前的 /
。舉例來說,在 Google Cloud CLI 中,名為 my_bucket
的值區中物件的路徑格式類似於 gs://my_bucket/pictures/paris_2022.jpg
。如要比對物件,請使用 "matchesPrefix":["pictures/paris_"]
等條件。
所有規則加總最多可指定 1000 個前置字串和後置字串。在 Trusted Cloud 控制台中,您最多可以複製及貼上 1000 個前置字元或後置字元。單一條件不得使用兩次前置字元或後置字元。
matchesStorageClass
當值區中的物件儲存為指定儲存空間級別時,即滿足 matchesStorageClass
條件。您可以為 matchesStorageClass
使用以下值:STANDARD
、NEARLINE
、COLDLINE
和 ARCHIVE
。
noncurrentTimeBefore
noncurrentTimeBefore
條件通常只會與物件版本管理搭配使用。如果物件在指定日期前成為非現行物件,即滿足此條件。條件是使用 YYYY-MM-DD
日期格式設定。noncurrentTimeBefore
永遠不會滿足使用中的物件。
numNewerVersions
numNewerVersions
條件通常只會搭配物件版本管理使用。如果此條件的值設定為 N,則物件版本在至少有較新的 N 個版本 (包括使用中版本) 時滿足此條件。對使用中物件版本來說,較新版本的數量視為 0。至於最新的非現行版本,較新版本的數量為 1 (如果沒有使用中物件版本,則為 0),依此類推。
物件生命週期行為
為 Cloud Storage 值區設定物件生命週期管理後,Cloud Storage 會定期檢查所有物件,並根據值區規則執行所有適用的操作。Cloud Storage 非同步執行操作,因此在條件滿足和操作執行之間可能會有延遲。您的應用程式不應依賴在滿足生命週期條件後一定時間內發生的生命週期操作。
舉例來說,如果某個物件符合刪除條件,該物件可能不會立即遭到刪除,您會一直看到這個物件,直到系統對它執行生命週期操作為止。
版本化物件的物件生命週期行為
在啟用物件版本管理功能的值區中,根據生命週期規則刪除的使用中物件,會在一段時間內處於非現行狀態。如果物件的非現行版本也符合刪除規則的條件,系統會在時間到期後刪除該版本。
舉例來說,假設有項生命週期規則會刪除超過 180 天的物件。如果使用中的物件已存在 200 天,系統就會刪除該物件並設為非現行物件。現在這個非現用物件的存放時間仍超過 180 天,因此一段時間後,系統也會刪除這個非現用物件。
物件建立時間
在許多情況下,物件上傳會在開始後不久完成;不過,對於透過多個要求進行的上傳 (例如可續傳的上傳),傳送初始上傳要求和傳送最終上傳要求之間可能會有幾天的時間差。在這種情況下,請注意下列事項:
- 物件上傳完成後,才會受到生命週期規則的影響。
- 物件的建立時間以完成上傳的時間為準。這會影響
age
和createdBefore
的生命週期條件。 - 為物件設定
Custom-Time
時,請在上傳作業開始時進行。如果您根據要求時間設定Custom-Time
,Custom-Time
可能會比物件的建立時間早很多。這會影響customTimeBefore
和daysSinceCustomTime
生命週期條件。
到期時間中繼資料
如果為值區指定在 age
條件 (且沒有 matchesStorageClass
以外的其他條件) 下進行 Delete
操作,則某些物件可能會標記到期時間中繼資料。物件的到期時間表示物件 (已) 符合資格,可由物件生命週期管理進行刪除的時間。到期時間可能會隨值區的生命週期設定或保留政策的變更而更改。
請注意,沒有過期時間中繼資料並不表示一定不會刪除物件,而是沒有足夠的資訊確定何時或是否將其刪除。舉例來說,如果物件建立時間為 2020/01/10 10:00 (世界標準時間),並且 age
條件設定為 10 天,則物件到期時間為 2020/01/20 10:00 (世界標準時間)。但是,在下列情況下,物件的到期時間將無法使用:
Delete
規則中指定了其他條件,但matchesStorageClass
除外。您使用的
matchesStorageClass
條件未包含物件的儲存空間級別。物件處於保留狀態,因為 Cloud Storage 無法得知保留狀態何時會解除。
bucket 已啟用虛刪除功能。
即使未立即刪除物件,系統也不會在物件到期時間後收取儲存費用。您可以在刪除物件之前繼續存取該物件,但要負擔其他費用(要求、網路頻寬)。如果物件沒有到期時間,則系統會收取物件儲存費用,直到物件被刪除為止。
處理到期時間時,請注意以下事項:
如果值區有保留政策,則到期時間是以下二者較晚者:物件生命週期管理
age
條件,以及物件符合保留政策指定保留期限的時間。如果由於不同的生命週期管理規則而有多個適用於物件的到期時間,則使用最早的適用到期時間。
追蹤生命週期操作的選項
要追蹤 Cloud Storage 進行的生命週期管理操作,請使用以下選項之一:
- 為值區啟用 Cloud Storage 的 Pub/Sub 通知。在進行指定操作時,此功能會傳送通知到您選擇的 Pub/Sub 主題。請注意,此功能不會記錄執行操作的人員。
後續步驟
- 啟用物件生命週期管理。
- 請參閱生命週期設定範例。
- 請參閱 JSON API 要求和 XML API 要求,瞭解生命週期設定的通用格式。