iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
IT Operation

從前後端踏上 AWS 雲端架構勇者之路系列 第 17 篇

會員資料與訂單放哪裡?來認識 RDS~

  • 分享至 

  • xImage
  •  

前面我們把圖片放到 S3,也知道怎麼讓別人讀到圖片了

那如果今天要做一個課程報名網站,課程封面有地方放了,但會員買了哪些課、訂單付錢了沒,這些又要記在哪裡?

這就接到今天的資料庫哩。我們會用 AWS 的 RDS,讓 AWS 幫忙建立和維護資料庫

先看網站完成後的全貌圖,今天看橘色的 「EC2 後端程式 → RDS」 這一段

網站分工全貌:瀏覽器向 EC2 後端請求訂單,後端查詢 RDS;課程封面另外從 S3 讀取,今天聚焦 EC2 到 RDS 的連線

例如會員點開「我的訂單」,後端會先確認他是誰,再去資料庫查他的訂單,查完才把結果回傳給前端

會員買了哪些課,資料庫怎麼記?

假設 alex 買了一門課,我們會需要記下「這張訂單是 alex 的」,之後才能查出他買過什麼

這裡會用 PostgreSQL,一套關聯式資料庫。它能夠把資料整理成資料表,一列是一筆資料,欄位則用來記姓名、編號、付款狀態等內容

例如會員跟訂單,可以分成這兩張表:

資料表 記錄哪些內容 一筆範例
會員 users 會員編號、姓名 id = 7、name = alex
訂單 orders 訂單編號、會員編號、付款狀態 id = 101、user_id = 7、status = paid

訂單裡的 user_id = 7,就對應到會員編號 7,也就是 alex。paid 則表示這張訂單已付款

接著用 SQL,也就是操作資料庫的語法,就能指定「我要查會員 7 已付款的訂單」,或是把某張訂單改成已付款

那把訂單存成 JSON,放到 S3 可以嗎?

檔案存得進去,但怎麼查出 alex 的訂單、兩個人同時改資料時怎麼處理,還得另外設計。對這種一直新增、查詢、修改的資料,交給資料庫處理比較正規

不對啊,資料庫也裝在 EC2,不就好了?為啥還要用到 RDS

確實已經有 EC2 主機,你也可以自己在上面安裝 PostgreSQL

但接著就得想,誰來更新系統?每天的資料誰來備份?真的出問題時,備份拿得回來嗎?

網站還在開發,光寫功能就有得忙了,這些維護工作也得有人顧

所以 AWS 提供了 RDS。建立時選好 PostgreSQL,再設定規格、儲存空間和網路,AWS 就會幫你準備好執行資料庫的環境,在介面上叫 DB instance

你會看到一個選項叫 Database engine(資料庫引擎),就是問這次要用哪套資料庫軟體

PostgreSQL 是我們要用的資料庫軟體,RDS 幫忙處理它的安裝和維護

主流來說還是會將兩個服務拆開會比較適合~

那交給 AWS,我還要顧什麼?

我們可以用這張表來看:

要做的事 EC2 自架 PostgreSQL 使用 RDS PostgreSQL
安裝資料庫、更新作業系統 自己處理 AWS 處理
升級資料庫版本 自己安排、執行 用 RDS 的升級功能,程式要自己先測過
自動備份 自己安排怎麼備份、存在哪 啟用 RDS 自動備份,設定要保留幾天
設計資料表、寫查詢、設定誰能讀寫 自己處理 一樣要自己處理

例如 PostgreSQL 升級後,你原本的程式還能不能正常跑,這就得自己先測過,再安排升級時間。不能看到有新版本就直接升上去,也附上(RDS 版本升級說明)

備份也一樣,RDS 可以幫忙備份,但要留幾天、真的能不能還原出需要的資料,還是要自己設定和確認

RDS 怎麼計算費用?

RDS 資料庫開著就會計算運作時間,還要算配置的儲存空間。備份用量、資料傳輸等也可能另外收費,費用項目可以看 RDS PostgreSQL 定價

而且 把 EC2 關機,RDS 不會跟著停。它們是兩個分開的資源,別只關了網站主機,就以為全部都關好了 XD

那把 RDS 也 Stop 呢?

停止期間還是有儲存等費用,而且 DB instance 停止滿 7 天會自動啟動。所以如果練習做完、資料也不需要了,就要處理資源清除,不能只按 Stop 然後放著不管。也附上(RDS 停止與費用說明)

這部分下篇實作結束時,也會一起帶讀者共同做一遍~

資料庫放在內網,要怎麼連呢?

回頭看第一張圖,會員是透過網站操作,真正連到資料庫的是後端程式

所以我們可以把 RDS 放在 Private Subnet,讓 EC2 從 VPC 內部連過去,資料庫不用直接接受網際網路上的連線,附上(AWS 的 EC2 與私有 RDS 範例)

但如果網站還沒寫好,我只是想先打開資料表看看呢?

這時就可以用 DBeaver,裝在自己電腦上的資料庫工具。連線後可以看資料表,也能執行 SQL 來新增、查詢資料

不過,RDS 放在內網,自己家裡的電腦沒有直接通往它的連線,這時怎麼辦勒?

我們可以讓 EC2 當 SSH 跳板:DBeaver 先透過 SSH 連到 EC2,再由 EC2 把連線轉送到 RDS,路線就像下面這張圖

工程師管理資料的路線:DBeaver 透過 SSH TCP 22 連 EC2 跳板,再由 EC2 經 TCP 5432 連 Private Subnet 裡的 RDS PostgreSQL

這時 EC2 的工作就是轉送連線,所以 不用先放後端程式,也不用在 EC2 安裝 PostgreSQL。DBeaver 在自己的電腦,資料庫則在 RDS

前面學的 SG 也派上用場了!EC2 的 SSH 只允許自己目前的公有 IP /32;RDS 的 TCP 5432 則只允許使用指定 EC2 SG 的主機連進來

EC2 自己的出站規則,也要允許它連到 RDS。網路能通之後,SSH 和資料庫各自需要的登入驗證,也都要通過才行

所以這兩張圖的用途就不一樣了:第一張是會員用網站,後端幫他查資料

第二張是我們用 DBeaver,自己進去管理資料~

下一篇先來跑第二張圖:會搭配前面幾天用到的網路架構設施,再建立私有的 RDS PostgreSQL,用 DBeaver 經過 EC2 連進去,來新增一筆資料,我們下篇見勒 :D


上一篇
同一張 S3 圖片,為什麼 Allow 了還是看不到?
下一篇
用 DBeaver 經過 EC2,連進私有 RDS
系列文
從前後端踏上 AWS 雲端架構勇者之路 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言