Amazon-Rds

如何將現有 RDS 實例關聯到 Elastic Beanstalk 環境?

  • August 30, 2019

我在創建 Elastic Beanstalk 環境之前創建了我的 RDS 實例。兩者一起工作沒有問題,但我希望將它們連結在一起,並通過RDS_*環境變數訪問 RDS 參數。

Elastic Beanstalk 配置頁面說:

您沒有數據庫。 您可以創建新的 RDS 數據庫或使用現有數據庫。

雖然第一個連結就地創建了一個 RDS 實例並將其連結到目前環境,但第二個連結只是重定向到此文件頁面。,不幸的是,它只解釋瞭如何創建一個新的 RDS 實例,而不是如何連結現有的實例。

如何將現有 RDS 實例關聯到我的 Elastic Beanstalk 環境?

AWS 支持人員的回答:

為了將現有數據庫與 EB 環境相關聯,您必須通過管理控制台對其進行快照,然後在數據層下選擇“創建新的 RDS 數據庫”。由於 RDS 實例綁定到 Beanstalk 環境的底層 Cloudformation 堆棧的方式,似乎沒有一種方法可以將正在執行的 RDS 實例與現有的 EB 環境相關聯,而無需從快照中啟動新的實例。如果您拍攝目前 RDS 實例的快照,您可以根據需要在 EB 中重新啟動它。

如果您希望 RDS 實例存在於環境之外,您只需通過 EB 控制台將連接參數作為環境變數提供:配置 -> Web 層 -> 軟體配置。然後,您可以通過 PHP 讀取環境變數

“選擇”的答案是正確的,但我想添加一些額外的資訊,因為大多數同時使用 EB 和 RDS 的人也應該有相同的要求——即使他們還不知道。

第一個問題:為什麼要RDS實例存在於EB環境之外? :這樣 RDS 實例的生命週期與 EB 環境的生命週期無關。即當你刪除一個環境時,你不想用它破壞數據庫。您想要將 RDS 實例實際綁定到您的環境的原因很少。

獨立於 EB 設置 RDS 的一個問題是您不會自動填充 RDS_* 變數,因此需要檢索它們的值並通過 Web 控制台或 .ebextensions 自行填充它們。不過,不建議您在程式碼中添加憑據,因為這可能是一個安全漏洞。

但是,下一個問題是,如果您想以程式方式創建環境(例如藍綠零停機部署),那麼您需要一個解決方案來解決如何每次都填充敏感的 RDS 值(例如密碼)。不幸的是,這需要您進一步降低 AWS 堆棧並使用 CloudFormation 模板。

理想的解決方案是對 EB 的增強,以便問題中提到的“使用現有數據庫”連結實際上允許您手動關聯現有 RDS 數據庫,然後再次自動填充 RDS_* 環境變數,而不是將您重定向到無用的文件. AWS Support 表示,這已作為一項功能請求提出,但當然沒有給出時間表。

引用自:https://serverfault.com/questions/540828