? AWS S3 靜態(tài)對象存儲

靜態(tài)對象存儲的意思就是,和FTP差不多,只能上傳、下載、刪除,不能修改、更新,更不能存動態(tài)數(shù)據(jù)庫一類的東西。
雖然還是有很多差別,但是S3和CDN差不多。

為什么不選擇可以當硬盤一樣隨便操作的EBS而是用靜態(tài)對象存儲的S3呢?

  • 便宜
  • 作為Archive存檔還是非常值的
  • 作為CDN也是很方便的

Cost 花銷計算

S3一樣傳承了AWS復雜的Cost Calculation。

每月需要上繳的費用主要是這3部分的總和:

  • ? 數(shù)據(jù)所占的容量:
    • Standard標準版是 $2.5/100GB/mo
    • 低頻率IA Standard是$2.4/100GB/mo
    • 最便宜的Glacier是$2.3/100GB/mo
  • ? API請求數(shù)量:
    • Write寫請求(PUT, COPY, POST, or LIST):Standard標準 0.05/萬次,IA低頻率和Glacier0.1/萬次
    • Read讀請求(Get and all other requests):Standard標準 0.004/萬次,IA低頻率和Glacier0.1/萬次
    • Delete刪除請求:$0 免費
  • ? 數(shù)據(jù)傳輸費用:
    • 傳輸?shù)紸WS的不相同Region:2 USD/100GB,
    • 傳輸?shù)紸WS之外的Internet:月內(nèi)首次1GB 0免費,之后9/100GB
    • 傳輸?shù)紸WS相同的Region:$0 免費
    • 外界上傳到AWS:$0 免費

幾種個人常見案例(月):

  • 標準配置:100GB標準存儲 + 1萬次讀 + 1萬次寫 + 20G的Internet傳輸 = $3/mo
  • 最低配置:20GB的Glacier存儲 + 1萬次讀 + 1萬次寫 + 5GB的Internet傳輸 = $2.5/mo

也就是說,API請求非常便宜,數(shù)據(jù)傳輸可以通過EC2內(nèi)部傳輸?shù)拿赓M額度來省錢,最貴的是數(shù)據(jù)存儲費用。這樣來算,個人直接用Glacier最劃算。

其中比較亂的是傳輸費用。

  • 與AWS的EC2等云服務器的傳輸:
  • 與其它云產(chǎn)品(相當于“與Internet互聯(lián)網(wǎng)”)傳輸?shù)馁M用:
  • 與AWS的子產(chǎn)品(不包括在AWS中)Lightsail傳輸?shù)馁M用:

Cost優(yōu)化

參考:Optimizing Costs for S3
參考:10 Things You Might Not Know About Using S3

創(chuàng)建Bucket

登錄AWS進入S3 -> create bucket -> 創(chuàng)建S3全網(wǎng)唯一名稱 -> 默認選項 -> 選擇公開數(shù)據(jù)的瀏覽權(quán)限 -> 完成創(chuàng)建Bucket。

過程十分簡單,就不截圖占地方了。之后都可以修改,填錯了也沒問題。

下一步:獲取secret_key,用于之后各種訪問。

進入官網(wǎng): Security Credential創(chuàng)建key:
選擇左側(cè)User -> 為s3創(chuàng)建專門的用戶(IAM) -> 輸入名稱、密碼 -> 成功后,獲取這個用戶獨有的key pair -> 記住key pair。

用s3fs將S3掛載為本地文件夾 Map S3 as local drive

注意:Public access權(quán)限必須設置成Everyone,要不然無法從各種程序訪問。
進入bucket的管理后臺,選擇Permissions,然后設置Public access.
具體步驟參考:

# https://cloud.netapp.com/blog/amazon-s3-as-a-file-system
sudo apt-get install -y s3fs

# Change key pairs to yours
echo ACCESS_KEY:SECRET_KEY > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs

mkdir ~/s3-drive

# Mount the aws S3 bucket (replace your uid and gid)
/usr/bin/s3fs Your-Bucket-Name ~/s3-drive -o umask=0007,uid=1000,gid=1000

# Show all the mounted devices
mount

# Show what's in the bucket
ls ~/s3-drive

s3fs的文件讀取權(quán)限問題

注意,S3的權(quán)限問題十分嚴格。而且每個文件的權(quán)限都有可能不一樣。
如果是網(wǎng)頁上傳的,有可能和本地s3fs上傳的權(quán)限不同,這樣就不能互通操作。但是一旦用s3fs上傳全部的文件,那么權(quán)限就都是統(tǒng)一的。
一旦文件權(quán)限沒有統(tǒng)一,那么就會在訪問時出現(xiàn)No such filePermission denied問題。

目前解決方案有兩種:

  1. 為文件設置Headers,格式是x-amz-meta-(mode,mtime,uid,gid)
  2. (推薦) 在啟動s3fs掛載時,明確指定umask, uid, gid。如-o umask=0007,uid=1000,gid=1000

有幾點需要注意:

  • 因為固定權(quán)限問題,所以不要在多臺設備同時掛載(因為每個用戶權(quán)限可能不同)。如果要多臺使用,建議統(tǒng)一在一臺服務器上掛載,然后在服務器上把文件夾分享為Webdav,其它設備再來訪問webdav。

如何修改header: x-amz-meta-?
在后臺文件管理界面,批量選擇文件,然后點Actions,點change metadata,選擇x-ama-meta-,輸入對應value。

將S3作為Webdav服務器

搜遍了全網(wǎng),都沒找到靠譜的S3轉(zhuǎn)Webdav服務器方案,差點就自己寫Webdav的protocol實現(xiàn)了。還好,經(jīng)過各種換詞搜索,靈機一動,換了種思路:可不可以先把S3映射為本地drive,然后再正常把本地drive共享為webdav?
答案是:可以的。

具體做法就是:用s3fs映射到本地文件夾,再用wsgidav或apache或nginx將文件夾共享為webdav服務器。
親測可用,而且十分好用。因為同屬AWS資源,同屬一個Region區(qū),所以訪問速度和訪問EBS硬盤感受不到什么區(qū)別。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容