close

  看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不提供一年免費的額度,所以使用就會有費用發生,請注意。

arrow
arrow
    創作者介紹
    創作者 JAVA Programmer 的頭像
    JAVA Programmer

    台灣的Web工程師

    JAVA Programmer 發表在 痞客邦 留言(0) 人氣()