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

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

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

因此,今天的文章裡,筆者想為各位介紹三個 Cloud Storage 功能,包含「儲存空間級別介紹及設定」、「生命週期管理功能設定」,和「物件版本管理功能的介紹和操作」。此外也將搭配實作教學進一步整合這些功能,使您可以依照個人使用需求,做到更完善的儲存空間規劃。

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

Cloud Storage 的 Storage Class 功能可以幫助您依照資料的存取頻率,以及使用效能需求,對您的值區物件套用不同的儲存級別。其中4個不同的儲存級別依序為「Standard」、「Nearline」、「Coldline」跟「Archive」,四者的差異請見下表。

從上表中我們可發現,最短儲存時間越長,儲存資費用越便宜,這是因為儲存等級本來就是依據不同的儲存檔案需求去設計。比如「我想在 Cloud Storage 上備份檔案,而這些檔案可能是每三個月會被拿出來查看的資料」,此情境下的檔案就適合將儲存等級設定成 Coldline 以節省儲存費用。

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

Cloud Storage 儲存級別設定教學

首先第一步,我們可以在新建值區(Bucket)的時候完成儲存級別設定。這邊我們按下 GCS 選單中的 CREATE BUCKET 新增一個值區(詳見下圖)

截圖自:Google Cloud Platform Console 頁面
©2022 Google

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

截圖自:Google Cloud Platform Console 頁面
©2022 Google

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

修改值區預設儲存級別

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

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

Cloud Storage 變更值區_示意圖
截圖自:Google Cloud Platform Console 頁面
©2022 Google

而在點選完 CONFIGURATION 後,我們在 Default storage class 裡面重新點選想要變更的等級,再按下藍色 Save 鍵,值區預設儲存等級修改就完成了!了解以上設定後,我們可以知道在不同的儲存條件下,可以透過更改 Storage Class 來降低物件儲存的費用,但如果都需要透過手動去進行變更,那恐怕有點麻煩,所以接下來,我們來看看 Lifecycle 可以幫我們做點什麼。

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

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

回應在前段提到的問題,當我希望 Cloud Storage 可以幫我自動管理我的物件級別,我就可以設定生命週期條件為:「在檔案新增三個月後,將值區內所有 Coldline 儲存級別的物件降級到Archive 級別。」不過,設定的方式當然不是透過輸入中文語句來完成,實際操作方式請看以下範例。

設定 Lifecycle

生命週期的設定可以分為兩個部分:A. 生命週期條件」及「B. 物件生命週期行為」。而我們只要滿足 A 條件就會觸發 B 行為,以下是此次的實作範例。首先我們開啟值區(Bucket)清單(圖1),然後在 Bucket Details 點選 LIFECYCLE 的按鈕後,再點 ADD A RULE(圖2)。

點開 ADD A RULE 後會看到下圖的設定選單,再透過 Select object conditions and Select action 來設定生命週期條件,以及物件生命週期行為。我在設定選單中的區塊1 Select an action 物件生命週期中選擇 Delete object(圖1)。接著,我再從區塊 2 Select object conditions 設定 Age 為 50 days 當作生命週期條件(圖2)。

完成這個設定後畫面會出現「當有物件被上傳到這個值區滿 50天,物件就會被自動刪除。」的訊息。另外貼心提醒大家,設定好生命週期,最晚要過 24 小時以後才會生效喔!那下面我們再繼續細看其他 Lifecycle 的設定。

生命週期條件

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

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

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

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

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

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

f. DaysSinceBecomingNoncurrent:如果啟用了物件版本功能,則從修改或刪除活動物件時開始計算。

g. DaysSinceNoncurrentTime:只有開啟物件版本功能,該條件才會觸發。 當物件變為非當前的指定天數後則滿足條件,因為當前版本 (Live version) 已被刪除或替換。

h. BecameNoncurrentBefore:如果啟用了物件版本功能,則基於修改或刪除活動對象的時間。

i. NoncurrentTimeBefore:只有開啟物件版本功能,該條件才會觸發。若在此條件中指定日期之前的日期變為非當前的對象,則該條件得到滿足。 使用日期格式 YYYY-MM-DD 設置條件。 此條件不允許 Live 物件。

j. DaysSinceCustomTime:對於具有此自定義元數據的物件,從物件的自定義時間開始計算。

k. CustomTimeBefore:基於物件的自定義時間,對於具有此自定義元數據的物件。

物件生命週期行為

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

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

以上就是物件生命週期的介紹,而上面提到的生命週期條件,我們下個段落會再為大家做詳細的介紹。

三、Cloud Storage 的物件版本管理(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 上面的服務。
截圖自:Google Cloud Platform Console 頁面
©2022 Google

3. 輸入下方的啟動版本控制指令。這邊提醒大家 BUCKET_NAME 的欄位中,請輸入您想要開啟功能的值區名稱。

gsutil versioning set on gs://[BUCKET_NAME]

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

截圖自:Google Cloud Platform Cloud Shell 頁面
©2022 Google

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

因為在設定好的值區圖形化介面裡,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 的功能跟妙招,我們有機會再繼續分享。

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

延伸閱讀:

【GCP教學】如何輕鬆備份 GCP 上 VM 的資料?快照 Snapshot 自動備份設定教學
GCP 如何計費?就像水電費一樣
聽說 GCP 費用最低?各種折扣方案完整說明
CDN 是什麼?Google Cloud CDN 用途、優勢完整介紹
什麼是負載平衡?原理、6大 GCP Load Balancer 完整介紹

Cloud Ace 研討會主頁

發佈留言