引言
Amazon Web Services 的關係型資料庫服務 (RDS) 因其靈活性和強大的功能集而成為流行的資料庫託管選項。開發團隊可以為個人使用、staging 環境和生產工作負載預置新資料庫,並將其與 AWS 的其他產品套件無縫整合。
在本指南中,我們將討論如何使用 Amazon 的 RDS 配置一個生產級的 PostgreSQL 資料庫。我們將詳細介紹建立過程中的重要選項,討論權衡,並配置一個專為早期生產部署設計的可靠、健壯的資料庫設定。
為何選擇 Amazon Web Services 的 RDS?
在開始之前,讓我們簡要談談為什麼 AWS 的關係型資料庫服務可能適合許多團隊。
RDS 作為一項服務於 2009 年首次釋出,是針對 MySQL 資料庫的可配置、託管服務。PostgreSQL 支援於 2013 年新增,使該平臺有充足時間在新功能釋出和更多用例得到考慮後穩定和成熟。
使 RDS 成為一個有吸引力的選項的一些核心功能包括:
- 部署到不同的物理位置(多可用區):在物理上獨立的資料庫中心建立活動或備用副本,以在發生基於位置的中斷時提高可用性和可靠性
- 與 AWS IAM 安全模型整合:利用現有的訪問控制和身份功能,在資料庫和客戶端應用程式之間配置身份驗證、授權和基於角色的訪問策略。
- 可配置的備份、加密和監控:使用平臺整合的備份、可觀測性工具和加密,以降低並集中管理資料庫的運營成本。
- 按使用量計費:成本與資料庫的功能和使用量直接掛鉤,減輕了長期容量規劃的不確定性。
考慮到這些優勢,讓我們開始設定一個 PostgreSQL 資料庫例項,逐步完成整個過程。
開始資料庫建立過程
首先,使用您的 AWS 憑證登入到您的 Amazon Web Services 控制檯。如果您尚未註冊 AWS,可以現在按照他們的註冊流程進行。
在 AWS 控制檯主頁,在服務搜尋欄中輸入 rds 以找到 RDS 服務
點選服務下的 RDS 以進入 Amazon RDS 主頁
向下滾動直到您看到建立資料庫部分,然後點選建立資料庫
您將被帶到資料庫建立頁面,在那裡您可以選擇所需的配置。
在本指南的其餘部分,我們將介紹可用的不同選項,併為生產級配置提供建議。
配置標準 PostgreSQL 部署選項
RDS 建立過程的第一部分決定了您希望如何配置資料庫,以及新資料庫的基本屬性,如資料庫引擎、部署型別和基本配置。我們開始吧。
配置建立方法
在 RDS 上預置新資料庫的第一步是選擇建立方法
雖然簡易建立方法可以幫助您選擇一些合理的預設設定,但它無法提供您在為環境配置重要資料庫時可能需要的靈活性。標準建立選項提供了更多選項,並且仍然是一個相對簡單的過程。
選擇標準建立,以便您對建立過程擁有完全控制權。
選擇 PostgreSQL 引擎和版本
接下來,選擇資料庫引擎
在本指南中,我們將配置一個 PostgreSQL 資料庫,因此我們將選擇 PostgreSQL 選項。Amazon 的 Aurora 是一個 PostgreSQL 相容的替代選項,提供 Amazon 自有的擴充套件和管理功能。然而,在本指南中,我們將專注於 PostgreSQL 原生部署。
選擇您希望使用的 PostgreSQL 版本。預設選擇的版本通常是安全的,但您可能也希望選擇最新版本以獲取新功能,或者根據與應用程式庫的相容性選擇舊版本。
選擇生產模板
接下來,您將被要求選擇一個模板
模板旨在提供與典型部署場景匹配的預選選項。由於我們正在預置生產資料庫,請選擇生產模板。
設定資料庫可用性
下一節包括您在部署方面需要做出的第一個重要決定:資料庫的可用性和永續性
本節精確地決定了您的資料庫在 AWS 環境中的部署方式。這會影響您的設定對故障和中斷的抵抗能力,包括您的特定例項故障和亞馬遜基礎設施的區域中斷。
讓我們看看我們擁有的各種選項、它們提供什麼以及它們適用於哪些場景。對於本指南,我們將推薦使用單個數據庫例項,因此如果您對其他選項不感興趣,可以隨意跳過。
多可用區資料庫叢集
最安全、最健壯且最昂貴的選項是多可用區資料庫叢集。
這會配置一個 PostgreSQL 叢集,包含一個主資料庫例項和兩個只讀備用副本,每個副本部署在不同的物理位置。此選項有助於在發生故障時防止資料庫中斷,同時透過副本提高可用讀取吞吐量。
話雖如此,此選項也非常昂貴,因為您必須為部署到不同可用區的三個獨立資料庫例項付費。
如果您的資料庫停機時間直接導致收入的顯著損失,這可能是一個不錯的選擇。如果您的典型資料庫使用模式是讀取密集型的,那麼讀取 IO 的增加也值得注意。如果這與您的用例匹配,您可能還需要考慮評估 Amazon Aurora,以獲得類似級別的可用性,最終成本可能更低。
多可用區資料庫例項
此選項將您的資料庫部署為一個活動主例項以及一個在不同可用區中的備用副本。備用副本將保持最新狀態,以便在主例項發生中斷時,可以觸發故障轉移,並且備用副本可以承擔主例項的職責。
與上面討論的多可用區資料庫叢集不同,多可用區資料庫例項只有一個備用副本。此外,備用副本只能用於其備用容量。它不支援只讀工作負載。
如果您希望獲得一定的可用性保護,而無需更高的讀取吞吐量,此選項可能是一個不錯的選擇。您將不得不承擔兩個資料庫例項的成本,因此價格會高於單個例項。如果停機時間對您的運營來說非常昂貴,這可能是一個很好的選項,可以在發生中斷時防止可用性中斷。
單個數據庫例項
單個數據庫例項是在一個可用區內對單個數據庫的標準部署。這不提供額外的可用性,意味著您的資料庫可用性直接取決於資料庫例項的正常執行時間。如果它出現問題,您的資料庫及其管理的所有資料將無法訪問,直到服務恢復。
考慮到這一點,此選項也是最經濟的。部署只包含一個例項,因此沒有額外部署的資源需要您付費。
此選項存在一定風險,但對於許多用例而言,這種風險是可接受的,並且緩解風險的成本過高。Amazon RDS 在可靠性方面有著良好的記錄,即使在單個可用區內也是如此,因此對於許多用例來說,短期停機的可能性是可接受的。
在本指南中,我們將選擇單個數據庫例項,因為它通常足以滿足對停機時間不極其敏感的生產部署。但是,如果您的收入和聲譽與資料庫的正常執行時間密切相關,那麼考慮不同的選擇可能更明智。
配置基本設定
下一節允許您配置部署的基本設定
首先,您可以透過設定資料庫例項識別符號來命名您的資料庫例項。選擇一個獨特的名稱,這將有助於您在 AWS 控制檯中顯示資料庫時瞭解其角色和用途。
接下來,配置您的資料庫例項的憑證。首先設定您的 PostgreSQL 資料庫的主使用者名稱。預設情況下,大多數 PostgreSQL 客戶端工具假定主使用者名稱為 postgres,因此如果合適,您可以保留該使用者名稱。
注意:主使用者名稱是 PostgreSQL 資料庫例項中的主要管理賬戶。在預置資料庫例項後,您應始終建立並配置具有有限許可權的額外應用程式專用使用者名稱。配置您的資料庫客戶端和應用程式使用這些許可權較低的身份進行日常操作。僅在初始配置時和建立更多受限、範圍更窄的訪問途徑時使用主使用者名稱。
然後,您可以選擇為主使用者名稱設定並確認密碼。您可以選擇一個強密碼(最好是機器生成的),或者勾選自動生成密碼框,讓 AWS 自動為您生成一個安全密碼。
如果您選擇自己的密碼,請將其儲存在安全的地方,因為以後將無法找回。同樣,如果您自動生成密碼,您將只能在建立後第一次在 AWS 控制檯中訪問憑證時獲取該密碼。請務必安全地記錄該密碼,因為之後將無法再次找回。
選擇資料庫例項型別
您需要做出的下一個主要決定是您的資料庫例項型別
本質上,資料庫的例項型別決定了您的資料庫將部署到的虛擬機器大小以及可用的資源。您可以選擇不同型別的例項,以及每種型別中資源的組合。
例項型別的三大主要類別是:
- 標準型:這些包括您可能熟悉的 AWS EC2(彈性計算雲)例項中的“m”系列。基本上,它們是平衡良好的通用例項,旨在提供合理的 CPU 與記憶體比。
- 記憶體最佳化型:這些包括 EC2 的“r”和“x”例項型別。此類別中的例項具有更高的記憶體與 CPU 比率,對於涉及一次性將大型資料集載入到記憶體中的資料庫操作非常有用。
- 突發型:這些例項的效能通常比其他型別稍低,但對於許多應用程式而言仍能佔據優勢。它們提供較低的基準 CPU 效能,但允許在峰值時突發更高效能。這使您可以在支付較低平均使用量的同時,仍能偶爾處理額外的工作負載。
您選擇的例項型別以及所需的具體資源配置高度依賴於您的應用程式使用模式。但是,我們可以提供一些通用指導來幫助您做出選擇。請記住,如果您的需求發生變化,您始終可以在以後擴充套件資料庫。
選擇資料庫例項型別的通用建議
通常,對於大多數關係型資料庫工作負載,RAM 往往比 CPU 更重要。因此,您不必因為擔心效能低下而完全排除突發型例項。它們提供了一些最佳的價效比,同時仍能提供合理的效能。
具體來說,如果您剛開始,像 db.t3.medium 這樣的例項(提供 2 個 vCPU 和 4 GiB 記憶體)對於許多用例來說是一個很好的基線選擇。CPU 應該能夠處理中等水平的活動,同時應對請求峰值。假設硬體效能適合您的專案,您可能會遇到的第一個限制是 2,086 Mbps 的網路上限,因此在做出決定時請記住這一點。
如果您需要為具有相當流量的標準資料庫提供更高水平的 CPU 效能,您可能需要考慮一個具有 2-4 個 vCPU 和 8-16 GiB RAM 的標準例項。根據宣傳,m6g 例項的價效比比舊的 m5 例項高出 40%,因此在選擇標準例項時,它們通常是更好的選擇。考慮到這一點,db.m6g.large 和 db.m6g.xlarge 例項是此例項型別不錯的起始選擇。
記憶體最佳化型資料庫例項主要適用於您知道需要將大量資料集載入到記憶體中的情況。這可能是因為您的表包含許多記錄,或者您經常查詢大量列。如果您大量使用 PostgreSQL 的 JSON 列,這可能是值得考慮的。話雖如此,通常最好從更標準的配置開始,如果發現這些資源不足,再更改例項型別。
配置儲存選項
接下來,您需要為資料庫例項配置儲存
選擇儲存型別
RDS 提供三種不同型別的儲存,適用於不同場景
- 通用型 SSD (gp2):這是一種標準的固態硬碟選項。您的儲存裝置可用的 IOPS(每秒輸入/輸出運算元)直接與您分配的空間大小相關。基準 IOPS 設定為每 GiB 分配 3 IOPS,並能在短時間內突發到 3,000 IOPS。
- 預置 IOPS SSD (io1):此選項允許您將儲存空間量與分配給資料庫的 IOPS 解耦。
- 磁介質:磁介質儲存使用傳統的旋轉磁碟而不是 SSD。
通常,幾乎總是最好從通用型 SSD 選項開始。這允許您設定所需的空間量並將資料庫部署在 SSD 上。磁介質選項很少是好的選擇,因為它速度較慢且限制在 1000 IOPS。
如果您已經進行了相當嚴格的應用程式效能分析,並且對您的環境在各種工作負載下產生的 IOPS 量有了很好的瞭解,那麼預置 IOPS SSDs 是一個不錯的選擇。由於快取和其他可以降低實際訪問驅動器操作量的機制,這個數字也往往低於預期。通常,將此視為一種高階選擇,一旦您有了長期執行精確配置的經驗,它可能就會變得合適。
選擇初始儲存空間
選擇儲存型別後,選擇要分配的儲存量。這同樣高度依賴於您的應用程式。然而,一般來說,人們傾向於高估初期所需的空間量。建議從較小量開始,並記住您始終可以進行擴充套件。
配置自動擴縮
接下來,選擇是否啟用自動擴縮。此選項允許您的儲存空間隨使用情況自動擴縮。這通常是個好主意,因為它允許您以更實惠的價格從較小的初始分配開始,然後隨著資料增加自動增加儲存空間。您可以配置最大擴縮量,以確保您不會擴縮到超出您接受範圍的大小。
通常,初始分配從 20 到 100 GiB 之間就足夠了(通常取決於什麼能為您提供足夠的 IOPS),然後將您的最大儲存閾值設定為您願意支付的最大大小。
確定連線策略
配置儲存後,您需要做出的下一個重要決定是關於資料庫的連線性
本節包含許多不同的選項,如果您不熟悉 AWS 的安全和網路模型,可能會感到困惑。
我們在此為適合生產環境的部署推薦的通用策略是為每個可用選項建立新例項,而不是重用現有選項。如果您將資料庫部署到應用程式已在執行的現有環境中,您可能需要調整此策略,但對於新部署而言,此通用規則提供了最隔離和最安全的方法。
配置 VPC
當被要求選擇部署資料庫的虛擬私有云 (VPC) 時,通常最好將其部署到新的 VPC 或包含將訪問它的應用程式的 VPC 中。通常不建議部署到預設 VPC,因為它意味著您的資料庫將受您對預設網路環境所做的任何調整的影響。
選擇子網組
接下來,您需要選擇子網組。這定義了您的資料庫可能部署在 VPC 中的 IP 範圍。通常,在這裡也建立一個新組是個好主意。
決定是否允許公共訪問
您必須做出的最重要選擇之一是是否允許公共訪問您的資料庫例項。這主要取決於您的安全要求以及您為資料庫配置特殊訪問許可權的能力。
最安全的方法是關閉公共訪問。這隻允許您的資料庫被部署在與您的資料庫相同網路環境中的例項訪問(或透過其訪問)。要從外部訪問您的資料庫,您需要配置一個跳轉主機或一個具有外部訪問許可權的網際網路閘道器,以驗證並將外部連線路由到您的資料庫。如果您不熟悉基礎設施配置或網路規則管理,這可能是一項重要的任務。
另一種方法是允許公共訪問。這將使您的資料庫例項可以從公共網際網路訪問。它的安全性較低,因為任何人都可以嘗試連線到您的資料庫,但它確實允許從外部連線進行更簡單的訪問模式。如果您選擇此選項,請確保您的所有資料庫密碼都非常強大且頻繁輪換。您可能會在日誌中看到外部嘗試訪問您的服務,因此密碼強度至關重要。
選擇是否啟用公共訪問比最初看起來更復雜。如果您啟用公共訪問,您仍然可以將訪問許可權鎖定到一組特定的外部 IP 地址,並提供其他配置點來過濾掉不合法的連線嘗試。一般來說,最好選擇您長期能夠支援的最安全配置。
選擇 VPC 安全組
VPC 安全組控制連線到其中部署的例項的訪問規則。這些基本上是類似防火牆的訪問控制策略,有助於限制可以連線到資料庫例項的連線型別。
建立一個新的 VPC 安全組,除非您已經為生產資料庫用途配置了一個。選擇一個有助於您記住安全組在 AWS 控制檯中顯示時的重點和角色的名稱。
選擇可用區和埠
您可以選擇當前區域內的可用區來部署資料庫例項。如果您沒有偏好,可以隨意選擇“無偏好”。
如果您開啟“附加配置”選項,您可以選擇更改 PostgreSQL 監聽的埠。更改此項可以幫助減輕開放例項連線日誌中的一些“噪音”,但它不會提供任何顯著的安全改進,並且可能使連線更加繁瑣。
設定資料庫身份驗證
接下來,您需要選擇要用於資料庫例項的身份驗證型別
選項包括:
- 密碼認證:使用 PostgreSQL 原生能力的標準密碼認證。
- 密碼和 IAM 資料庫認證:同時使用 PostgreSQL 的原生密碼能力和AWS IAM 角色進行認證。作為使用資料庫密碼的替代方案,您可以選擇使用 IAM 認證令牌對資料庫例項進行認證。
- 密碼和 Kerberos 認證:同時使用 PostgreSQL 的原生密碼功能以及使用AWS Directory Service建立的 AWS 託管式 Microsoft Active Directory 例項。如果您的組織已在使用 AWS 託管式 AD 例項,這允許您透過票據使用 Kerberos 風格的認證。
一般來說,除非您需要更復雜的配置,否則僅使用密碼認證是合理的。如果您深度依賴 AWS 生態系統併為基礎設施的許多其他部分使用基於 IAM 的認證,那麼 IAM 資料庫選項可能很有吸引力。除非您已經將 Kerberos 服務用於其他目的,否則不值得選擇 Kerberos 選項。
配置備份、加密、監控等
如果您展開附加配置部分,您將有機會配置一些其他選項。我們將在本節中介紹這些選項。
資料庫選項
第一個附加部分允許您為 PostgreSQL 配置一些額外選項
如果您願意,可以選擇讓 RDS 自動為您的部署建立一個初始資料庫。這通常是不必要的,因為您執行的任何遷移或其他設定指令碼通常都會在例項中建立必要的資料庫結構。
您有時還可以為您的例項選擇一個資料庫引數組。這裡可能無法進行多項選擇,這取決於您之前所做的選擇以及您是否在建立過程之外配置了引數組。如果存在,它們允許您更改應用於此例項的 PostgreSQL 引數。
PostgreSQL 不支援選項組,因此該下拉選單將不處於活動狀態。
備份
接下來您可以配置與自動資料庫備份相關的選項
如果您想啟用自動備份,請勾選啟用自動備份框。這將告訴 AWS 自動為您的資料庫例項拍攝每日時間點快照,您可以使用這些快照進行恢復。值得注意的是,雖然本頁未提及,但備份將儲存在 AWS 的簡單儲存服務 (S3) 中,您將需要為它們消耗的空間付費。
預設情況下,備份保留視窗設定為 7 天,這意味著您將能夠恢復過去 7 天內拍攝的資料庫快照。如果您正在使用此功能,您可能希望將保留期增加到 14 天,以便有更多時間發現不必要的更改。但請記住,增加保留期將導致額外的儲存成本增加。
如果您對備份發生時間有任何偏好,可以選擇一個合適的時間視窗,否則,保留“無偏好”是安全的。
勾選“將標籤複製到快照”以便更容易在 S3 中找到相應的快照。
如果您需要額外的保護,您還可以選擇備份複製,將您的更改自動複製到不同的 AWS 區域。這將允許您從不同區域快速恢復,但會增加您的 S3 儲存成本和資料傳輸成本。
加密
接下來,您可以為資料庫例項配置磁碟上的加密
為例項啟用加密以增加安全性幾乎總是一個好主意。
通常,您可以使用預設的 AWS KMS 金鑰進行此操作,除非您有其他要求,例如加密到由不同 AWS 賬戶使用的金鑰。
效能分析
接下來,為您的例項配置效能分析
效能分析是一項功能,可幫助您除錯 RDS 例項中的效能問題。預設情況下,分析資料將免費保留 7 天。您也可以選擇將資料長期儲存 2 年,但這會根據您的 CPU 例項型別產生額外費用。
同樣,您可以將此加密的預設 AWS KMS 金鑰保持選中狀態,除非您有特殊要求。
監控和日誌
接下來,您可以配置資料庫的監控和日誌
一般來說,啟用監控有助於您更好地瞭解資料庫例項及其效能。
至於匯出日誌,通常預設停用它是安全的,除非您需要它。您的應用程式日誌通常會根據需要顯示特定於資料庫的資訊,但如果您覺得有幫助,可以隨時啟用 PostgreSQL 日誌匯出。日誌將匯出到AWS CloudWatch Logs。
維護和刪除保護
維護和刪除保護部分完成了附加配置
通常認為自動升級 PostgreSQL 的次要版本是安全的。次要版本不應包含破壞性更改,並且升級應相對無縫地執行。如果您有偏好,請選擇一個升級視窗。
為您的生產資料庫啟用刪除保護總是一個好主意。這透過要求您在成功處理刪除之前恢復此選項,從而防止您意外刪除資料庫例項。對於大多數用例來說,沒有合理的理由選擇退出此選項。
完成配置
我們終於完成了配置過程。在頁面底部,您可以看到已配置資料庫例項的每月成本估算
請特別注意估算下方的文字,其中重申顯示的成本計算不包括備份儲存、IO 或資料傳輸的成本。如果不考慮並限制這些額外成本,它們可能會相當可觀,因此在繼續之前,請確保您接受這些額外費用。
準備好後,點選頁面底部的建立資料庫
您的資料庫例項將根據您的配置進行預置。這可能需要幾分鐘才能完成,具體取決於您選擇的例項大小和啟用的選項。
當您的例項準備就緒時,它將顯示在 RDS 控制面板的資料庫部分
檢視自動生成密碼
如果您配置了 AWS 自動生成密碼,您將在螢幕頂部看到類似這樣的通知
點選檢視憑證詳情以獲取密碼
請注意,這是您唯一一次可以訪問此密碼,如果您丟失了它,則必須重新生成。
檢視其他連線資訊
對於其餘連線資訊,點選例項名稱。
在連線與安全選項卡中,您可以在左側找到資料庫的端點和埠號
在此示例中,我們的端點名稱(主機 URL)是 production-db1.cddm7tgh3j5j.us-east-1.rds.amazonaws.com,我們的資料庫正在監聽 PostgreSQL 的標準埠:5432。
要找到您配置的主使用者名稱(如果您未修改,則為 postgres),請訪問配置選項卡,並在可用性標題下查詢主使用者名稱欄位
如果您配置了初始資料庫,也可以在該選項卡左側找到其名稱。
有了這些資訊,您就可以連線到您的 PostgreSQL 例項了。例如,要連線到此處顯示的例項,您可以使用以下連線 URI
postgresql://postgres:Pa38iSJWm8qtq90LnmZ8@production-db1.cddm7tgh3j5j.us-east-1.rds.amazonaws.com:5432/postgres
您可以從我們關於PostgreSQL 連線 URI的指南中瞭解更多如何根據連線詳情構建連線 URI。
總結
在本指南中,我們介紹瞭如何使用亞馬遜的 RDS 託管資料庫服務建立生產級的 PostgreSQL 資料庫例項。儘管有很多選項可供探索,並且您的選擇將根據專案和環境的需求而異,但我們試圖在這裡提供一個合理的起點,並提供足夠的資訊,以便您做出明智的決定。
隨著您的需求變化,請記住您可以擴充套件資料庫例項以適應新的使用模式。利用從監控資訊和擴充套件日誌中收集的資料來決定您的資料庫需求如何演變。
在 Amazon RDS 上配置 PostgreSQL 例項後,您可以使用 Prisma Client 連線和管理它。透過在 PostgreSQL 資料庫聯結器設定中將 url 引數指向您的 RDS 例項來配置對資料庫例項的訪問。


























