預先準備

  • 申請 AWS 帳號

S3 bucket 建立

什麼是 s3 bucket?

S3 bucket 簡介

S3 Bucket 可以想像成網路上的一個超大的存儲箱。這個存儲箱是由 AWS 的一項服務,叫做 Amazon Simple Storage Service,(簡稱 Amazon S3) 提供的。

想象一下你的房間裡有一個大箱子,你可以把玩具、書籍或者衣服放進去。在網路的世界裡,S3 Bucket 就像是這樣的一個箱子,但它可以存放數位的東西,比如照片、影片、網站文件或者任何其他的數位資料。

就像你可以為你的箱子取一個名字,方便知道里面有什麼一樣,每個 S3 Bucket 也都有一個獨一無二的名字。這樣當你想找到存儲在其中的某個文件時,就可以通過這個名字快速找到。

最重要的是,這個網路存儲箱非常安全和可靠。它可以保護你的資料不被意外刪除或丟失,而且你可以從世界上任何有網路的地方訪問這個箱子。

所以,總的來說,S3 Bucket 就是一個你可以在網路上存放和管理文件的安全、可靠的虛擬存儲箱。

而最重要的事,用 S3 來存放 blog,是真的很經濟實惠

  1. 按需付費: AWS S3 的定價模式是基於你實際使用的存儲量來計費的。這意味著,如果你的 blog 不是非常大,你只需要為你實際使用的空間支付費用。這種靈活的付費方式對於剛開始經營 blog 的人來說尤其有利,因為它可以幫助他們節省開銷。

  2. 可擴展性:隨著你的 blog 內容和訪問量的增加,你可能需要更多的存儲空間。S3 提供了出色的可擴展性,這意味著你可以根據需求增加存儲空間,而不需要擔心存儲容量的限制。

  3. 高可靠性和可用性: AWS S3 提供了高水平的數據持久性和可用性。這意味著你的 blog 數據在 S3 上是非常安全的,並且幾乎可以保證隨時可用。對於希望他們的 blog 總是可以訪問的 blog 主來說,這是一個重要的考慮因素。

  4. 全球訪問:由於 AWS S3 在全球範圍內有多個數據中心,你的 blog 可以從世界各地快速訪問,這對於提升用戶體驗和擴大讀者群體非常有幫助。

  5. 維護成本低:由於 S3 是由 AWS 管理和維護的,所以你不需要擔心硬件的維護和升級。這減輕了對於技術支持和維護方面的擔憂,讓你可以專注於創建和更新 blog 內容。

綜合來看,使用 AWS S3 來存放 blog 是一個成本效益高、靈活且可靠的解決方案,特別適合那些尋求低成本和高效能的 blog 主。

建立 bucket

建立 bucket 步驟

建立一個 Amazon S3 Bucket 的基本步驟相對簡單。下面是一個簡單的指南,適用於初學者:

  1. 進入到 s3 主控台

    • 登錄後,在 AWS 管理控制台中找到「Services」菜單,然後選擇「S3」。
    • 1
  2. 創建一個新的 Bucket

    • 在 S3 控制台中,點擊「Create bucket」按鈕開始創建新的 Bucket
      • 1
    • 輸入你的 Bucket 名稱。這個名稱需要在全球範圍內是唯一的,並且符合命名規則,創一個好記的名字就可以
    • 選擇 region
      • 我這邊選 Virgina,因為存放蠻便宜的,而且其實 blog 大小不大所以傳輸不會慢到哪
  3. 配置選項

    • 因為我們要創建的是大家都能瀏覽的網站,所以要開啟 public access
    • 1
  4. 審核並創建 Bucket

完成後 Bucket 被會被創建,你就可以開始上傳 hugo 的網站、並設置更進一步的安全性和存取管理規則了。

開啟網頁服務

  1. 進到 Properties
  2. 1
  3. 拉到最下面 static website hosting 把他 enable 起來
    1. Hosting type 選 static website
    2. index document 填入 index.html
  4. 1

上傳 hugo 網站

首先,我們的 blog 要先 build 出一個靜態網頁的版本,回到 terminal

hugo --cleanDestinationDir

這個指令下完後可以看到多了一個 public 資料夾,我們的靜態網站就是放在這個資料夾中,將他整包上傳到 S3

上傳方式 1 ( AWS console 介面 )

進到 S3 畫面進入到你剛剛創建的 bucket 選擇 upload,並照著 UI 上的指示將整個 public 的 folder 上傳

上傳方式 2 ( AWS cli )

較快速做法,但要對 iam service 熟悉,並電腦有安裝 aws cli

  1. 創建 iam user 並且授予該 user s3 admin 的 policy
  2. 針對 iam 創建 accesskey & secretkey
aws configure # 設定 aws credential

設定完成後就可以上傳網頁

cd ./public
aws s3 cp ./ s3://YOUR_BUCKET --recursive # 上傳 hugo site 到 s3 bucket

設置 S3 bucket policy

為什麼要設置這個?
由於 s3 可以用作很多用途,但用在 host website 的同時,就是需要開放這世界上的所有人可以存取這個 bucket 中的任何內容,而控制誰能看誰不能看可以透過設置 s3 bucket policy 來控制

  1. 進到 permission 頁面
  2. 下拉到 bucket policy
  3. 設置 bucket policy 讓所有人(*)可以 GetObject
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::YOUR_S3_BUCKETNAME/*"
        }
    ]
}
Bucket policy 解說

當然可以。你提供的是一個 Amazon S3 存儲桶(bucket)的策略。這個策略定義了誰可以做什麼操作,以及對哪些資源。下面是對每個參數的解釋:

  1. Version: “2012-10-17”

    • 這個字段指定了策略語言的版本。目前有兩個版本:“2008-10-17” 和 “2012-10-17”,後者是最新的並支持所有的策略功能。
  2. Statement: [ … ]

    • 策略聲明(statement)是策略的核心部分,它是一個由一個或多個個別聲明組成的陣列。每個聲明都是一個獨立的策略規則。
  3. Sid: “PublicReadGetObject”

    • 聲明的ID(Statement ID),是一個可選的識別符,用於識別策略中的這個特定聲明。在這個案例中,它被命名為 “PublicReadGetObject”。
  4. Effect: “Allow”

    • 這個字段定義了該聲明的影響。它可以是 “Allow” 或 “Deny”,用來指定是否允許或拒絕該聲明描述的訪問。在這裡,它被設置為 “Allow”。
  5. Principal: “*”

    • 主體(Principal)指定了哪些AWS賬戶或用戶可以被此策略允許或拒絕訪問。在這裡,使用 “*” 意味著這個策略適用於所有人。
  6. Action: “s3:GetObject”

    • 這個字段指定了允許或拒絕的操作。在這個案例中,“s3:GetObject” 表明這個策略允許對象的讀取操作。
  7. Resource: “arn:aws:s3:::YOUR_S3_BUCKET_NAME/*”

    • 資源(Resource)字段指定了策略適用的特定資源。這裡使用了 Amazon 資源名稱(ARN)來指定 s3 存儲桶中的所有對象(由 “/*” 表示)。

測試一下你的 website 是否可以正常運行

http://{BUCKET_NAME}.s3-website-{REGION}.amazonaws.com