EC2-подключение к RDS с использованием Play Framework - PullRequest
7 голосов
/ 28 августа 2010

У меня есть небольшой сайт, который я создал с использованием инфраструктуры Play, который я пытаюсь запустить на сервере EC2 с экземпляром Amazon RDS. Я могу запустить приложение на своем компьютере с экземпляром RDS, и все работает отлично. Но когда я развертываю его на своем сервере EC2, он получает эту ошибку:

The last packet successfully received from the server was 1,282,977,731,085 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.
        at play.db.DBPlugin.onApplicationStart(DBPlugin.java:87)
        at play.Play.start(Play.java:381)
        at play.Play.init(Play.java:247)
        at play.server.Server.main(Server.java:85)
Caused by: java.net.ConnectException: Connection refused

Сначала я подумал, что это была какая-то настройка безопасности, но у меня есть приложение на базе Spring, запущенное в Tomcat на том же сервере EC2, которое подключается к тому же экземпляру RDS с тем же именем пользователя и паролем, и оно работает просто отлично. Только приложение Play имеет проблемы с подключением.

Я не могу придумать объяснения, почему это происходит, или идеи о том, как это исправить.

Кто-нибудь видел что-нибудь подобное раньше?

Ответы [ 4 ]

2 голосов
/ 16 июня 2011

Проблема с файлом application.conf. Если вы укажете свою локальную базу данных следующим образом:

db=mysql:root:pass@db

и ваша база данных, например:

%prod.db.url=jdbc:mysql://<your-db-ip>:3306/db
%prod.db.user=db_user
%prod.db.pass=db_pass

Вы получите эту ошибку при попытке запустить в производство, потому что Play! фактически пытается использовать для соединения параметр db = mysql: root: pass @ db, поскольку параметры prod не переопределяют этот параметр отдельно. Чтобы это исправить, обязательно подключитесь к БД таким же образом локально и в prod. Это сработало для меня:

db.url=jdbc:mysql://localhost:3306/db
db.user=root
db.pass=pass

%prod.db.url=jdbc:mysql://<your-db-ip>:3306/db
%prod.db.user=db_user
%prod.db.pass=db_pass
0 голосов
/ 21 апреля 2011

Ваша ошибка может быть вызвана любым количеством вещей, и кажется, что она происходит на более низком уровне стека протоколов, чем то, на что вы смотрите. Я рекомендую запустить анализатор пакетов (например, wireshark ) на отправляющем сервере, чтобы попытаться выяснить, что происходит. Может пакеты не попадают туда? Может быть, ваш клиент что-то путает из-за другой среды, в которой он находится? Анализатор пакетов может быть неоценимым для раскрытия тайны дисконнекта.

Если ваш сервер не используется или вы не можете переслать графический сеанс, вы всегда можете использовать инструмент командной строки, например tcpdump в * nix системах.

0 голосов
/ 14 июня 2011

Я задавал тот же вопрос здесь

Подключение Amazon RDS и Elastic Beanstalk

Скорее всего, ваша проблема будет исправлена ​​после того, как вы добавить группу безопасности «Flexiblebeanstalk-default» в группу безопасности RDS по умолчанию

0 голосов
/ 25 января 2011

Я ничего не знаю ни об одной из этих платформ (или о Java в целом), но у меня есть некоторый опыт работы с обеими этими сервисами Amazon - возможно ли, что эти платформы взаимодействуют с использованием разных протоколов или на разных портах?Если это так, это все еще может быть проблемой безопасности.

Если это возможно, перейдите в EC2> Группы безопасности и, если у вас нет этих трех строк, попробуйте добавить их:

All | icmp | -1 |    -1 | default group
All | tcp  |  0 | 65535 | default group
All | udp  |  0 | 65535 | default group

(«группа по умолчанию» - это имя по умолчанию, и то, что я назвал моим, но имя вашей группы может отличаться - в любом случае убедитесь, что это имя группы, а не «0.0.0.0/0")*»1006 *

Кроме того, если вам известны определенные протоколы / порты, которые нужно открыть, то, очевидно, добавьте их тоже.

...