AWS S3 life cycle with aws s3api 小記
OS: Container with openSUSE Leap 15
這篇要來寫 S3 的生命週期管理
AWS 的儲存, 最常見到的就是 S3, 以使用方式來說, 大概會看到
- S3
- S3 Glacier
這兩個方式來存取, 詳細類別可以參考
根據使用方式的不同會選擇不同的 S3類別或是 S3 Glacier 類別
大部分的使用方式可能是
S3 ( 常儲存物件 ) ==(一定天數)== > S3 Glacier ( 封存 ) ==(一定天數)== > 刪除物件
或是
S3 ( 常儲存物件 ) ==(一定天數)== > 刪除物件
在 S3 的使用上, 針對生命週期又可分爲
- 啟用 Versioning ( 版本控制 )
- 目前的版本(Current)
- 可以透過 Transition 來轉換到指定的儲存體方案, 例如 Glacier
- 可以使用 Date 與 Days 來設定
- 可以透過 Expiration 設定, 超過 Expiration 天數的目前版本會變成非目前版本,目前版本則會變成刪除標記(delete marker)
- 可以使用 Date 與 Days 來設定
- 非目前的版本( NoncurrentVersion )
- 可以透過 NoncurrentVersionTransition 來轉換到指定的儲存體方案, 例如 Glacier
- 只能透過 NoncurrentDays 來設定
- 可以透過 NoncurrentVersionExpiration 來刪除非目前版本物件, 且已經刪除的物件無法復原
- 只能透過 NoncurrentDays 來設定
- 未啟用 Versioning ( 版本控制 )
- 所有的物件都是 目前的版本(Current)
- 可以透過 Transition 來轉換到指定的儲存體方案, 例如 Glacier
- 可以使用 Date 與 Days 來設定
- 可以透過 Expiration 來刪除物件, 且已經刪除的物件無法復原
- 可以使用 Date 與 Days 來設定
- 針對有版本控制才有的選項都沒有作用, 例如
- NoncurrentVersionTransition
- NoncurrentVersionExpiration
==== Lab1: S3中的檔案10天之後刪除 ====
> aws s3 mb s3://sakanatest
> aws s3 ls
2019-09-08 22:00:30 sakanatest
> aws s3api get-bucket-lifecycle-configuration --bucket sakanatest
An error occurred (NoSuchLifecycleConfiguration) when calling the GetBucketLifecycleConfiguration operation: The lifecycle configuration does not exist
建立一個 lifecycle.json 檔案如下
{
"Rules": [
{
"ID": "sakanatest",
"Filter": {
"Prefix": ""
},
"Status": "Enabled",
"NoncurrentVersionExpiration": {
"NoncurrentDays": 1
},
"Expiration": {
"Days": 10
}
}
]
}
- ID: bucket 的名稱
- NoncurrentDays: 針對如果 Bucket 有啟用版本控制, 非目前版本的檔案的相關設定, 可以參考 https://docs.aws.amazon.com/zh_tw/AmazonS3/latest/dev/lifecycle-configuration-examples.html#lifecycle-config-conceptual-ex6
使用指令套用相關設定
> aws s3api put-bucket-lifecycle-configuration --bucket sakanatest --lifecycle-configuration file://lifecycle.json
觀察相關資訊
> aws s3api get-bucket-lifecycle-configuration --bucket sakanatest
{
"Rules": [
{
"Expiration": {
"Days": 10
},
"ID": "sakanatest",
"Filter": {
"Prefix": ""
},
"Status": "Enabled",
"NoncurrentVersionExpiration": {
"NoncurrentDays": 1
}
}
]
}
上面的設定爲
- 無版本控制
- 檔案經過 10 天之後刪除
- 有版本控制
- 檔案經過 10 天之後過期, 變成非目前版本
- 非目前版本 1 天之後刪除
==== Lab2: S3中的檔案10天之後改為Glacier, 15天之後刪除 ====
> aws s3 mb s3://sakanatest
> aws s3 ls
2019-10-19 13:40:40 sakanatest
2019-10-19 13:50:43 sakanatest2
> aws s3api get-bucket-lifecycle-configuration --bucket sakanatest2
An error occurred (NoSuchLifecycleConfiguration) when calling the GetBucketLifecycleConfiguration operation: The lifecycle configuration does not exist
建立一個 lifecycle2.json 檔案如下
{
"Rules": [
{
"ID": "sakanatest2",
"Filter": {
"Prefix": ""
},
"Status": "Enabled",
"NoncurrentVersionExpiration": {
"NoncurrentDays": 20
},
"Transitions":[
{
"Days": 10,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 15
}
}
]
}
> aws s3api put-bucket-lifecycle-configuration --bucket sakanatest2 --lifecycle-configuration file://lifecycle2.json
# aws s3api get-bucket-lifecycle-configuration --bucket sakanatest2
{
"Rules": [
{
"Status": "Enabled",
"NoncurrentVersionExpiration": {
"NoncurrentDays": 20
},
"Filter": {
"Prefix": ""
},
"Expiration": {
"Days": 15
},
"Transitions": [
{
"Days": 10,
"StorageClass": "GLACIER"
}
],
"ID": "sakanatest2"
}
]
}
上面的設定爲
- 無版本控制
- 檔案經過 10 天之後轉為 Glacier, 第15天後刪除
- 這邊要注意 Glacier 有最小儲存天數(存檔於 S3 Glacier 上的物件至少必須儲存 90 天,而在 90 天內刪除的物件則需按比例支付剩餘天數的儲存費用。[7])
- 有版本控制
- 檔案經過 10 天之後轉為 Glacier, 第15天後變成非目前版本
- 非目前版本 20 天之後刪除
先記下來
~ enjoy it
Reference:
沒有留言:
張貼留言