Amazon RDS:是什麼、怎麼配置、怎麼使用

寫給耀達 Lite 雲端進銷存(2026-11-02)。接續 db-upgrade-path.html、postgres-design-sql.html。
內容以 RDS for PostgreSQL、東京區域、db.t4g.micro 起步為前提(Jesse 2026-11-02 已定)。除了這個起點,文件裡標 Claude 的看法 的都還沒拍板。
這份文件的內容來自 AWS 官方文件與價目表,沒有在真的 RDS 上跑過。指令旗標已對過 AWS CLI 參考文件,但指令本身沒有執行過,主控台畫面也沒有實際打開。價格是東京隨選價(價目表 2026-10-29 發布),美元、未稅,一個月算 730 小時。

1. 先講結論

查文件時才發現、最需要注意的六件事

陷阱會發生什麼事怎麼避開
Extended Support 預設開啟 版本過了標準支援期還沒升級,會自動開始收費。t4g.micro 約每月 175 美元,將近主機費的 10 倍 現在選支援期長的版本,並設好提醒和帳單告警(第 10 節)
主控台的 Production 範本 會預選雙可用區域和 io1 儲存,費用遠超過預期 不要選這個範本,每一欄逐項核對(第 5 節)
用 API 或 CLI 建立時的預設值比較不安全 不加密、沒有刪除保護;沒指定子網路群組或指定 default 時,預設可以從外部存取 照第 17 節的範本,全部明確寫出來
Npgsql 預設不驗證憑證 預設 SSL Mode=Prefer。連線可能有加密,卻不確認對方是不是真的 RDS 連線字串用 SSL Mode=VerifyFull(第 8 節)
RDS 代管主帳號密碼有兩個限制 開著的時候不能建立讀取副本,也不支援 Blue/Green 部署 需要時先關掉再做,關閉不會停機(第 7 節)
BYPASSRLS 在 RDS 上可能設不了 未查證 第 5 題原本規劃的後台帳號要用它。PostgreSQL 規定非 superuser 必須自己有這個屬性才能給別人,而 AWS 文件列出的主帳號屬性裡沒有它 第一台建好後先測(第 7 節),不行就用候選做法

2. RDS 是什麼、誰負責什麼

RDS 全名是 Amazon Relational Database Service。可以把它想成:AWS 替你租一台裝好資料庫的主機,並派人顧著,但鑰匙不給你。你拿到的是一個連線位址,用一般的 PostgreSQL 工具連上去就能用。

RDS 支援 PostgreSQL、MySQL、MariaDB、SQL Server、Oracle、Db2。我們用的 RDS for PostgreSQL 跑的是 PostgreSQL 引擎,所以 RLS、複合外鍵、set_config 這些 postgres-design-sql.html 談的行為照樣適用。C# 這邊一樣用 Npgsql 連線。

工作AWS 做Jesse 做
主機與磁碟準備、壞了更換選規格、選儲存量
作業系統與資料庫修補提供更新,在維護時段套用選維護時段;大版本要自己決定何時升
備份每天做快照,每 5 分鐘上傳交易記錄選保留天數、定期演練還原
故障切換開了雙可用區域就自動切換決定要不要開;程式要能重試
防火牆提供安全群組寫規則
帳號與權限建立主帳號建立角色、設計權限與 RLS
效能提供指標與分析工具索引、SQL、設告警、判斷何時升級
資料正確性—全部由程式與資料庫設計負責

代價:有些事情做不到

主帳號可以做什麼

建立角色與資料庫、安裝擴充套件、把物件改給別的擁有者、查看所有連線(pg_stat_activity),並用 pg_terminate_backend 中止連線、重設 pg_stat_statements 的統計。

3. 零件地圖

VPC(東京) 店家瀏覽器 經 CloudFront ALB 擺法留給第 7 題 Fargate 容器 服務安全群組 用 app_user 連線 Secrets Manager 存連線字串 容器啟動時讀一次 DB 子網路群組:兩個可用區域的私有子網路 RDS 執行個體 db.t4g.micro 資料庫安全群組 只收 5432、限定來源 Public access = No gp3 20 GiB、加密 掛在它上面的設定 參數群組 自動備份與快照(放 S3) 維護時段 CloudWatch 指標與記錄檔 Jesse 的電腦 psql、工具 通道端點 第 6 節的選項 TLS,連接埠 5432
資料庫沒有公開位址,所有連線都要經過安全群組。VPC 與 ALB 的最終擺法屬於第 7 題,這裡只畫 RDS 需要的關係。
零件白話關鍵事實
DB 執行個體那一台資料庫主機一個區域內的名稱不能重複;一台裡可以有多個資料庫
規格(instance class)主機大小db.t4g.micro 是 2 vCPU、1 GiB,Graviton2 可突發機型
端點(endpoint)連線用的網域名稱底下的 IP 可能改變,所以程式一律用名稱,不用 IP
VPC 與子網路群組把主機放在哪個網路子網路群組應涵蓋至少兩個可用區域,就算現在是單機也一樣
安全群組防火牆規則預設完全不開放,要自己寫規則
參數群組取代 postgresql.conf預設群組不能改,要建自己的(第 9 節)
選項群組附加功能設定用預設即可
自動備份每天的快照加交易記錄可以還原到保留期內的任一時間點,刪除主機時預設一起刪
手動快照自己拍的備份刪除主機也不會消失,要自己刪

4. 第一次建立的順序

Claude 的看法:這個順序的重點是先把會被引用的東西建好。參數群組和安全群組如果建立後才補,就要多重開一次或多改一次。

  1. 確認帳號:確認公司帳號的方案(免費或付費,第 16 節),先設好帳單告警。
  2. 查東京有哪些版本:確認 db.t4g.micro 能跑要用的版本(第 10 節)。
  3. 規劃網路:在 Express Mode 服務要用的 VPC 裡,準備兩個可用區域的私有子網路,建立 DB 子網路群組(第 6 節)。
  4. 建立資料庫的安全群組:先不放任何規則,等容器的安全群組出現後再加。
  5. 建立自訂參數群組:設定慢查詢記錄等參數(第 9 節)。
  6. 建立執行個體:照第 5 節逐欄填,或用第 17 節的指令。
  7. 連上去做初始設定:建立角色,測試 BYPASSRLS,安裝 pg_stat_statements(第 7 節)。
  8. 跑資料庫遷移:用 migration_owner 建立資料表和 RLS。
  9. 接上程式:把連線字串放進 Secrets Manager,安全群組加入容器來源(第 6、8 節)。
  10. 設告警和事件通知:門檻屬於第 8 題,但指標和通知管道要先通(第 14 節)。
  11. 演練一輪再開放使用:還原到某個時間點、換一次規格、確認程式能自動重新連上(第 12、18 節)。

5. 建立時每個欄位怎麼填

主控台要選 Standard create,不要選 Easy create。Easy create 只問引擎、大小和名稱,其他全用預設。範本也要注意:文件寫 Production 範本會預選雙可用區域、io1 儲存和刪除保護,這對第一階段太貴。選其他範本後逐欄核對下表。範本的實際選項這次沒有打開主控台確認,文件也寫選項會依版本不同。

「能改嗎」是指建立後還能不能改、會不會停機,來自 AWS 的修改設定表。建議值都是 Claude 的看法。

欄位(CLI 旗標)沒指定時建議填為什麼能改嗎
引擎與名稱
引擎
--engine
必填postgres第 3 題已定不適用
版本
--engine-version
引擎預設版本18 系列,明確指定小版本(待定,第 10 節)支援期最長,也是本機實測的版本可以往上升,會停機;不能降
Extended Support
--engine-lifecycle-support
開啟先用預設,加提醒和帳單告警2031 年才會碰到,之後隨時可以改(第 10 節)可以,不停機,只能用 CLI/API 改
識別名稱
--db-instance-identifier
必填lite-prod會出現在端點裡。最多 63 字元,區域內不重複可以改,但端點也會跟著變(未細查)
帳號
主帳號
--master-username
主控台是 postgreslite_master1~16 個英數字或底線,字母開頭。只給人管理用,不給程式用不能改
主帳號密碼
--manage-master-user-password
要選一種方式交給 Secrets Manager 代管每 7 天自動換,不用自己保管(第 7 節)可以,立即生效,不停機
驗證方式
--enable-iam-database-authentication
只用密碼只用密碼IAM 驗證需要多 300~1,000 MiB 記憶體,1 GiB 的主機負擔太重可以
規格與可用性
規格
--db-instance-class
必填db.t4g.micro已定可以,會停機
雙可用區域
--multi-az、--no-multi-az
Production 範本會預選單機(第一階段)費用約兩倍。開始收費時重新評估可以,不停機,但可能影響效能
可用區域
--availability-zone
系統隨機選不指定文件建議用預設—
儲存
類型
--storage-type
Production 範本是 io1gp3基準 3,000 IOPS 內不另收費。AWS 的文件也標它為建議選項可以
大小
--allocated-storage
必填20(GiB)gp3 的最小值。費用按配置量算可以加、不能減;不停機,但效能可能下降
自動擴充上限
--max-allocated-storage
主控台預設 1,000 GiB100上限就是帳單的上限。100 GiB 約每月 13.80 美元可以,不停機
加密
--storage-encrypted
API 預設不加密開啟,用 AWS 代管金鑰第一天就要開;之後要轉換得走快照還原不能直接開或關;金鑰也不能換
網路
VPC、子網路群組
--db-subnet-group-name
預設 VPC自己的 DB 子網路群組只放私有子網路,等於多一道鎖(第 6 節)換 VPC 很麻煩,要一次做對
公開存取
--no-publicly-accessible
沒指定或用 default 群組時為開啟關閉資料庫不該有公開位址可以,不停機
安全群組
--vpc-security-group-ids
主控台 Create new 會加入本機 IP自己建的資料庫安全群組只放 5432 與明確來源可以,不停機
連接埠
--port
5432預設沒有更換的理由可以,會中斷連線(未細查)
憑證機構
--ca-certificate-identifier
rds-ca-rsa2048-g1預設支援自動輪替伺服器憑證可以
RDS Proxy不建立不建立(待第 7 題)第一版的看法是不用,要跟 RLS 的做法一起測過之後可以加
資料庫設定
初始資料庫
--db-name
postgreslite別把資料放在系統預設的庫裡可以自己再建立
參數群組
--db-parameter-group-name
預設群組(不能改內容)自訂群組事先建好就不用多重開一次(第 9 節)換群組立即生效,但參數要重開才套用
選項群組預設預設—可以
備份
保留天數
--backup-retention-period
API 預設 1,主控台預設 7暫用 7,第 9 題定案絕對不要設 0:不能還原到時間點,大版本升級也不會自動拍快照可以;從 0 改成非 0 或反過來會停機
備份時段
--preferred-backup-window
隨機18:00-18:30(台灣 02:00)時間是 UTC。假設店家凌晨沒營業可以,不停機
跨區域備份關閉關閉(第 9 題可再談)另外收費;只有整個東京區域出事才用得到可以
複製標籤到快照
--copy-tags-to-snapshot
關閉開啟日後才查得出快照的費用屬於誰可以
監控
Database Insights
--database-insights-mode
StandardStandard保留 7 天不另收費(第 14 節)可以,不停機
Enhanced Monitoring
--monitoring-interval
0(關閉)先關閉按 CloudWatch Logs 計費,需要查作業系統問題時再開可以,不停機
記錄檔匯出
--enable-cloudwatch-logs-exports
不匯出postgresql、upgradeRDS 上的記錄檔預設只留 3 天。匯出量大時要注意費用可以,不停機
維護與保護
自動小版本升級
--auto-minor-version-upgrade
開啟開啟一個人維運,安全修補交給 AWS。搬 Aurora 前要特別確認版本(第 10 節)可以,不停機
維護時段
--preferred-maintenance-window
隨機sun:19:00-sun:19:30(台灣週一 03:00)時間是 UTC,不能跟備份時段重疊。假設週一凌晨最冷清可以,但有陷阱(第 13 節)
刪除保護
--deletion-protection
API 預設關閉開啟防止誤刪。要刪得先改設定可以,不停機

6. 網路:誰連得到資料庫

6.1 兩道鎖

資料庫安全群組的入站規則
  類型          連接埠    來源
  PostgreSQL    5432     容器的服務安全群組 sg-xxxx
  PostgreSQL    5432     通道端點的安全群組 sg-yyyy(只有 Jesse 要連時才需要)
出站規則:文件說通常不影響資料庫,除非資料庫主動往外連

6.2 跟 Fargate 的連接

6.3 Jesse 自己要怎麼連進去

資料庫沒有公開位址,所以從公司或家裡的電腦不能直接連。可選的方式:

方式怎麼運作費用好處代價
A. EC2 Instance Connect 端點
Claude 的看法:先試這個
在 VPC 建一個端點,本機用 AWS CLI 開通道到資料庫的私有 IP 端點本身不收費;跨可用區域有資料傳輸費 不用維護主機,也不用開公開位址 每個端點最多 20 條連線、單次最長 1 小時。AWS 文件講的是連 EC2,連 RDS 的做法來自第三方文章,要實測。據這些文章,通道指令只接受 IP,要先查出資料庫 IP
B. 小型 EC2 跳板機 開一台很小的 EC2,透過 Session Manager 轉接連接埠,不開 SSH 多一台 EC2 的費用(未查價) 傳統做法,參考資料多,也能放 psql 多一台主機要更新、要顧,跟「不顧主機」的前提相反
C. 暫時開公開存取 改成公開存取,安全群組只放自己的 IP,用完再關 公開 IPv4 每小時 0.005 美元 不用多建東西,修改不會停機 子網路要全部是公開的,跟 6.1 的第二道鎖衝突;忘記關就有風險。不建議用在正式環境
D. 進到執行中的容器 用 ECS Exec 進容器,再從裡面連資料庫 不另收費(未查) 路徑已經存在 映像檔要裝 psql,不適合放進正式映像;只能下指令,不好接圖形工具。Express Mode 上能不能開沒查
E. AWS Client VPN 電腦加入 VPC 的網路 按端點和連線時數收費(未查價) 體驗最接近在內網 一個人用太重,人多了再考慮
# 方式 A 的樣子(通道開著時視窗不能關)。第三方文章的做法,還沒實測
aws ec2-instance-connect open-tunnel `
  --instance-connect-endpoint-id eice-xxxxxxxx `
  --private-ip-address 10.0.x.x `
  --remote-port 5432 `
  --local-port 15432

# 另開一個視窗
psql "host=localhost port=15432 dbname=lite user=lite_master sslmode=require"

走通道時憑證名稱會對不上:連的是 localhost,憑證上卻是 RDS 的端點名稱,所以 verify-full 會失敗,這裡用 require。這是 Claude 依 TLS 規則推出來的,沒有實測。正式程式仍然要用 VerifyFull。

7. 帳號與密碼

7.1 角色怎麼分

角色名稱沿用 postgres-design-sql.html 第 3 節。主帳號只給人做管理,平常不用。

角色誰用權限重點
lite_master(主帳號)Jesse 做管理工作rds_superuser。不放進程式設定
migration_owner資料庫遷移工具擁有資料表。擁有者預設略過 RLS,所以每張表都要 FORCE ROW LEVEL SECURITY
app_user店家用的程式不是擁有者、沒有 BYPASSRLS,RLS 才會生效
backoffice後台客服、統計要看到所有店家,做法見 7.2
-- 第一段:用主帳號連上 lite 資料庫後執行。密碼不要寫進指令碼或版本控制
CREATE ROLE migration_owner LOGIN PASSWORD '<從 Secrets Manager 取得>';
CREATE ROLE app_user        LOGIN PASSWORD '<從 Secrets Manager 取得>';

GRANT CONNECT ON DATABASE lite TO migration_owner, app_user;
GRANT ALL ON SCHEMA public TO migration_owner;
GRANT USAGE ON SCHEMA public TO app_user;

-- 逾時設定見 postgres-design-sql.html 第 9 節
ALTER ROLE app_user SET statement_timeout = '15s';
ALTER ROLE app_user SET idle_in_transaction_session_timeout = '30s';

-- 第二段:改用 migration_owner 連線後執行
-- 之後 migration_owner 建立的表,自動開放給 app_user
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT USAGE, SELECT ON SEQUENCES TO app_user;

PostgreSQL 15 起一般角色不能在 public schema 建立物件,所以這裡明確授權。第二段用 migration_owner 本人執行:PostgreSQL 文件寫只能改自己或自己所屬角色的預設權限,而新物件只吃建立者當下這個角色的預設值,本人執行最不會出錯。這段 SQL 還沒有在 RDS 上跑過。

7.2 BYPASSRLS 可能設不了

這可能影響第 5 題的一個前提。第 5 題接受的代價裡寫了「後台要有一個權限很大的 BYPASSRLS 帳號」,但查文件時發現:

第一台建好後,先花一分鐘確認:

SELECT rolname, rolsuper, rolbypassrls FROM pg_roles
 WHERE rolname IN (current_user, 'rds_superuser');
CREATE ROLE backoffice LOGIN BYPASSRLS;   -- 失敗就代表要走候選做法
如果不行,候選做法怎麼做代價
A. 另外寫給後台的政策
Claude 的看法:優先考慮
CREATE POLICY backoffice_all ON sales_order TO backoffice USING (true) WITH CHECK (true); 每張表多一條政策,遷移工具要一起產生;漏寫時後台只會查不到,比較安全。標準 PostgreSQL 語法,但這次沒實測。查詢仍要經過 RLS 判斷,效能要另外確認
B. 讓後台用擁有者身分 後台連 migration_owner,不開 FORCE 不建議:擁有者能改表結構,而且沒開 FORCE 時,用它跑遷移或程式都會略過 RLS

同樣要確認的是 pg_dump:它預設會關閉 row_security,沒有略過權限的帳號會直接報錯(postgres-design-sql.html 第 3 節)。第 9 題的「只還原一家店」用 --enable-row-security,不受影響。全庫邏輯備份要用哪個帳號,要實測。RDS 自己的快照不受影響。

7.3 密碼放哪裡

做法怎麼運作費用適合代價
RDS 代管主帳號密碼
Claude 的看法:主帳號用這個
建立時勾選,RDS 把密碼放在 Secrets Manager,每 7 天換一次 每個祕密每月 0.40 美元,每 1 萬次呼叫 0.05 美元 主帳號 開著時不能建立讀取副本,也不支援 Blue/Green。刪除主機時祕密也一起刪
自己建立祕密
Claude 的看法:程式用這個
自己把角色密碼存進 Secrets Manager 同上 程式用的角色 輪替要自己做。RDS 文件講的 7 天輪替不適用於這些角色
IAM 驗證 用 IAM 身分換 15 分鐘有效的權杖,不存密碼 不另收費(未細查) 記憶體較大的主機 文件要求多留 300~1,000 MiB 記憶體,t4g.micro 總共才 1 GiB,不適合
寫死在設定檔 放進映像檔或版本控制 免費 都不適合 洩漏後很難收拾,不要這樣做

代管密碼的兩個限制,會撞到之後的升級路線。

7.4 容器怎麼拿到密碼

ECS 任務定義的 secrets 可以把祕密內容放進環境變數。ASP.NET Core 會把環境變數 ConnectionStrings__Main 讀成 ConnectionStrings:Main。

{
  "containerDefinitions": [{
    "secrets": [{
      "name": "ConnectionStrings__Main",
      "valueFrom": "arn:aws:secretsmanager:ap-northeast-1:<帳號>:secret:lite/prod/app-AbCdEf:connectionString::"
    }]
  }]
}

8. 連線加密與 Npgsql

8.1 兩邊要各設一半

設定管什麼預設建議
伺服器 rds.force_ssl拒絕沒有加密的連線PostgreSQL 15 起是 1維持 1
Npgsql SSL Mode要不要加密、要不要驗證對方Prefer:不驗證憑證VerifyFull
Npgsql Root Certificate用哪個憑證機構來驗證環境變數 PGSSLROOTCERT指到打包進映像檔的憑證檔

Npgsql 文件列出的六種模式裡,只有 VerifyFull 同時防竊聽和防假冒伺服器。rds.force_ssl=1 只保證有加密,不保證連到的是真的 RDS,兩者不能互相取代。

8.2 憑證檔

8.3 連線字串

Host=lite-prod.xxxxxxxx.ap-northeast-1.rds.amazonaws.com;
Port=5432;
Database=lite;
Username=app_user;
Password=<從祕密取得>;
SSL Mode=VerifyFull;
Root Certificate=/app/certs/global-bundle.pem;
Maximum Pool Size=10;
Keepalive=30;
Application Name=lite-api
參數Npgsql 預設這裡的值為什麼
Maximum Pool Size10010t4g.micro 連線上限約 112 條甚至更低,兩個容器用預設值就可能撞頂。Claude 的看法
Keepalive0(關閉)30較快發現斷掉的連線。Claude 的看法,要配合 postgres-design-sql.html 第 13 節一起調
Timeout15 秒預設等待建立連線的時間
Command Timeout30 秒預設等待指令的時間。伺服器另有 statement_timeout
Connection Idle Lifetime300 秒預設閒置多久後收回
Connection Lifetime3,600 秒預設Npgsql 9.0 起才有這個預設。連線定期更新,有助於切換後回到新主機

8.4 程式要能面對斷線

9. 參數群組

參數群組就是 RDS 的 postgresql.conf。

規則說明
預設群組不能改要改任何參數,都要先建自己的群組
動態參數改了立即生效,不用重開
靜態參數要重開才生效。主控台會顯示 pending-reboot,RDS 不會替你重開
換群組掛上新群組不會停機,但新群組的設定要手動重開才會套用
共用改一個群組會影響所有使用它的主機
大版本要對應群組屬於某個版本家族,例如 postgres18,升大版本時要準備新的
還原時不會帶過來從備份還原出的新主機會掛預設群組,要重新指定

第一版要動的參數

Claude 的看法:能不改就不改。這張表的值都只是起始值。

參數類型起始值為什麼
log_min_duration_statement動態500(毫秒)記錄超過 0.5 秒的查詢,這是找慢查詢最便宜的方法。記錄內容可能含店家資料,所以門檻不要設成 0
log_lock_waits動態1記錄等鎖超過 deadlock_timeout 的情況,查庫存扣減卡住時用得到(類型請以主控台為準,未細查)
shared_preload_libraries靜態確認含 pg_stat_statements查 SQL 統計要用到。預設是否已包含,建好後用 SHOW shared_preload_libraries; 確認(未查證)
rds.log_retention_period—預設 4320(3 天)可以設 1~7 天。有匯出到 CloudWatch 就不用加大

不要動的參數

逾時設定(statement_timeout 等)建議設在角色上,不要設在參數群組,這樣才不會影響遷移工具和備份,做法見第 7.1 節。

擴充套件

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
SHOW rds.extensions;           -- 這個版本可以裝哪些
SHOW rds.allowed_extensions;   -- 預設 *,表示都能裝

10. 版本與升級

10.1 版本怎麼選

PostgreSQL 版本還沒拍板。查到的日期如下(RDS 發布行事曆):

大版本RDS 上架RDS 標準支援結束Extended Support 開始收費最新小版本(RDS)
182025-11-142031-02-282031-03-0118.6
172024-11-142030-02-282030-03-0117.11
162023-11-202029-02-282029-03-0116.15
152023-02-272028-02-292028-03-0115.19
142022-02-032027-02-282027-03-0114.24

Claude 的看法:選 18。支援期最長,postgres-design-sql.html 的實測也是在 18.6 上跑的,Aurora 也已經有 18.6。除非下面的檢查不通過。

建立前要確認 db.t4g.micro 能跑 18。AWS 的規格支援表寫到 PostgreSQL 17,但這張表所有規格都沒有列 18,看起來是文件沒更新,不能當作不支援的證據。用下面這個指令才算數(只是查詢,不會收費):

aws rds describe-orderable-db-instance-options `
  --engine postgres --engine-version 18.6 `
  --db-instance-class db.t4g.micro --region ap-northeast-1 `
  --query "OrderableDBInstanceOptions[].[EngineVersion,DBInstanceClass,StorageType]" --output table

如果沒有結果,就退到 17,並重新檢查 postgres-design-sql.html 裡依賴 PostgreSQL 18 的部分,因為那些實測都是在 18.6 上跑的。

10.2 小版本與大版本

小版本(18.4 → 18.6)大版本(17 → 18)
內容向下相容的修正可能不相容
誰啟動開自動升級時由 AWS 在維護時段做一定要手動
停機文件寫可能幾分鐘,雙可用區域也一樣,兩台同時升級同樣可能幾分鐘,依資料量而定
能退回嗎不能原地退回不能,只能從升級前的快照還原成新主機
備份—保留天數大於 0 時,RDS 自動在升級前後各拍一次快照

10.3 小版本和 Aurora 的時間差

RDS 的小版本文件寫社群發布後 7 天內上架,Aurora 是 3 個月內。舉例來說,18.6 在 RDS 是 2026-08-25,在 Aurora 是 2026-09-29,差 35 天。

搬到 Aurora 時,目標要是相同或更高的小版本(db-upgrade-path.html 第 6 節)。所以如果自動升級把 RDS 帶到 Aurora 還沒有的版本,就要等 Aurora 跟上才能搬。Claude 的看法:現階段安全修補比較重要,自動升級維持開啟,真的要搬的前一兩個月再暫時關掉。

10.4 Blue/Green 部署:把停機縮短的工具

RDS 複製一套「綠色」環境持續同步,先在綠色環境升級、測試,再切換過去。文件寫切換通常不到 1 分鐘。適合大版本升級。

10.5 Extended Support:最貴的隱藏費用

過了標準支援結束日還沒升大版本,RDS 不會馬上強制升級,而是自動轉進 Extended Support 並開始收費(前提是這個設定開著,而它預設就是開的)。

東京價格單價t4g.micro 或 small 單機(2 vCPU)雙可用區域(估算)
第 1、2 年0.12 美元/vCPU/小時每月約 175.20每月約 350.40
第 3 年0.24 美元/vCPU/小時每月約 350.40每月約 700.80

算法:2 vCPU × 730 小時 × 單價。文件寫備援主機也要收費,所以雙可用區域以兩倍估算。對照 t4g.micro 主機費每月 18.25 美元。

選擇到期時會發生什麼代價
A. 保留預設,加提醒
Claude 的看法:推薦
沒升級就開始收費,服務不中斷 忘記就多付錢,要靠帳單告警和行事曆提醒。最壞情況是花錢,不是停機
B. 建立時就關掉
open-source-rds-extended-support-disabled
不收費,但 RDS 會自動升到下一個大版本 可能在不方便的時間點遇到不相容的升級,還會停機

選 A 的理由:18 版要到 2031 年才碰到,而且這個設定隨時可以改,文件寫立即生效、不停機,到時候再決定也不遲。真正要做的是在 2030 年排好大版本升級。

11. 儲存空間

事實說明
gp3 基準PostgreSQL 20~399 GiB:3,000 IOPS、125 MiB/s,不另外收費。400 GiB 起會拆成 4 個磁碟區,基準也會變高
費用單機每 GB 每月 0.138 美元,按配置量算,不是按實際用量
只能加不能減文件明寫不能縮小。想縮只能匯出到新主機
加大時不會停機,但效能可能下降
磁碟滿了主機離開 available 狀態,自動備份也會停止。這是要避免的情況

自動擴充

同時符合下面三點時才會擴充:

每次至少加 10 GiB。也就是 20 GiB 的主機剩不到 2 GiB 時才會變 30 GiB,費用從每月 2.76 美元變 4.14 美元。

上限要自己壓低:主控台預設 1,000 GiB,等於每月最多 138 美元的儲存費。Claude 的看法:先設 100 GiB。文件要求上限至少比目前多 10%,並建議多 26% 以上,以免一直收到快到上限的通知。

資料不一定是磁碟變大的原因:WAL 累積、記錄檔、大量 UPDATE 留下的膨脹都會吃空間。DELETE 之後空間通常也不會還給磁碟。擴充前先查原因(postgres-design-sql.html 第 11 節)。

12. 備份與還原

這裡只講機制。保留天數、演練頻率和「只還原一家店」屬於第 9 題,這裡不定。

快照 週一 快照 週二 快照 週三 交易記錄每 5 分鐘上傳 交易記錄每 5 分鐘上傳 還原到週二 15:42 週二快照+套用交易記錄 建立一台新主機、新端點 舊主機不受影響 還原後要自己做 指定參數群組和安全群組(預設不會帶過來) 把程式的連線字串改到新端點,舊主機留著查
依 AWS 文件整理。還原所需時間文件沒有給固定數字,要演練才知道。
自動備份手動快照
何時產生每天在備份時段,加每 5 分鐘的交易記錄自己拍
能還原到保留期內任一時間點拍攝當下
保留最多 35 天,到期自動刪一直留到自己刪,每區域 100 份
刪除主機時預設一起刪,可選擇保留不受影響
範圍都是整台主機,不能只備份單一資料庫,更不能只備份一家店

13. 維護與變更:什麼時候會停機

13.1 維護時段

13.2 改設定時的選擇

修改主機時有「立即套用」和「下個維護時段套用」兩種。有些設定不管怎麼選都立即生效。

變更什麼時候生效會停機嗎
換規格立即或下個時段會。時間文件沒有給
升級引擎版本立即或下個時段會
備份保留天數:0 ↔ 非 0立即或下個時段會
靜態參數要手動重開重開時會
開雙可用區域立即或下個時段不會,但可能影響效能
加大儲存立即或下個時段不會,但可能影響效能
備份保留天數:非 0 ↔ 非 0、備份時段盡快不會
安全群組盡快不會
公開存取、刪除保護、自動小版本升級、記錄檔匯出、Enhanced Monitoring、自動擴充上限立即不會
代管主帳號密碼開關立即不會
換參數群組(本身)立即不會,但參數要重開才套用
憑證機構立即或下個時段引擎版本支援不重開輪替就不會

改維護時段的陷阱:如果有待處理、會停機的項目,而你把時段改成包含現在這個時間,那些項目會立即執行。改之前先看待處理清單(第 18 節)。

14. 監控與記錄檔

這裡只講有哪些工具和費用。告警門檻屬於第 8 題。

工具看什麼費用(東京)建議
CloudWatch 指標CPU、記憶體、連線數、磁碟等主機層數字RDS 內建指標不另計(未逐項查);告警每個每月 0.10 美元第一天就要
Database Insights 標準版資料庫負載,可以依等待類型、SQL、使用者切開看保留 7 天不另收費預設開著。東京有,PostgreSQL 沒有規格限制(MySQL、MariaDB 才排除 t4g.micro),建好後實際確認
Database Insights 進階版更長保留、更多分析付費(這次沒查單價)第一階段不用
Enhanced Monitoring作業系統層的行程、記憶體,最快每秒一次走 CloudWatch Logs,間隔越短越貴先關,查問題時再開
記錄檔匯出PostgreSQL 記錄檔、升級記錄寫入每 GB 0.76 美元,保存每 GB 每月 0.033 美元開,但不要開 log_statement = all
RDS 事件通知故障切換、維護、儲存快到上限等事件透過 SNS,費用這次沒查第一天就要,寄到手機看得到的信箱
pg_stat_statements每種 SQL 的累計時間與次數不另收費第一天就要

第 8 題要談的指標

指標回答什麼問題
CPUUtilization、CPUCreditBalanceCPU 夠不夠、點數快用完了嗎
CPUSurplusCreditsCharged有沒有因為超過基準而多付錢
FreeableMemory、SwapUsage記憶體夠不夠
ReadIOPS常用資料放得進記憶體嗎。文件說應該小而穩定
DatabaseConnections連線快到上限了嗎
FreeStorageSpace磁碟快滿了嗎
MaximumUsedTransactionIDs交易編號有沒有危險
ReplicaLag有讀取副本時,落後多少

舊文件寫的 Performance Insights,文件現在歸到 CloudWatch Database Insights 底下。主控台與 CLI 仍然看得到這個名稱。舊文件的字眼這次沒有改。

15. 高可用與讀取分流

「多一台主機」有三種,用途完全不同,很容易搞混:

雙可用區域執行個體雙可用區域叢集讀取副本
解決什麼主機或可用區域故障時自動接手接手更快,還能讀分擔查詢、報表
備援能讀嗎不能能能,也只能讀
同步方式同步半同步非同步,可能落後
t4g 能用嗎能不能。只支援 m6gd、r6gd 等機型能
費用主機和儲存約兩倍三台,機型也貴跟一般主機同價,同區域複寫不收傳輸費
接手時間通常 60~120 秒(db-upgrade-path.html)更短,小版本升級約 35 秒不會自動接手,要手動升格
在路線上的位置第 3、4 階段路線上沒有報表拖慢開單時才加

16. 費用與費用陷阱

第一階段每月估算

項目計算美元/月是不是假設
主機 db.t4g.micro 單機0.025 × 73018.25隨選價
儲存 gp320 × 0.1382.76假設沒有觸發擴充
備份20 GB 內免費0.00假設備份不超過 20 GB
Secrets Manager2 個祕密 × 0.400.80假設主帳號和程式各一個;API 呼叫費很小
告警5 個 × 0.100.50假設 5 個,第 8 題會改
記錄檔1 GB × (0.76 + 0.033)0.79假設每月 1 GB,實際看慢查詢多寡
合計約 23.10不含資料傳輸、超過 CPU 基準的費用

這只是資料庫相關的部分。整套系統(ALB 粗估約 38 美元、Fargate、CloudFront)的月費還沒合起來算。

會讓帳單跳起來的事

情況多多少怎麼防
長期超過 CPU 基準整月滿載約多 98.55 美元(db-upgrade-path.html 第 9.1 節)帳單告警、CPUSurplusCreditsCharged
版本過期進入 Extended Support每月約 175.20 美元起第 10.5 節
用了 Production 範本雙可用區域加 io1,費用遠超預期(這次沒試算 io1)第 5 節
自動擴充上限太高每 100 GB 多 13.80 美元上限設 100 GiB
刪了主機卻留著備份和快照超過免費額度的部分持續計費。沒有主機時,免費額度也會變少定期清查
測試主機忘記關每台每月 18.25 美元起測試主機用完就刪;停機最多 7 天就會自動開回來
開了公開 IP每個約每月 3.65 美元維持私有
Blue/Green 完成後留著舊環境等於多一整套驗收後刪除
log_statement = all每 GB 寫入 0.76 美元只短暫開啟

停機能省多少

停止主機時不收主機費,但儲存和備份照收。文件寫連續停止 7 天後會自動開回來,所以長期不用的測試區不能只靠停機,要寫排程或直接刪除、需要時從快照還原。

免費額度

文件寫新帳號有 100 美元抵用金,完成活動最多再加 100 美元。免費方案最多 6 個月,而且部分服務不能用;付費方案超過抵用金後照常計費。公司帳號是不是新帳號、抵用金能不能折抵 RDS,未查證,所以上面的試算都沒有扣除。

17. 建立用的指令範本

AWS 帳號建好後才能跑。寫成 PowerShell,用反引號換行。這些指令沒有實際執行過,名稱、版本、子網路都是範例。第 4 段開始就會收費。

# 1. 參數群組
aws rds create-db-parameter-group `
  --db-parameter-group-name lite-pg18 `
  --db-parameter-group-family postgres18 `
  --description "Lite PostgreSQL 18" `
  --region ap-northeast-1

aws rds modify-db-parameter-group `
  --db-parameter-group-name lite-pg18 `
  --parameters "ParameterName=log_min_duration_statement,ParameterValue=500,ApplyMethod=immediate" `
  --region ap-northeast-1

# 2. 子網路群組(兩個可用區域的私有子網路)
aws rds create-db-subnet-group `
  --db-subnet-group-name lite-db-private `
  --db-subnet-group-description "Lite DB private subnets" `
  --subnet-ids subnet-aaaa subnet-bbbb `
  --region ap-northeast-1

# 3. 資料庫的安全群組(先不放入站規則)
aws ec2 create-security-group `
  --group-name lite-db `
  --description "Lite database" `
  --vpc-id vpc-xxxx `
  --region ap-northeast-1

# 4. 建立執行個體
aws rds create-db-instance `
  --db-instance-identifier lite-prod `
  --engine postgres `
  --engine-version 18.6 `
  --db-instance-class db.t4g.micro `
  --db-name lite `
  --master-username lite_master `
  --manage-master-user-password `
  --storage-type gp3 `
  --allocated-storage 20 `
  --max-allocated-storage 100 `
  --storage-encrypted `
  --db-subnet-group-name lite-db-private `
  --vpc-security-group-ids sg-dbxxxx `
  --no-publicly-accessible `
  --no-multi-az `
  --db-parameter-group-name lite-pg18 `
  --backup-retention-period 7 `
  --preferred-backup-window 18:00-18:30 `
  --preferred-maintenance-window sun:19:00-sun:19:30 `
  --auto-minor-version-upgrade `
  --deletion-protection `
  --copy-tags-to-snapshot `
  --database-insights-mode standard `
  --enable-cloudwatch-logs-exports postgresql upgrade `
  --region ap-northeast-1

# 5. 容器的安全群組出現後,再開放連線
aws ec2 authorize-security-group-ingress `
  --group-id sg-dbxxxx `
  --protocol tcp --port 5432 `
  --source-group sg-containerxxxx `
  --region ap-northeast-1

沒有寫 --engine-lifecycle-support,所以 Extended Support 用預設開啟(第 10.5 節)。備份 7 天只是暫定,第 9 題會改。

Claude 的看法:第一次可以用主控台熟悉,之後把這些設定寫進基礎架構程式碼(CloudFormation 或 Terraform)。這樣測試區和正式區才會一致,也能重建。要不要這樣做,留給第 7 題。

18. 日常操作速查

指令都省略了 --region ap-northeast-1。會停機的操作前面有標示。

我想要做法注意
查連線位址與狀態aws rds describe-db-instances --db-instance-identifier lite-prod看 Endpoint、DBInstanceStatus、PendingModifiedValues
取得主帳號密碼到 Secrets Manager 查 MasterUserSecret 指向的祕密不要貼到聊天室或記事本
查待處理的維護aws rds describe-pending-maintenance-actions改維護時段前要先查
查最近的事件aws rds describe-events --source-identifier lite-prod --source-type db-instance出事時第一個看
停機:換規格aws rds modify-db-instance --db-instance-identifier lite-prod --db-instance-class db.t4g.small --apply-immediately拿掉 --apply-immediately 就等下個時段
加大儲存aws rds modify-db-instance --db-instance-identifier lite-prod --allocated-storage 30 --apply-immediately不能縮回去
開雙可用區域aws rds modify-db-instance --db-instance-identifier lite-prod --multi-az --apply-immediately排在離峰。費用約變兩倍
停機:重開aws rds reboot-db-instance --db-instance-identifier lite-prod套用靜態參數用
演練故障切換aws rds reboot-db-instance --db-instance-identifier lite-prod --force-failover要先開雙可用區域
拍手動快照aws rds create-db-snapshot --db-instance-identifier lite-prod --db-snapshot-identifier lite-prod-before-upgrade重大變更前都拍。單機時 I/O 會短暫暫停
還原到時間點aws rds restore-db-instance-to-point-in-time --source-db-instance-identifier lite-prod --target-db-instance-identifier lite-restore --restore-time 2026-11-02T07:42:00Z --db-subnet-group-name lite-db-private --vpc-security-group-ids sg-dbxxxx --db-parameter-group-name lite-pg18 --no-publicly-accessible建立新主機,要付費。時間用 UTC。查完記得刪
從快照還原aws rds restore-db-instance-from-db-snapshot --db-instance-identifier lite-restore --db-snapshot-identifier lite-prod-before-upgrade --db-subnet-group-name lite-db-private --vpc-security-group-ids sg-dbxxxx --db-parameter-group-name lite-pg18 --no-publicly-accessible同上
暫停測試主機aws rds stop-db-instance --db-instance-identifier lite-test7 天後自動開回。儲存照收。有讀取副本時不能停
開啟暫停的主機aws rds start-db-instance --db-instance-identifier lite-test—
查可用版本aws rds describe-db-engine-versions --engine postgres --query "DBEngineVersions[].EngineVersion" --output text—
查有沒有在收 Extended Supportaws rds describe-db-instances --query "DBInstances[].[DBInstanceIdentifier,EngineVersion,EngineLifecycleSupport]" --output table—
刪除測試主機先 modify-db-instance --no-deletion-protection,再 aws rds delete-db-instance --db-instance-identifier lite-test --skip-final-snapshot --delete-automated-backups無法復原。正式主機不要用這個寫法,要留最後快照

連不上時的檢查順序

  1. 狀態:DBInstanceStatus 是 available 嗎?
  2. 安全群組:來源對嗎?連不上且「逾時」時,多半是這裡或路由。
  3. 是否同一個 VPC:主機沒有公開位址,VPC 外連不到。
  4. DNS:程式用的是端點名稱嗎?還原後有沒有改過來?
  5. 帳號、資料庫名稱:這類錯誤通常會立刻回報,跟逾時不同。
  6. 憑證:映像檔裡有憑證包嗎?Host 跟憑證上的名稱一樣嗎?
  7. 連線數:DatabaseConnections 有沒有到頂?

這份文件查到、會影響其他地方的事

查到什麼影響現況
BYPASSRLS 在 RDS 可能設不了deployment.md 第 5 題的「後台帳號」與 postgres-design-sql.html 第 3 節要實測。第 5 題的選擇本身不受影響,只是後台帳號的做法可能要換
代管密碼不能建副本、不支援 Blue/Greendb-upgrade-path.html 第 5、6 節的路線需要時先關掉。Aurora 副本是否受限未查證
加大儲存不會停機db-upgrade-path.html 第 5 節寫「這次沒查」已查到,那份文件沒有改
Extended Support 預設開啟db-upgrade-path.html 沒有提到這裡補上,那份文件沒有改
規格支援表沒有列 PostgreSQL 18版本選擇建立前用指令確認

這裡不決定的事

題目RDS 這邊要接上的部分
第 7 題:環境與發布RDS 放在哪個 VPC、測試區要不要獨立一台、RDS Proxy 用不用、Jesse 怎麼連進去、要不要寫成基礎架構程式碼
第 8 題:監控與告警第 14 節的指標要設多少門檻、通知誰、半夜怎麼叫醒人
第 9 題:備份與還原保留天數、多久演練一次、只還原一家店的做法、跨區域備份要不要
資料模型主鍵型別、store_id 的欄位設計(postgres-design-sql.html)
版本第 10 節推薦 18,還沒拍板

20. 還沒查證的事

21. 名詞對照

名詞白話
DB 執行個體(DB instance)一台 RDS 資料庫主機
端點(endpoint)連線用的網域名稱
VPC你在 AWS 裡專屬的私有網路
子網路(subnet)、私有子網路VPC 裡的一區網段;路由沒有通往網際網路閘道的就是私有的
DB 子網路群組告訴 RDS 可以把主機放在哪些子網路
安全群組(security group)掛在資源上的防火牆規則
參數群組(parameter group)資料庫設定值的集合,取代 postgresql.conf
動態/靜態參數改了立即生效/要重開才生效
主帳號(master user)建立主機時產生的管理帳號,屬於 rds_superuser
rds_superuserRDS 給客戶的最高權限角色,但不是真正的 superuser
Secrets ManagerAWS 存放密碼的服務,可以自動輪替
KMSAWS 管理加密金鑰的服務
TLS、憑證機構(CA)連線加密;替伺服器憑證背書的單位
gp3、io1一般用途 SSD;可以指定效能但較貴的 SSD
IOPS每秒讀寫次數
快照(snapshot)整個磁碟某一刻的備份
時間點還原(PITR)用快照加交易記錄,還原到指定的時間
雙可用區域(Multi-AZ)另一個可用區域有一台同步備援,故障時自動接手
讀取副本(read replica)可以讀的非同步副本
Blue/Green 部署複製一套環境同步、升級後切換,縮短停機
標準支援、Extended SupportAWS 免費維護某大版本的期間;過期後付費延長
維護時段(maintenance window)每週一段允許 AWS 動手的時間
跳板機(bastion)放在 VPC 裡、讓人轉接進去的小主機

22. 來源

建立與修改

網路與連線

帳號、密碼與加密

參數、版本與維護

儲存、備份與高可用

監控與費用