實作 Cloud Storage 儲存空間級別、生命週期管理、物件版本管理功能以及節省預算妙招分享
儲存空間級別、生命週期管理、物件版本管理功能以及節省預算

實作 Cloud Storage 儲存空間級別、生命週期管理、物件版本管理功能以及節省預算妙招分享


在GCP 的眾多服務當中,Cloud Storage 是我們常會使用的儲存服務.不管是用來當作數據分析的資料存放空間,或者是儲存長期備份檔,作為影音傳遞服務的檔案儲存空間等等,Cloud Storage 是我們在數據當道的時代,扮演著重要的角色。

因此,今天的文章裡,筆者想為各位介紹三個 Cloud Storage 功能,並搭配實作教學進一步整合這些功能,使您可以依照個人使用需求,做到更完善的儲存空間規劃。

在這篇文章裡面,您將會了解到:

Cloud Storage 的儲存空間級別介紹及設定

Cloud Storage 的生命週期管理功能設定

物件版本管理功能的介紹和操作

接著就讓我們一起進入今天的主題吧!

一、儲存空間級別(Storage Class)

Storage Class 功能可以幫助您依照資料的存取頻率,以及使用效能需求,對您的值區物件套用不同的儲存級別。以下是 Google Cloud 的4個不同的儲存級別:

以下表格可以讓您了解四者之間的差異:


StandardNearlineColdlineArchive







特性
已針對效能完成最佳化調整,適合存放時間短的資料,或者是經常存取的資料。具備高耐久性,費用相較Standard 低,存取速度快,適用於平均一個月存取不到一次的資料。也具備高耐久性,資料可高速存取,費用在四個儲存等級中是次低的,不過存放資料的選擇上,更適合平均一季(90天)存取不到一次的資料。
適用於儲存一年存取不到一次的檔案。如果有封存備份的需求,您可以選擇Archive 等級來封存您的資料。
儲存在單一區域費用(Aais-east 1)0.02/GB(USD)0.01/GB(USD)0.005/GB(USD)0.0015/GB(USD)
最短儲存時間30 天90 天365天
資料取出費用free0.01/GB(USD)0.02/GB(USD)0.05/GB(USD)

在以上表格中,我們會發現,最短儲存時間越長,儲存資料的費用就越便宜,這是因為儲存等級本來就是依據不同的儲存檔案需求去設計。

比方說:

「如果我想要在Cloud Storage 上面做檔案的備份,而這些檔案可能是每三個月會被拿出來查看的資料」

這一類的檔案就適合將儲存等級設定成Coldline,以節省儲存費用。

但要留意的是,這些具有最短儲存時間限制的資料,都會酌收資料取出費。而且,如果你在最短儲存時間內移動或是刪除 Nearline、Coldline 跟Archive 的物件,還要額外收取提前刪除費用,所以在上傳檔案到 Cloud Storage 前,最好先考慮好儲存檔案本身的存取頻率,再決定他們適合的儲存等級。

如何設定儲存級別

參照該步驟,我們可以在新建值區(Bucket)的時候,完成儲存級別設定:

  1. 按下GCS選單中的CREATE BUCKET,新增一個新的值區(如下圖):

在值區的命名規則中,Google 的說明文件告訴我們:每個值區的名字都會在 Cloud Storage 當中佔據一個命名空間,換句話說,每個值區的命名都必須是全球獨一無二的。如果你想取的值區名稱已存在,Cloud Storage 會報錯通知(如下圖顯示)。其他關於值區命名的規則,可以參考GCP的官方文件

2. 選擇儲存級別:

在設定儲存等級時,我們只要在 CREATE BUCKET 的第三個步驟 Choose a default storage class for your data,點擊我們需要的級別,再按下 CONTINUE 儲存級別設定的動作,完成其他選單上的步驟後,按下 CREATE,新值區就會按照您所選擇的儲存等級套用設定到新產生的物件上。

修改值區預設儲存級別

以下是修改值區預設儲存級別的範例,請注意,這項修改只會對修改設定後放入值區的資料生效,原先在值區內的物件儲存級別並不會更動。以下是設定步驟:

  1. 在 Cloud Storage 介面找到欲變更儲存等級的值區名稱:在 Cloud Storage 的值區清單裡面,選取欲變更的值區;接著在 Bucket details 裡面,找到 EDIT BUCKET,並點擊它。(如下圖)

2. Default storage class:進入編輯值區的畫面(如下圖)以後,我們在 Default storage class 裡面,重新點選想要變更的等級,再按下藍色 Save 鍵,值區預設儲存等級修改就完成了。

了解以上設定後,我們可以知道,在不同的儲存條件下,我們可以透過更改 Storage Class 來降低物件儲存的費用,但如果都需要透過手動去進行變更,那恐怕有點麻煩,所以接下來,我們來看看 Lifecycle 可以幫我們做點什麼。

二、物件的生命週期(Lifecycle)

簡單來說,Lifecycle 的概念就是:透過設定生命條件(生命週期條件)去觸發刪除檔案的作業,或是改用價格較低廉的儲存等級來保存物件(Cloud Storage 稱之為物件生命週期行為)。

回應在上個段落提到的問題,當我希望 Cloud Storage 可以幫我自動管理我的物件級別,我就可以設定以下生命收期條件:

「我要在檔案新增三個月後,將值區內所有 Coldline 儲存級別的物件降級到Archive 級別。」

不過,設定的方式當然不是透過輸入中文語句來完成,實際操作方式,請看以下範例:

設定 Lifecycle

生命週期的設定可以分為兩個部分:

A. 生命週期條件

B. 物件生命週期行為

當A.的條件滿足,就會觸發 B. 行為,以下是一個實作的範例:

  1. 開啟值區(Bucket)圖形介面選單

2. 在 Bucket Lock,點選 Add lifecycle rule 的按鈕

3. Select object conditions and Select action,設定生命週期條件以及物件生命 週期行為:

點開 Add lifecycle rule 以後會看到下圖的設定選單。我在設定選單中的區塊1 Select Object Conditions 設定 Age 50 days 當作生命週期條件,接著,我再從區塊 2 Select Action 物件生命週期中選擇 Delete。

完成這個設定以後就表示:

「當有物件被上傳到這個值區滿50天,物件就會被自動刪除。」

*貼心提醒,設定好生命週期,最晚要過24小時以後才會生效喔!

以下我們再繼續細看其他 Lifecycle 的設定:

生命週期條件

Cloud Storage 的生命週期條件,可分為以下五項,您可以在設定時選擇一到多個生命週中條件作為觸發條件:

a. Age:存在的時間。從物件產生的日期起算,滿了設定的天數後執行物件生命週 期行為。

b. CreatedBefore:所有在這個您設定的日期或是在這個日期之前的物件,都會觸發物件生命週期行為。

c. MatchesStorageClass:設定所有我所選取的儲存等級作為觸發條件,執行物件生命週期行為。

d. NumberofNewVersion:只有開啟物件版本功能,該條件才會觸發。輸入一個版本數字,條件就會套用在這個數字以上的版本,觸發物件生命週期行為。

e. IsLive:只有開啟物件版本功能,該條件才會觸發。如果選 noncurrent,所有非當前版本的物件就會被套用上這個條件;選擇 Live,所有當前的版本就會被套用到這個選取條件,觸發物件生命週期行為。

物件生命週期行為

Cloud Storage 的物件生命週期行為,分為以下兩種,使用者只能選擇一個行為來執行:

  1. Delete:刪除達成生命週期條件的物件。
  2. SetStorageClass:調整達成生命週期條件的物件成為指定的儲存級別Cloud Storage 的設定中,提供的級別選項有三個,分別是:Nearline、Coldline 跟Archive。

以上就是物件生命週期的介紹,剛剛我們在說明生命週期條件的介紹時,我們再下個段落會做詳細的介紹。

三、物件版本管理(Object Versioning)

Cloud Storage 預設您的物件在遇到覆寫檔案的情況時,原先相同名稱的物件會被刪除,並且由新的檔案取而代之。您可以透過開啟 Object Versioning 的功能,保留同名但是不同版本的物件,使它們並存在您的 Cloud Storage 值區當中。

非當前版本(noncurrent version)

相對於當前使用者在值區內的圖形化清單中可以看到的物件,也就是當前版本(live version),已經被刪覆寫或是刪除的物件版本,就成為了非當前版本。

為了辨識每個版本,每個物件版本還會有自己所屬的編號,被稱作 generation number,當新的版本被上傳到值區時,它就會取代舊的同名物件成為新的當前版本;此時,Cloud Storage 也會為它產生一個新的 generation number。

generation number 就像身分證一樣,會綁定該物件直到它從 Cloud Storage 上面被移除。

非當前版本物件的儲存費用

非當前版本(noncurrent version)所產生的費用,跟現有值區當中的物件儲存費用相同。以儲存在 asia-east1 的資料為例,如果你的值區裡面有1GB 的非當前版本物件,當前版本的儲存等級為 Standard 時。每個月就會產生0.02美金的費用。

版本管理的設定方式

您可以透過 GCP 的 gsutil 指令,撰寫 Java 或是 C++ 程式,以及 JSON API、XML 等方式來開啟功能。以下我們利用 gsutil 指令當作範例,在 GCP Cloud Shell 上執行開啟功能:

  1. 確認我們的值區(Bucket)名稱:版本管理的功能會套用在一整個值區,開啟設定以後,每當目前值區中介面顯示的物件被刪除或是複寫時,GCS 就會自動產生非同步版本( noncurrent version
  2. 開啟 GCP Cloud Shell:在控制台右上方找到一個方形中有>_的按鍵,點選他開啟 GCP Cloud Shell。 Cloud Shell 是 GCP 一台免費的虛擬主機,我們可以透過它來操作 GCP 上面的服務。

3. 輸入啟動版本控制指令:

gsutil versioning set on gs://[BUCKET_NAME]

說明:BUCKET_NAME 的欄位中,請輸入您想要開啟功能的值區名稱。

如果成功開啟版本控管,會看到Cloud Shell回覆截圖中的訊息:Enable versioning for gs://[您所輸入的值區名稱],如下圖所示:

查看值區中的物件版本清單

因為在設定好的值區圖形化介面裡,GCS 不會自動將非當前版本的物件顯示出來,所以我們要透過指令,來列出清單中所有物件的版本。

在 Cloud Shell 輸入以下指令可以列出值區中的物件版本:

gsutil ls -a gs://[BUCKET_NAME]

而回傳的物件版本,會以物件名稱,加上一個編號(一個自動產生的序號,識別物件的版本)

回傳範例:

gs://seminar-and-workshop/1.png#1592269813137298

gs://seminar-and-workshop/2020-03-25.png#1594371629190591

關閉版本控管功能

最後,如果想要關閉值區的版本控管功能,您可以在 Cloud Shell 輸入以下指令:

gsutil versioning set off gs://[BUCKET_NAME]

當然,版本管理可以幫助我們在資料遺失時有個保險,不過當資料量累積的越來越多,費用也是會相當可觀的。所以,如果能套用我們分享的物件生命週期功能,就可以讓我們節省儲存物件的費用;回顧這篇文章的內容,您可以透過進一步的功能設定,來幫助自己在使用 Cloud Storage 時,節省多餘的開支,利用版本控管功能,可以救回遭到複寫或是刪除的檔案。以上就是今天的內容,其他關於 Cloud Storage 的功能跟妙招,我們有機會再繼續分享。

如果有需要專案開發、技術支援,歡迎填寫聯繫表單與我們聯繫!

Chao Joshua

為Cloud Ace解決方案架構師。熟悉GCP雲端服務,並著力於大數據分析方法及數據管道研究。提供企業雲端架構諮詢與技術支援。

Leave a Reply