靜態對象存儲的意思就是,和FTP差很少,只能上傳、下載、刪除,不能修改、更新,更不能存動態數據庫一類的東西。
雖然仍是有不少差異,可是S3和CDN差很少。nginx
爲何不選擇能夠當硬盤同樣隨便操做的EBS而是用靜態對象存儲的S3呢?web
Cost 花銷計算
S3同樣傳承了AWS複雜的Cost Calculation。數據庫
每個月須要上繳的費用主要是這3部分的總和:apache
⓵ 數據所佔的容量:服務器
⓶ API請求數量:app
⓷ 數據傳輸費用:優化
幾種我的常見案例(月):ui
也就是說,API請求很是便宜,數據傳輸能夠經過EC2內部傳輸的免費額度來省錢,最貴的是數據存儲費用。這樣來算,我的直接用Glacier最划算。.net
其中比較亂的是傳輸費用。code
Cost優化
參考:Optimizing Costs for S3
參考:10 Things You Might Not Know About Using S3
登陸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 file
或Permission denied
問題。
目前解決方案有兩種:
x-amz-meta-(mode,mtime,uid,gid)
umask
, uid
, gid
。如-o umask=0007,uid=1000,gid=1000
有幾點須要注意:
如何修改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硬盤感覺不到什麼區別。