Mysql

AWS EB 和 RDS:引擎名稱 mysql 和儲存類型 gp2 的儲存大小無效

  • June 25, 2018

我正在嘗試將我的 (python/django) 應用程序部署到 AWS Elastic Beanstalk,但出現錯誤。在過去的幾個月裡,部署一直執行良好,所以我很困惑可能是什麼原因。這是錯誤:

ERROR: Updating RDS database named: aa1xxxxxxxxx failed Reason: Invalid storage size for engine name mysql and storage type gp2: 5

有人幫助我完成了最初的 EB+RDS 設置,所以我不是 100% 熟悉從一開始就設置所有這些。但是,現在當我進入 AWS 控制台時,我看到一個storage欄位設置為的 RDS 實例,100GiB當我進入 EB 配置時,我看到與現有 RDS 實例的連接,但storage此處僅顯示5 GB. 我嘗試將 5GB 更新到 10GB,但仍然出現相同的錯誤,並且部署仍然無法正常工作。

此外,Endpoint我的 EB 數據庫設置中的 url 看起來與我的 RDS 實例的端點 `aa1xxxx.yyyyyyyyy.us-west-2.rds.amazonaws.com 的 url 相同。

AWS RDS 設置

AWS Elastic Beanstalk 數據庫配置

注意:我發現了這個執行緒,它與我的情況相似,但不完全是我的情況,因為我能夠編輯儲存欄位,即使那不起作用。

看起來 RDS 實例已在 Elastic Beanstalk 之外進行了修改 - 這意味著 EB 認為真實的配置數據與實際真實的配置數據不再匹配。這是使用 Elastic Beanstalk 等工具時的常見問題 - 它只是其他 AWS 服務的包裝器(對於一組非常特定的 CloudFormation 模板,它實際上是一個不錯的 UI),沒有什麼可以阻止您訪問 RDS 控制台並擺弄在 EB 配置它們後自行設置。

gp2MySQL 實例的最小儲存大小為 20GB,因此您收到此錯誤的原因是因為您的 EB 環境的 5GB 儲存大小配置與 RDS 實例上設置的儲存類型沖突。EB 認為儲存類型具有磁性,因此不會強制執行其他儲存類型設定的限制。發出該錯誤的不是 Elastic Beanstalk,而是位於 EB 後面的 CloudFormation 堆棧將 EB 控制台最終控制的所有內容聯繫在一起。

為了解決此問題,您需要將 Elastic Beanstalk 的環境設置為盡可能接近 RDS 實例的配置。我不相信 Elastic Beanstalk 可以從預設磁性配置修改 RDS 實例的儲存類型。所以,你有兩個選擇:

  1. 將您的 EB 配置中的儲存大小設置為 100GB 並保存它,這應該使 EB 有效地與事實同步。當它應用時,它會告訴 CloudFormation 調整數據庫的大小。現在這是否真的會降低實例的大小以調整大小,因為“新”儲存大小與目前大小相同,我不確定。它也可能會拋出錯誤,因為新尺寸 == 舊尺寸。您可以將其修改為最小 20GB(如果您想要更低),這將調整實例大小,並確保您在 RDS 上的儲存大小與 Elastic Beanstalk 的配置相匹配。您只需要記住,由於儲存類型限制,您不能低於 20GB。
  2. 手動將您的 RDS 實例大小重新調整為 5GB 的磁儲存和大小 - Elastic Beanstalk 認為這是事實。當然,這只有在您的數據庫足夠小以適合 5GB 實例時才有效。如果不是,那麼您在這裡不走運,並且可能值得探索選項#1。如果合適,此操作會將您的數據庫大小調整回 Elastic Beanstalk 目前認為的大小,然後您將能夠使用 EB 的配置工具再次調整數據庫大小。

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