看S3的全名就可以大概猜出S3的功能,是的,它是一種儲存資料用的服務,說得直白點,就是雲端空間。這個服務在我們的大架構網站中是很重要的,舉個例子來說,我們有二台EC2-A與B在提供服務,如果使用者上傳照片檔案到A機器上時,我們必須確保其他的使用者到B機器上時,也能看到這個檔案,在這種情況下,我們會把A機器上的檔案,儲存到S3中,而所有想看到這個檔案的人,都導到S3去,這樣就能確保我們不管有幾台EC2,都不會有問題。
S3的收費與免費額度
S3當然不是免費的,但是S3在整個網站服務架構中,可以算是成本最便宜的,不過即使如此,我們還是得釐清一下S3的收費;S3的收費有幾個部份:
-
儲存空間
-
流量
-
Request數量
當然,別忘了,這個收費會跟AWS的區域有關,S3的收費可以參考AWS網站,下面幾張圖是一個參考:
下圖的「請求」,是Request的意思:
而S3的免費額度是:
5 GB 儲存空間、20,000 個 Get 請求和 2,000 個 Put 請求。
流量並不在一年免費的額度的原因是,流量本來就有一個免費的空間,只要不超過1GB/月的話,AWS並不會跟你收費。
S3的使用與設定
S3本身並不能選擇區域,所以我們直接進到AWS的主控台進入S3。或許有人會覺得很奇怪,S3不能選擇區域,那麼收費時怎麼會區分區域呢?這個問題我們可以在接下來的章節看到解答。
進入S3後,我們可以看到類似下方的操作圖:
S3並不能切換區域:
S3的Buckets
一進來我們就會看到一個陌生的單詞「Buckets」,它的中文意思是「桶子」的意思;換句話說,我們的資料要裝進一個桶子中,所以我們必須先建立一個我們的Bucket,不過建立前,有一些注意事項:
-
S3並未區分區域,所以Bucket也是全球共用的,因此Bucket的名稱必須為全球唯一。
-
這個Bucket建立後,會影響到資料下載的網址。
-
Bucket的角色比較像Windows中的C槽,所以Bucket底下可以有資料夾,而資料夾底下可以放資料或是資料夾。
-
Bucket與AWS的費用並無關係,所以不管建立幾個Bucket,都不會有費用發生。
瞭解這些事項後,你就已經瞭解Bucket的作用了。所以我們來建立一個Bucket吧:
透過上方的功能列表,我們可以看到Bucket的建立會有區域的問題,這邊提醒一下讀者,AWS的跨區域傳輸是要收費的,所以你的資料如果會從EC2過來的話,要選擇與EC2相同的區域,這樣才不會有費用產生。
建立好Bucket後,我們可以進入到Bucket裡,進行進階的操作:
之前說過了,Bucket跟C槽的意思是一樣的,所以我們可以在這邊建立資料或資料夾,當我們建立好一個資料後,可以透過視窗右邊的Properties中看到下載路徑:
可是當我們開一個無痕視窗去連線時,得到的回應卻是:
S3與權限
我們會取不到我們剛剛上傳的檔案的原因,其實是因為S3預設是封閉權限,所以我們必須手動一個一個打開它才行,但是要打開S3的權限,並不是我們想像中的,可以透過滑鼠點選我們需要的權限,按個確認後就完成;要設定S3的權限,必須要寫一個JSON格式的一長串文字才行,下圖是官網中的一個範例:
我們下面慢慢來研究吧。
S3權限種類
在這篇裡,我們先來瞭解S3有什麼樣的權限可以設定吧,下圖是AWS官網上的權限列表:
這是S3權限表中的一部份,可以看到有很多的權限可以設定,這表格的主要重點有三個:
-
s3:GetObject-取得物件(剛剛我們就是被擋在這裡)。
-
s3:PutObject-上傳檔案。
-
s3:DeleteObject-刪除檔案。
JSON的意義
瞭解那些權限可以設定之後,我們就來瞭解JSON的各個意義了,以官網上的JSON為例:
Version:版本號,自訂義。
Statement:這部份就是我們重點,設定權限;要注意這裡的格式是JSONArray。
Statement中的每一個再以JSON Object的格式包起來,其中:
Sid:自訂義。
Effect:可以設定Allow或Deny,即是白名單或黑名單的設計。
Principal:請注意這邊的格式是JSON Object,這裡是指定使用者;而使用者指的是IAM的使用者,IAM會在後方章節再詳談,或是可以用萬用字元(*)代表所有使用者。
Action:這邊放的是JSON Array格式,而每一筆資料都是String型別;內容主要是指定權限。
Resource:這邊與Action相同,JSON Array格式,內容為字串;指定特定AWS資源。
所以,假設我們自訂了一個Bucket「ABC」與資料夾「DEF」,並且要求任何人可讀取,所以我們的JSON會變成:
{
"Version": "2017-01-23",
"Statement": [
{
"Sid": "TEST",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::ABC/DEF/*"
}
]
}
設定S3權限
當我們訂義好我們的JSON權限後,就要套用到S3了,套用的位置如下圖:
請按照上圖1~4的操作,叫出下圖視窗:
這邊就是貼上我們剛剛寫好的JSON的地方,最後按「Save」,S3的權限會即時生效;生效後可以再去一開始Access Deny的URL重新看看,理論上就可以看到或下載我們相關的檔案了。
S3與Glacier
AWS除了提供S3當一個儲存服務外,另外也提供了一個Glacier的服務,這個服務基本上與S3的服務內容差不多,筆者將差別條例如下:
S3 |
Glacier |
|
費用 |
較高 |
較低 |
資料保証 |
11個9 (99.999999999%) |
9個9 (99.9999999%) |
讀取速度 |
即時 |
較慢 |
提供一年免費額度 |
有 |
無 |
這邊要特別注意的是,因為Glacier並未提供一年免費的額度,所以只要一經使用,AWS即會收取費用。
S3提供了簡單的方式,讓我們將不常用的資料轉移至Glacier,設定如下,參考上方設定S3權限的方式,找到Liftcycle:
進入後,一開始先設定要套用的範圍:
再來決定資料存放過多久時,都沒有被讀取的話,可以丟到Glacier去,或是過多久都沒有人存取這筆資料的話,可以刪除該資料。
不過,這邊要再次強調,只要資料丟到Galacier去的話,因為Galacier不提供一年免費的額度,所以使用就會有費用發生,請注意。
留言列表