星期四, 10月 31, 2019

AWS S3 life cycle with aws s3api 小記

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
            }
         }
        ]
}



使用指令套用相關設定
> 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:

沒有留言: