在介紹 S3 的隱藏服務之前,先來分一個單元來做服務說明。Amazon S3 是 Amazon Simple Storage Service 的簡稱,就是用來保存檔案的地方。
S3 = Simple Storage Service(簡單到讓人懷疑人生的儲存服務,權限設定也可以複雜到讓人懷疑人生)
首先來科普一下,S3 全名叫做 Simple Storage Service,翻成中文就是「簡單儲存服務」。雖然名字是說簡單,真的用起來的確也不難。但實際真要講究最小權限設定和一些進階用法時,就變成工程師們天天在研究各種 IAM 政策、生命週期管理、跨區域複製的複雜玩意兒,跟簡單一點也沾不上邊。但我們還是以初步應用為主,先把基本的東西說完。
物件儲存 vs. 區塊儲存 vs. 檔案儲存
在開始之前先來聊聊 Amazon S3 的核心概念。放心,我知道大家聽到「儲存」兩個字就快打瞌睡,但別急,這東西真的很重要。因為如果你搞不清楚物件儲存 vs. 區塊儲存 vs. 檔案儲存,你在使用 S3 的過程中,可能會遇到令人驚嚇的費用。
先講區塊儲存。這東西就像你家的硬碟一樣,系統就是直接對「區塊」下指令。你要讀第 27 區塊?沒問題。要寫進去?直接 overwrite。它快、它低階、它聽起來超硬派。
舉例來說,像 EBS (Elastic Block Store) 就是 AWS 的區塊儲存服務。你把它接在 EC2 上,就像在電腦上插了一顆 SSD。
缺點是什麼?資料跟那台機器綁死死。今天 EC2 被刪了,EBS很有可能也一起被刪了,你要救資料就會很麻煩。
簡單講,區塊儲存就是 「我要硬碟,現在馬上給我一顆。」
接著是檔案儲存。這個大家應該最熟,就是一般的 檔案系統,用路徑存取 /home/this_is_not_a_virus.exe
。
在 AWS 世界裡,這個東西的代表就是 EFS (Elastic File System)。它很像公司那種共用網路磁碟機,誰都可以連上去放檔案。
缺點?啊就是跟你同事共用資料夾一樣,總有人會在裡面放一堆垃圾檔案,還愛取名叫 final_v2_final_really_final.docx
。然後整個效能就慢下來。
檔案儲存的精神就是 「我有資料夾,大家一起來丟東西。」
重頭戲來了,就是 S3 用的 物件儲存。物件儲存的邏輯是:我不跟你裝熟,不搞什麼「檔案系統」、「區塊存取」。我就給你一個 bucket,你丟進來的每個東西都叫「物件」,然後我幫你用 key-value 管理。
簡單比喻就是:
cat.jpg
。聽起來很廢?但厲害的地方就是它的擴展性跟耐操度。S3 基本上是「你想放多少檔案就放多少」,要 TB 級、PB 級隨便你。當然,最後帳單來的時候,你會想哭,因為「這個月又爆預算了」。
而且物件儲存天生就適合做靜態網站、影像檔、備份資料這種東西,反正你就是丟進去,不用在意底層的細節。
S3 的精神就是 「給我一個 key,我幫你顧一輩子(錢夠的話)。」
S3 其實有個版本控管的功能,一旦開啟後就可以保存每次更改的檔案內容。即使是誤刪了了也不怕,還有機會可以還原回來。這個部份在後面實作時再來說明,但是在這裡務必要記得 S3 是物件型的檔案系統,如果概念不清楚的話,極有可能出現令人驚嚇的天價帳單。
為什麼我會說如果如果沒搞清楚的話,使用 S3 的過程可能會發生令人驚嚇的費用嗎?
先講重點:S3 這東西本來就有點「看似簡單卻能把你錢包炸光」的潛質。尤其當你不小心打開了那個神奇的開關——版本控管 (Versioning)。
一開始你會覺得這功能超佛,表面看起來很美好:
結果呢?你以為它會像 Git 一樣只存差異?大錯特錯。
S3 的邏輯是:
「你今天上傳一個物件?好,我幫你存一份。
你明天又傳同一個 key?好,我再幫你存一份完整的。」
簡單粗暴,沒有什麼 diff,不搞壓縮,就是直接多一份。
來,想像一個血淋淋的案例
假設你今天有個 100 GB 的圖檔(對,就那種設計部門傳來說「只是小檔案」的鬼東西)。
而且 AWS 的帳單寄來時不會提醒你:「恭喜,存了一堆版本」。
所以要啟用版本控管功能前一定要小心,越方便強大的功能,背後的代價也不小,這不就是等價交換嗎?