Назад | Перейти на главную страницу

AWS EB и RDS: недопустимый размер хранилища для имени механизма mysql и типа хранилища gp2

Я пытаюсь развернуть свое приложение (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, я вижу экземпляр RDS с storage поле установлено на 100GiB и когда я захожу в конфигурации EB, я вижу соединение с моим существующим экземпляром RDS, но storage здесь только показывает 5 GB. Я попытался обновить 5 ГБ до 10 ГБ, но все равно получаю ту же ошибку, и развертывание по-прежнему не работает.

Так же Endpoint в моих настройках базы данных EB выглядит так же, как URL-адрес конечной точки моего экземпляра RDS `aa1xxxx.yyyyyyyyy.us-west-2.rds.amazonaws.com.

Настройки AWS RDS

Конфигурации базы данных AWS Elastic Beanstalk

Примечание: я нашел это нить, что было похоже, но не совсем в моей ситуации, поскольку я мог редактировать поле хранилища, хотя это не сработало.

Похоже, что экземпляр RDS был изменен за пределами Elastic Beanstalk - это означает, что данные конфигурации между тем, что EB считает истинным, и тем, что действительно истинно, больше не совпадают. Это обычная проблема при использовании таких инструментов, как Elastic Beanstalk - это просто оболочка для других сервисов AWS (на самом деле это хороший пользовательский интерфейс для очень специфического набора шаблонов CloudFormation), и ничто не мешает вам перейти на консоль RDS и возиться с самостоятельно, как только EB их предоставит.

gp2 имеет минимальный размер хранилища 20 ГБ для экземпляров MySQL, поэтому вы получаете эту ошибку, потому что конфигурация размера хранилища 5 ГБ в вашей среде EB конфликтует с типом хранилища, установленным в экземпляре RDS. EB считает, что тип хранилища является магическим, поэтому не будет применять ограничения, установленные другими типами хранилища. Эту ошибку выдает не Elastic Beanstalk, а стек CloudFormation, расположенный за EB, который связывает воедино все, чем в конечном итоге управляет консоль EB.

Чтобы решить эту проблему, вам нужно настроить среду Elastic Beanstalk так, чтобы она максимально соответствовала тому, на что настроен ваш экземпляр RDS. Я не верю, что с помощью Elastic Beanstalk можно изменить тип хранилища экземпляра RDS из магнитной конфигурации по умолчанию. Итак, у вас есть 2 варианта:

  1. Установите размер хранилища в конфигурации EB на 100 ГБ и сохраните его, это должно эффективно синхронизировать EB с правдой. Когда это применимо, он скажет CloudFormation изменить размер базы данных. Теперь я не уверен, действительно ли это приведет к отключению экземпляра для изменения размера, поскольку «новый» размер хранилища совпадает с текущим размером. Это также может вызвать ошибку, потому что новый размер == старый размер. Вы можете изменить его до минимального 20 ГБ (если вы хотите пойти намного ниже), что приведет к изменению размера экземпляра и гарантирует, что размер вашего хранилища в RDS совпадает с размером конфигурации Elastic Beanstalk. Вам просто нужно иметь в виду, что вы не можете опуститься ниже 20 ГБ из-за ограничения типа хранилища.

  2. Измените размер вашего экземпляра RDS вручную до магического хранилища и размера 5 ГБ - до того, что Elastic Beanstalk считает правдой. Это, конечно, будет работать только в том случае, если ваша база данных достаточно мала, чтобы поместиться в экземпляр 5 ГБ. Если это не так, вам здесь не повезло, и, вероятно, стоит изучить вариант №1. Если он подойдет, это действие вернет размер вашей базы данных к тому, что, по мнению Elastic Beanstalk, в настоящее время, и затем вы снова сможете изменить размер своей базы данных с помощью инструментов конфигурации EB.