了解 StorageGRID 的 S3 生命週期組態
您可以建立 S3 生命週期組態來控制何時從 StorageGRID 系統中刪除特定物件。
本節中的簡單範例說明如何透過 S3 生命週期組態來控制何時從特定的 S3 儲存桶中刪除(過期)某些物件。本節中的範例僅用於說明目的。有關建立 S3 生命週期組態的完整詳細資訊,請參閱 "Amazon Simple Storage Service 使用者指南:物件生命週期管理"。請注意,StorageGRID 僅支援過期動作,不支援轉換動作。
生命週期組態是什麼?
生命週期組態是一組應用於特定 S3 儲存桶中物件的規則。每條規則都指定哪些物件會受到影響,以及這些物件何時過期(在特定日期或經過一定天數後)。
StorageGRID 在生命週期組態中支援最多 1,000 條生命週期規則。每條規則可以包含以下 XML 元素:
-
過期時間:當達到指定日期或達到指定天數時(從物件被擷取之日起算),刪除該物件。
-
NoncurrentVersionExpiration:當達到指定的天數時,從物件變成非目前版本之日起刪除該物件。
-
篩選(前綴,標籤)
-
狀態
-
ID
每個物件都遵循 S3 儲存桶生命週期或 ILM 原則的保留設定。設定 S3 儲存桶生命週期後,對於符合該儲存桶生命週期篩選器的物件,生命週期過期動作會置換 ILM 原則。不符合該儲存桶生命週期篩選器的物件,則使用 ILM 原則的保留設定。如果物件符合儲存桶生命週期篩選器,但未明確指定過期動作,則不會使用 ILM 原則的保留設定,並且預設物件版本將永久保留。請參閱 "S3 儲存桶生命週期和 ILM 原則的優先順序範例"。
因此,即使 ILM 規則中的放置指令仍然適用於某個物件,該物件也可能從網格中移除。或者,即使針對該物件的任何 ILM 放置指令都已失效,該物件也可能保留在網格中。如需詳細資訊,請參閱 "ILM 如何在物件的整個生命週期中運作"。
|
|
儲存桶生命週期組態可用於已啟用 S3 Object Lock 的儲存桶,但舊版 Compliant 儲存桶不支援儲存桶生命週期組態。 |
StorageGRID 支援使用下列儲存桶操作來管理生命週期組態:
-
DeleteBucketLifecycle
-
GetBucketLifecycleConfiguration
-
PutBucketLifecycleConfiguration
建立生命週期組態
建立生命週期組態的第一步是建立一個包含一條或多條規則的 JSON 檔案。例如,以下 JSON 檔案包含三條規則:
-
規則 1 僅適用於前綴為
category1/ 且 `key2`值為 `tag2`的物件。此 `Expiration`參數指定符合篩選條件的物件將於 2020 年 8 月 22 日午夜過期。 -
規則 2 僅適用於前綴為
category2/ 的物件。此 `Expiration`參數指定符合篩選條件的物件將在擷取後 100 天過期。指定天數的規則是相對於物件擷取時間而言的。如果目前日期超過擷取日期加上指定天數,則在套用生命週期組態後,某些物件可能會立即從儲存桶中移除。 -
規則 3 僅適用於前綴為
category3/ 的物件。此 `Expiration`參數指定任何符合物件的非目前版本將在變成非目前版本後 50 天過期。
{
"Rules": [
{
"ID": "rule1",
"Filter": {
"And": {
"Prefix": "category1/",
"Tags": [
{
"Key": "key2",
"Value": "tag2"
}
]
}
},
"Expiration": {
"Date": "2020-08-22T00:00:00Z"
},
"Status": "Enabled"
},
{
"ID": "rule2",
"Filter": {
"Prefix": "category2/"
},
"Expiration": {
"Days": 100
},
"Status": "Enabled"
},
{
"ID": "rule3",
"Filter": {
"Prefix": "category3/"
},
"NoncurrentVersionExpiration": {
"NoncurrentDays": 50
},
"Status": "Enabled"
}
]
}
將生命週期組態套用至儲存桶
建立生命週期組態檔案後,透過發出 PutBucketLifecycleConfiguration 請求將其套用到儲存桶。
此請求將範例檔案中的生命週期組態套用至名為 `testbucket`的儲存貯體中的物件。
aws s3api --endpoint-url <StorageGRID endpoint> put-bucket-lifecycle-configuration --bucket testbucket --lifecycle-configuration file://bktjson.json
若要驗證生命週期組態是否已成功套用到儲存桶,請發出 GetBucketLifecycleConfiguration 請求。例如:
aws s3api --endpoint-url <StorageGRID endpoint> get-bucket-lifecycle-configuration --bucket testbucket
成功回應會列出您剛剛套用的生命週期組態。
驗證儲存貯體生命週期到期是否適用於物件
您可以在發出 PutObject、HeadObject 或 GetObject 請求時,確定生命週期組態中的過期規則是否適用於特定物件。如果規則適用,則回應將包含一個 `Expiration`參數,用於指示物件的過期時間以及符合的過期規則。
|
|
由於儲存桶生命週期會置換 ILM,因此 `expiry-date`顯示的日期是物件實際刪除的日期。如需詳細資訊,請參閱"如何確定物件保留"。 |
例如,此 PutObject 請求於 2020 年 6 月 22 日發出,並將物件放入 `testbucket`儲存桶中。
aws s3api --endpoint-url <StorageGRID endpoint> put-object --bucket testbucket --key obj2test2 --body bktjson.json
成功回應表示該物件將在 100 天後(2020 年 10 月 1 日)過期,並且符合生命週期組態的規則 2。
{
*"Expiration": "expiry-date=\"Thu, 01 Oct 2020 09:07:49 GMT\", rule-id=\"rule2\"",
"ETag": "\"9762f8a803bc34f5340579d4446076f7\""
}
例如,此 HeadObject 請求用於取得 testbucket 儲存桶中相同物件的中繼資料。
aws s3api --endpoint-url <StorageGRID endpoint> head-object --bucket testbucket --key obj2test2
成功回應包含物件的中繼資料,並指示該物件將在 100 天後過期,且符合規則 2。
{
"AcceptRanges": "bytes",
*"Expiration": "expiry-date=\"Thu, 01 Oct 2020 09:07:48 GMT\", rule-id=\"rule2\"",
"LastModified": "2020-06-23T09:07:48+00:00",
"ContentLength": 921,
"ETag": "\"9762f8a803bc34f5340579d4446076f7\""
"ContentType": "binary/octet-stream",
"Metadata": {}
}
|
|
對於啟用版本控制的儲存貯體, x-amz-expiration 回應標頭僅適用於物件的目前版本。
|