理解 Google Cloud Storage (GCS)
Google Cloud Storage (GCS) 是 Google Cloud 提供的統一物件儲存服務 (Object Storage)。與 Compute Engine 的持久性磁碟 (Persistent Disk,塊儲存) 不同,GCS 專為儲存非結構化資料而設計,例如圖片、影片、備份檔案、日誌和靜態網站資源。對於 Associate Cloud Engineer (ACE) 來說,GCS 是最常考的儲存服務,重點在於選擇正確的儲存類別 (Storage Classes) 以及管理資料生命週期 (Lifecycle Management)。
GCS 的效能極高,且具有無限的擴展性,你不需要預先分配空間,只需按實際使用量付費。
白話文解釋
1. 無限大的雲端硬碟 (快遞類比)
- 儲存桶 (Bucket):就像一個巨大的包裹箱。
- 物件 (Object):包裹箱裡的內容物。每個物件都有一個唯一的網址。
- 全域命名空間 (Global Namespace):因為每個儲存桶的名稱在整個 Google Cloud 中必須是唯一的,這就像是全球唯一的快遞編號。
2. 不同溫度的冰箱 (廚房類比)
- 標準 (Standard): 放在廚房檯面上的食物,隨時要吃(頻繁存取)。
- 近線 (Nearline): 放在冰箱冷藏室,預計這週會用到(每月存取一次)。
- 冷線 (Coldline): 放在冷凍櫃深處,預計過年才會拿出來(每季存取一次)。
- 封存 (Archive): 放在地窖的罐頭,除非緊急情況否則不動(每年存取一次)。
溫度越低,儲存費用越便宜,但存取時的手續費(檢索費)越貴。
3. 公共圖書館的檔案室 (圖書館類比)
- 物件 (Object): 檔案。
- 中繼資料 (Metadata): 檔案上的標籤(建立日期、檔案類型)。
- 版本控制 (Versioning): 檔案的修訂紀錄。如果你不小心塗改了檔案,你可以翻出之前的版本。
建立與管理儲存桶與物件
儲存桶命名規則
儲存桶名稱必須全球唯一。這意味著如果有人用了 'my-bucket',你就不能再用了。此外,名稱不能包含敏感資訊,因為它是公開可見的。 Source ↗
關鍵屬性
- 位置類型 (Location Type):
- 區域 (Region): 資料存在單一區域,成本最低,適合低延遲。
- 雙區域 (Dual-region): 存在兩個區域,提供更高的可用性。
- 多區域 (Multi-region): 存在一個大地理區域(如美國或歐洲),適合全球分發。
儲存類別:Standard, Nearline, Coldline, Archive
選擇儲存類別是成本優化的核心。
| 類別 | 建議存取頻率 | 最短儲存時間 | 適用場景 |
|---|---|---|---|
| Standard | 頻繁(每天多次) | 無 | 網站內容、串流影片、常用資料。 |
| Nearline | 低(每月一次) | 30 天 | 備份、資料分析的原始資料。 |
| Coldline | 極低(每季一次) | 90 天 | 災難恢復 (DR)、不常用日誌。 |
| Archive | 幾乎不(每年一次) | 365 天 | 法律合規要求存檔。 |
Storage Classes 用於在資料儲存成本與存取成本之間取得平衡。Standard 適合每日使用;Archive 適合一年一次的存取。 Source ↗
Nearline、Coldline、Archive 三種類別分別強制最短儲存時間 30 天、90 天、365 天。若在最短儲存時間之前刪除或搬移物件,Cloud Storage 仍會按完整最短週期收費,因此 Lifecycle Management 規則在降級資料時必須將這點納入考量,以免產生意料之外的費用。 Source ↗
物件生命週期管理規則
手動更改數百萬個物件的類別是不現實的,這時你需要 生命週期政策 (Lifecycle Policies)。
常見條件 (Conditions)
- 年齡 (Age): 物件建立後經過的天數。
- 在特定日期前建立 (CreatedBefore): 在特定日期之前建立。
- 符合儲存類別 (MatchesStorageClass): 目前的類別。
動作 (Actions)
- 設定儲存類別 (SetStorageClass): 將物件從 Standard 降級到 Coldline 以節省成本。
- 刪除 (Delete): 刪除過期的日誌。
一個常見的原則是:資料建立後 30 天轉 Nearline,90 天轉 Coldline,365 天刪除。這能顯著降低雲端支出。 Source ↗
資料加密與存取控制
存取控制:IAM vs ACLs
- IAM (推薦): 在儲存桶層級管理權限,與 Google Cloud 身分系統深度整合。
- ACLs (傳統): 在個別物件層級管理權限。
- 統一儲存桶層級存取 (Uniform Bucket-level Access): ::important 啟用此功能後,將禁用 ACLs,強制所有存取都必須透過 IAM。這能防止權限管理的碎片化,是安全性最佳實踐。 Source ↗ ::
加密
- 伺服器端加密 (預設): Google 使用自己的金鑰加密。
- 客戶端管理的加密金鑰 (CMEK): 使用 Google Cloud KMS 管理你自己的金鑰。
- 客戶端提供的加密金鑰 (CSEK): 你在本地端加密後再上傳。
若使用客戶端提供的加密金鑰 (CSEK) 並遺失金鑰,Google 無法為你還原資料。Cloud Storage Buckets 中對應的物件將永久遺失。 Source ↗
進階 GCS 功能
物件版本控制 (Object Versioning)
防止意外刪除。啟用後,刪除物件會產生一個「非目前版本」(Noncurrent version),你可以隨時恢復。
保留政策與儲存桶鎖定 (Retention Policies & Bucket Lock)
確保資料在一段時間內絕對不能被刪除(甚至是擁有者也不行),用於滿足嚴格的合規需求。
靜態網站代管 (Static Website Hosting)
你可以將儲存桶設定為網頁伺服器。只需上傳 index.html 並將權限設為 allUsers:Storage Object Viewer。
透過 gsutil CLI 管理 GCS
# 建立儲存桶
gsutil mb -c nearline -l us-central1 gs://my-ace-bucket-123
# 上傳檔案
gsutil cp local-file.txt gs://my-ace-bucket-123/
# 設定生命週期
gsutil lifecycle set config.json gs://my-ace-bucket-123
# 更改物件權限(公開)
gsutil iam ch allUsers:objectViewer gs://my-ace-bucket-123
GCS 最佳實踐
- 命名一致性:使用有意義的前綴。
- 啟用統一儲存桶層級存取:簡化權限管理。
- 利用生命週期政策:自動化成本優化。
- 選擇正確的位置:根據用戶分佈選擇區域 (Region) 或多區域 (Multi-region)。
ACE 考試的常見場景
- 情境:你需要儲存 7 年的法律合規資料,且幾乎不會讀取。
- 解決方案:使用 Archive Storage 並設定 儲存桶鎖定 (Bucket Lock) 以防止資料被篡改。
- 情境:你上傳了一個檔案到 GCS,但發現網址打不開。
- 解決方案:檢查是否賦予了
allUsers的Storage Object Viewer權限,或者檢查是否啟用了 VPC Service Controls。
- 解決方案:檢查是否賦予了
常見問題 (FAQ)
Q1: GCS 儲存量有上限嗎? 答:理論上沒有,它可以儲存無限量的資料。
Q2: 我可以更改現有儲存桶的名稱嗎? 答:不行。你必須建立一個新儲存桶,將資料遷移過去,然後刪除舊的。
Q3: 什麼是簽署網址 (Signed URLs)? 答:這讓你產生一個臨時連結(例如有效期 10 分鐘),讓沒有 Google 帳號的人也可以安全地存取特定私有檔案。
Q4: Standard 降級到 Nearline 後,讀取速度會變慢嗎? 答:不會。GCS 的所有類別(甚至是 Archive)都提供相同的低延遲存取(毫秒級)。這是它與 AWS S3 Glacier 的主要區別。
Q5: 什麼是 gsutil rsync?
答:這是一個非常強大的指令,用於將本地目錄與 GCS 儲存桶進行單向或雙向同步。
在 Cloud Storage Buckets 處理大量上傳或批次傳輸時,建議優先使用 gcloud storage cp 而非舊版的 gsutil cp。新指令採用平行複合上傳 (parallel composite uploads) 與更高效的執行緒模型,不需額外參數即可獲得最高約 94% 的吞吐量提升。
Source ↗
ACE 總結清單
- 掌握 4 種儲存類別及其成本權衡。
- 理解生命週期規則的「條件」與「動作」。
- 區分 IAM 與 ACLs 的使用場景。
- 記住
gsutil的基本操作。 - 了解儲存桶名稱的唯一性要求。