Я новичок в Elastic Beanstalk и не очень разбираюсь в администрировании серверов, но мне нужно настроить проект Django на Elastic Beanstalk для подключения к внешней базе данных RDS MySQL.
Я создал отдельную База данных RDS MySQL, и я могу без проблем подключиться к ней с помощью Sequel Pro на моем компьютере. Затем у меня есть проект Django, который я пытаюсь поместить в Elastic Beanstalk, но, к сожалению, безуспешно. Если я запустил локальный сервер Django со своего компьютера, проект будет доступен для просмотра и Amazon RDS MySQL будет доступен. Однако, когда я запускаю
eb deploy
, я получаю
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server
on 'myapp-staging.xxx.eu-west-1.rds.amazonaws.com' (110)")
(ElasticBeanstalk::ExternalInvocationError)
. Если я вхожу на сервер EC2 через SSH
eb ssh
, а затем проверяю открытые порты с помощью
netstat -lntu
, я не вижу там порта MySQL 3306, поэтому я думаю, что это заблокирован брандмауэром.
Вот что я пробовал в отношении разрешений:
Затем я попытался повторно развернуть, перезапустить серверы и даже перестроить среду, но ничего не помогло. Порт 3306 MySQL по-прежнему не открыт в экземплярах EC2, созданных Elastic Beanstalk.
Что я делаю неправильно или что отсутствует?
Похоже, в конфигурации было два недостающих пункта:
Мне пришлось воссоздать среду Elastic Beanstalk, чтобы она находилась внутри того же виртуального частного облака (VPC), что и база данных RDS. Это можно сделать следующим образом:
eb create myapp-staging --vpc
, а затем ответил на некоторые вопросы, например, что такое идентификатор VPC.
Мне пришлось ввести VPC CIDR (IP) в разрешенные входящие соединения для MySQL для группы безопасности "rds-launch-wizard":
a) Перейдите в Панель управления VPC -> Ваши VPC и скопируйте CIDR VPC.
б) Перейдите в Панель управления VPC -> Группы безопасности и выберите группу «rds-launch-wizard», затем отредактируйте правила для входящих подключений и добавьте это правило:
MySQL / Аврора (3306) | TCP (6) | 3306 |
Без использования пользовательского VPC, самый простой способ добавить существующую группу безопасности в экземпляры EB EC2 - это использовать простую конфигурацию, описанную в https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config
Например:
$ cat .ebextensions/securitygroup-addexisting.config
option_settings:
- namespace: aws:autoscaling:launchconfiguration
option_name: SecurityGroups
value: rds-launch-wizard-1