Amazon EC2 提供的 Storage 種類
Amazon EC2 提供三種Storage種類給 VPC 使用,它們分別是
- Amazon Elastic Block Store ( 簡稱 EBS )
- Amazon EC2 Instance Store
- Amazon Simple Storage Service ( 簡稱 S3 )
除了蚊型 instance t1.micro 沒有 Instance Store ,其餘的 Amazon EC2 instance type 都可以使用這三種不同 Storage。
( 上圖乃取自http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Storage.html )
以我的理解,EBS 及 Instance Store 可以作為 VPC 的 primary storage,意即可以直接掛載 (mount) 於主機上,格式化(format) 並設置檔案系統 (filesystem),主機程序可以直接利用 File I/O 來存取 EBS 及 Instance Store 上的資料。
EBS 和 Instance Store 的主要分別如下:
- 如果當VPC Instance Stop (停止) 或 Terminate (終止),儲存於EBS的資料是可以保存下來 (persist),而儲存於Instance Store 的資料將會遺失 (non-persist)。
- EBS Volume 可以掛載上不同的 instance,而 Instance Store 就一定要跟隨同一個 instance。
- (這個分別是很重要的) EBS 是按容量及 I/O 收費,而 Instance Store 是跟隨您所選用的 instance ( t1.micro 除外)而不用額外收費。
所以,Instance Store 只適宜存放一些 temporary data、cache data、staging data,一些 transient 或失去了也無關痛癢的資料。至於,重要以及需要保存的資料,就建議存放於 EBS Volume 上。EBS Volume 另外的一大好處是,它跟 SAN Disk 十分類似,可以隨時 attach 及 detach 到同一個availability zone 上不同的主機上,可以作為主機 failover 時的 high-availability storage。
至於 S3 Storage,是一個 online 的 secondary storage,有點類似 dropbox,存取是需要使用 API 或 webservices。收費是根據容量、數據傳送量(同一個 EC2 Region 間傳送量則全免)、及運行了多少個 GET、PUT 等指令。Amazon EC2 亦有提供把 EBS Snapshot 到 S3 的服務,所以作為資料備份或與對外的資料傳送,S3 是一個不錯的選擇。
t1.micro Instance 的 Storage 策略
1. 添加虛擬記憶體 ( Swap space )
Amazon EC2 免費的 t1.micro instance 只有 613 MB 的內存,但原生並沒有提供 swap space 的虛擬記憶體,運行中程序如果需要更多的記憶體而主機未能滿足時,程序有可能會因此而掛掉。而虛擬記憶體可以暫時彌補記憶體不足的問題,用儲存空間讓記憶體騰空 ( page-in) 一些記憶體出來讓當前運行中的程序使用,但由於 page-in 、page-out 涉及 Disk I/O ,所以效能會比較慢,但可避免程序因記憶體不足而掛掉。
為了提昇博客網站的 Availability,添加 swap space 是必需的。
正路來說,由於 swap space 是暫存的記憶體,用 Instance Store 來實作 swap space 本是最合適的選擇,兼可以免費無限 page-in 、page-out。可是 t1.micro instance 並不提供 Instance Store,所以我們只好用 EBS 來作為 instance 的 swap space。

如上圖,首先於 Amazon EC2 Management Console 建立一個 1GB 的 ESB Volume。
然後選擇新建立的 EBS Volume 並把它 attach 到正在運行中的 Instance 。 (無錯,是 hot attach 的,不用把主機停止)

Management Console 會找出合適的 Instance 並提供一個 device 路徑 (e.g. /dev/sdh )。您可能會得到一個不同的 device 路徑,但這個並不重要。現在把 device 路徑記下來,如果現在見到的是 /dev/sdh ,在 Instance 上,它的實際路徑將會是 /dev/xvdh 。 ( 把 “s” 換掉成 “xv” 便是了)
然後 SSH 登入 Instance ,修改 /etc/fstab ( 用 root 權限 ) 並加入
/dev/xvdh swap swap defaults 0 0
執行以下的命令:
sudo mkswap -f /dev/xvdh sudo swapon /dev/xvdh
( 當然要把上面的 /dev/xvdh 路徑修正為閣下 Instance 的路徑 )
完成後,恭喜您!您已經成功建立了一個 1GB 的虛擬記憶體給這個蚊型 t1.micro Instance 。您大可以利用以下的命令來証實它的存在。
free -m total used free shared buffers cached Mem: 598 486 112 0 86 266 -/+ buffers/cache: 133 465 Swap: 1023 0 1003
2. 添加掛載點 ( Mount Point )
我用的 Amazon Machine Image ( AMI ) 是 32bits 的 Amazon Linux。創建的時候,Amazon EC2 用了一個 8GB 的 EBS Storage 來安放整個 OS Image 。除了 root “/” 掛載點外,原生並沒有提供其他掛載點。
實際上,整個 Amazon Linux OS 大概只佔用 1GB 的 EBS 容量,如果網站的容量需求不大,相信剩餘的空間應該足夠應付一段時間。
但我就建議大家多建立一個 EBS Mount Point 來存放網站的資料 (Data),可以享受以下的好處。
- 便於管理和備份 (尤其當你選擇利用 Amazon S3 Snapshot 作為備份的時候)
- 可以讓資料獨立地 attach 到其他座落於同一個 Availability Zone 的 Instance 上,而無須連帶 OS 和 executables 同時掛上
Amazon Linux OS 的設計是把資料 (Data) 存放於 /var 掛載點內,這裡的資料包括 MySQL 數據庫中的 Data、系統日誌 (system logs)、Mail、WWW 文檔 (e.g. WordPress HTML / PHP / Image Media 等等。
如果想把 /var 的內容搬移到其他掛載點,可以參考以下的步驟,
- 首先依照上文的方法於 AWS Management Console 建立並 Attach 合適容量的 EBS Volume 到 EC2 Instance 上並記下 Device 路徑。Amazon EC2 free tier 提供1年免費 30GB 的 EBS 容量,扣除本身所用到的 8GB OS 和 1GB Swap Space,大家應該還有 21GB 可供應用。
- 然後 SSH 登入 Instance,執行以下的命令來格式化新加入的 EBS Volume (假設新建的 device 是 /dev/xvdg )
sudo mkfs -t ext4 /dev/xvdg
- 完成後,把新的 device 暫時掛載到 /mnt 之下
sudo mount /dev/xvdg /mnt
- 然後把 /var 的內容 copy 到新的 EBS Volume 上
sudo cp -rp /var/* /mnt
- 完成後,修改 /etc/fstab ( 用 root 權限 ) 並加入以下
/dev/xvdg /data ext4 defaults 0 0
- 最後,重啟 (Reboot) Instance。您新建立的 EBS Volume 應該就掛載到 /var 之上,您可以利用 df 命令來檢查
df Filesystem 1K-blocks Used Available Use% Mounted on /dev/xvda1 8125880 1367424 6658188 18% / devtmpfs 294748 20 294728 1% /dev tmpfs 306660 0 306660 0% /dev/shm /dev/xvdg 1998672 41320 1836112 3% /var