這是鐵人賽相關文章,影片會在活動開始後發布
AWS S3 是雲端靜態檔案的儲存服務,簡單來說就是能夠把圖片、影片等上傳後不太會更動的檔案進行上傳,接下來用戶在觀看時,就能夠直接存取這些檔案。
而這個服務僅會作為靜態檔案儲存使用,因此在價格上會相對直接將檔案存到虛擬主機來得低上許多,本篇會介紹申請以及完整上傳的流程,在開始之前也請先確保已經有 AWS 帳號,並且已經綁定信用卡。
流程說明
- 建立 IAM 帳號: 首先會先建立 IAM 帳號,為了安全性,我們會透過一個子帳號來進行上傳,所以必須先賦予子帳號 S3 相關權限。
- 建立 S3 Bucket:接下來就能開始準備上傳流程,也會說明相關的權限設置。
- 撰寫程式碼~
建立 IAM 帳號
可以在 AWS 導覽列中輸入 IAM,接下來就會在彈出視窗中找到 IAM 管理工具。
接下來建立一個新的使用者,我們會賦予他 S3 的管理權限。
顧名思義,你可以定義使用者的名稱,在此不需要給予額外的管理控制台權限。
在設定許可中,選擇「直接連接政策」,搜尋欄中可以輸入「S3」,許可政策選擇「AmazonS3FullAccess」,接下來按下下一步、建立使用者即可。
在這個流程中已經建立了一個使用者,接下來會需要取得這使用者的存取方式,用來作為 Node.js 存取的方法。
回到 IAM 使用者列表,點選剛剛所建立的使用者,在畫面的上方可以找到建立存取金鑰。
他會問你做什麼用的,據說選什麼沒太大關係,但我們還是乖乖選擇本機代碼。
最後,把這個金鑰存起來,記得這個畫面只能進來一次,請準備好有地方存再開啟。
建立 S3 Bucket
Bucket 策略有兩種,本篇會直接調整 Bucket 的公開政策,讓在此 Bucket 的圖片均可以直接存取,為什麼這麼做可以參考 AWS 所提供的文件。
回到 S3 的服務中,選擇建立儲存貯體(Bucket)。
接下來就按照需求輸入名稱以及選擇區域,區域會影響:
- 存取速度
- 價格
而其中的價格影響較小,會建議依據服務受眾所在地區進行選擇。
接下來回到建立的 Bucket,選擇「許可」,在此會開放此 Bucket 的公開權限。
按照下圖的設定方式並儲存。
接下來政策也需要調整,按下編輯。
依據下圖輸入(下方有附上程式碼),確認後進行儲存
Bucket 政策原始碼。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::{{ bucket name }}/*"
}
]
}
回到程式碼
在此有提供完整的 Node.js 程式碼,依據需求將 IAM 及 Bucket 申請的資料填入 .env
即可(請參照 .env.sample
)。
完整範例:https://github.com/Wcc723/node-ironman-sample-2023/tree/feature/aws-s3-upload
如果在開發上有問題,建議參考本影片,會帶你從頭開始申請並上傳圖片喔:https://youtu.be/y12KO8XM6jw