AWS S3 靜態對象存儲

靜態對象存儲的意思就是,和FTP差很少,只能上傳、下載、刪除,不能修改、更新,更不能存動態數據庫一類的東西。
雖然仍是有不少差異,可是S3和CDN差很少。nginx

爲何不選擇能夠當硬盤同樣隨便操做的EBS而是用靜態對象存儲的S3呢?web

  • 便宜
  • 做爲Archive存檔仍是很是值的
  • 做爲CDN也是很方便的

Cost 花銷計算

S3同樣傳承了AWS複雜的Cost Calculation。數據庫

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

  • ⓵ 數據所佔的容量:服務器

    • Standard標準版是 $2.5/100GB/mo
    • 低頻率IA Standard是$2.4/100GB/mo
    • 最便宜的Glacier是$2.3/100GB/mo
  • ⓶ API請求數量:app

    • Write寫請求(PUT, COPY, POST, or LIST):Standard標準 $0.05/萬次,IA低頻率和Glacier $0.1/萬次
    • Read讀請求(Get and all other requests):Standard標準 $0.004/萬次,IA低頻率和Glacier $0.1/萬次
    • Delete刪除請求:$0 免費
  • ⓷ 數據傳輸費用:優化

    • 傳輸到AWS的不相同Region:2 USD/100GB,
    • 傳輸到AWS以外的Internet:月內首次1GB $0免費,以後 $9/100GB
    • 傳輸到AWS相同的Region:$0 免費
    • 外界上傳到AWS:$0 免費

幾種我的常見案例(月):ui

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

也就是說,API請求很是便宜,數據傳輸能夠經過EC2內部傳輸的免費額度來省錢,最貴的是數據存儲費用。這樣來算,我的直接用Glacier最划算。.net

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

  • 與AWS的EC2等雲服務器的傳輸:
  • 與其它雲產品(至關於「與Internet互聯網」)傳輸的費用:
  • 與AWS的子產品(不包括在AWS中)Lightsail傳輸的費用:

Cost優化

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

建立Bucket

登陸AWS進入S3 -> create bucket -> 建立S3全網惟一名稱 -> 默認選項 -> 選擇公開數據的瀏覽權限 -> 完成建立Bucket。

過程十分簡單,就不截圖佔地方了。以後均可以修改,填錯了也沒問題。

下一步:獲取secret_key,用於以後各類訪問。

進入官網: Security Credential 建立key:
選擇左側User -> 爲s3建立專門的用戶(IAM) -> 輸入名稱、密碼 -> 成功後,獲取這個用戶獨有的key pair -> 記住key pair。

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

注意:Public access權限必須設置成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的文件讀取權限問題

注意,S3的權限問題十分嚴格。並且每一個文件的權限都有可能不同。
若是是網頁上傳的,有可能和本地s3fs上傳的權限不一樣,這樣就不能互通操做。可是一旦用s3fs上傳所有的文件,那麼權限就都是統一的。
一旦文件權限沒有統一,那麼就會在訪問時出現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

有幾點須要注意:

  • 由於固定權限問題,因此不要在多臺設備同時掛載(由於每一個用戶權限可能不一樣)。若是要多臺使用,建議統一在一臺服務器上掛載,而後在服務器上把文件夾分享爲Webdav,其它設備再來訪問webdav。

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

將S3做爲Webdav服務器

搜遍了全網,都沒找到靠譜的S3轉Webdav服務器方案,差點就本身寫Webdav的protocol實現了。還好,通過各類換詞搜索,靈機一動,換了種思路:可不能夠先把S3映射爲本地drive,而後再正常把本地drive共享爲webdav?
答案是:能夠的。

具體作法就是:用s3fs映射到本地文件夾,再用wsgidav或apache或nginx將文件夾共享爲webdav服務器。親測可用,並且十分好用。由於同屬AWS資源,同屬一個Region區,因此訪問速度和訪問EBS硬盤感覺不到什麼區別。

相關文章
相關標籤/搜索