play framework application java amazon-ec2 playframework amazon-rds

java - application - play framework web server



Conexión EC2 a RDS usando Play framework (4)

No sé nada sobre ninguno de estos frameworks (o Java en general), pero sí tengo alguna experiencia con estos dos servicios de Amazon. ¿Podría ser posible que estos frameworks se comuniquen usando diferentes protocolos o en diferentes puertos? Si es así, aún podría ser un problema de seguridad.

Si esta es una posibilidad, vaya a EC2> Grupos de seguridad y, si no tiene estas tres líneas, intente agregarlas:

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

("grupo predeterminado" es el nombre predeterminado, y lo que llamé mío, pero el nombre de tu grupo puede ser diferente; en cualquier caso, asegúrate de que sean el nombre del grupo y no "0.0.0.0/0")

Además, si conoce protocolos / puertos particulares que necesita abrir, entonces obviamente también agréguelos.

Tengo un sitio pequeño que construí utilizando el marco de reproducción que estoy tratando de ejecutar en un servidor EC2 contra una instancia de Amazon RDS. Puedo ejecutar la aplicación en mi máquina contra la instancia de RDS y todo funciona bien. Pero cuando lo despliegue en mi servidor EC2, obtiene este error:

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

Mi primer pensamiento fue que era algún tipo de configuración de seguridad, pero tengo una aplicación basada en Spring que se ejecuta en Tomcat en el mismo servidor EC2 que se conecta a la misma instancia RDS con el mismo nombre de usuario y contraseña, y funciona muy bien. Solo la aplicación Play tiene problemas de conexión.

Parece que no puedo encontrar ninguna explicación sobre por qué sucede esto o ideas sobre cómo solucionarlo.

¿Alguien ha visto algo como esto antes?


Su error podría ser causado por una cantidad de cosas, y parece estar sucediendo en un nivel inferior de la pila de protocolos de lo que está mirando. Recomiendo ejecutar un analizador de paquetes (como wireshark ) en el servidor de envío para tratar de descubrir qué está pasando. Tal vez los paquetes no están llegando allí? ¿Tal vez su cliente está confundiendo algo debido al diferente entorno en el que se encuentra? Un sniffer de paquetes puede ser invaluable para desentrañar el misterio de la desconexión.

Si su servidor no tiene cabeza, o no puede reenviar una sesión gráfica, siempre puede usar una herramienta de línea de comandos, como tcpdump en los sistemas * nix.


El problema es con el archivo application.conf. Si especifica su DB local de esta manera:

db=mysql:root:pass@db

y su prod DB así:

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

Obtendrá este error cuando intente ejecutar en producción porque Play! en realidad está tratando de usar el db = mysql: root: pass @ db param para conectar, ya que los parametros de prod no anulan ese parámetro de forma específica. Para solucionar esto, asegúrese de conectarse al DB de la misma manera localmente y en prod. Esto funcionó para mí:

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


He hecho la misma pregunta aquí

Conectividad de Amazon RDS y Elastic Beanstalk

Lo más probable es que su problema se solucione después de agregar el grupo de seguridad "elasticbeanstalk-default" en el grupo de seguridad predeterminado de RDS