¿Cómo asociar una instancia RDS existente a un entorno Elastic Beanstalk?


22

He creado mi instancia de RDS antes de crear mi entorno Elastic Beanstalk. Los dos están trabajando juntos sin ningún problema, pero me gustaría que estén vinculados entre sí y que los parámetros RDS sean accesibles a través de las RDS_*variables de entorno.

La página de configuración de Elastic Beanstalk dice:

No tienes una base de datos.  Puede crear una nueva base de datos RDS o usar una base de datos existente.

Aunque el primer enlace crea una instancia RDS en el lugar y lo vincula al entorno actual, el segundo enlace simplemente redirige a esta página de documentación. , que desafortunadamente solo explica cómo crear una nueva instancia de RDS, pero no cómo vincular una existente.

¿Cómo puedo asociar una instancia RDS existente a mi entorno Elastic Beanstalk?

Respuestas:


24

La respuesta "seleccionada" es correcta, pero quería agregar información adicional ya que la mayoría de las personas que usan EB y RDS juntas también deberían tener el mismo requisito, incluso si aún no lo saben.

Primera pregunta : ¿por qué querría que la instancia de RDS exista fuera del entorno EB? Respuesta : para que la vida útil de la instancia de RDS no esté vinculada a la vida útil del entorno EB. es decir, cuando elimina un entorno, no desea destruir el DB con él. Hay muy pocas razones por las que desearía vincular su instancia RDS a su entorno.

Un problema con la configuración de RDS independientemente de EB es que no obtiene las variables RDS_ * rellenadas automáticamente y, por lo tanto, necesita recuperar sus valores y rellenarlos usted mismo a través de la consola web o .ebextensions. Sin embargo, no se recomienda agregar credenciales a su código, ya que puede ser un agujero de seguridad.

Pero entonces, el siguiente problema es si desea crear entornos mediante programación (como para implementaciones de tiempo de inactividad azul-verde cero), entonces necesita una solución sobre cómo poblar los valores RDS sensibles (por ejemplo, contraseña) cada vez. Desafortunadamente, esto requiere que baje más abajo en la pila de AWS y use una plantilla de CloudFormation.

La solución ideal es una mejora de EB para que el enlace "usar una base de datos existente" mencionado en la pregunta realmente le permita asociar manualmente una base de datos RDS existente y luego tener las variables de entorno RDS_ * rellenadas automáticamente de nuevo, en lugar de redirigirlo a documentación inútil . AWS Support dijo que esto se ha planteado como una solicitud de función pero, por supuesto, no se ha proporcionado un marco temporal.


un año después y todavía parece ser el caso?
lifeofguenter

1
Sigue siendo el caso hasta donde yo sé.
rgareth

¿Cómo topamos este AWS?
Mateo

un año después, sigue siendo lo mismo.
Karan Kumar

Pasos para agregar rds docs.aws.amazon.com/elasticbeanstalk/latest/dg/… (solo para completar para personas como yo buscándolo) No crean una configuración ambiental y la cargan a través de un archivo de configuración en la creación. Esto debería agregar env vars, por lo tanto, siempre que no cambien, esto debería estar bien.
Manuel

18

Respuesta del soporte de AWS :

Para asociar una base de datos existente a un entorno EB, debe tomar una instantánea a través de la Consola de administración y luego elegir "crear una nueva base de datos RDS" en la Capa de datos. No parece haber una forma de asociar una instancia RDS en ejecución a un entorno EB existente sin lanzar una nueva desde una instantánea debido a la forma en que la instancia RDS está vinculada a la pila subyacente de Cloudformation del entorno Beanstalk. Si toma una instantánea de su instancia RDS actual, puede iniciarla nuevamente en EB si lo desea.

Si desea que la instancia de RDS exista fuera del entorno, simplemente puede proporcionar los parámetros de conexión como variables de entorno a través de la consola EB: Configuración -> Capa web -> Configuración de software. Luego, puede leer la variable de entorno a través de PHP .


Tomé el segundo enfoque, definiendo variables de entorno con los nombres RDS_ * para seguir la convención. Los grupos de seguridad están bastante ajustados, pero todavía se siente un poco flojo al poner una contraseña DB en una variable de entorno.
Joseph Sheedy

@velotron Lo mismo para mí, ¡pero me acostumbré!
Benjamin

2

Necesitaba esto recientemente y también quería automatizar los pasos con AWS CLI / EB CLI. En cualquier caso, aquí están básicamente los pasos que seguí (suponiendo que ya haya creado una instancia de RDS):

  1. Asegúrese de tener una configuración de grupo de seguridad diferente para su instancia de RDS (no el grupo predeterminado de VPC). Puede usar aws ec2 create-security-group(AWS CLI) para eso y asociarlo con la instancia de RDS mediante aws rds modify-db-instance(AWS CLI).
  2. Inicialice su aplicación beanstalk (usé eb init(EB CLI) para eso).
  3. Lea los datos de configuración relevantes de su base de datos RDS (nombre de DB, nombre de host, puerto, etc.). Solía aws rds describe-db-instancespara eso.
  4. El uso de esos datos establece las RDS_*variables de entorno en la instancia de EB cuando crea el entorno (o implementa el entorno más adelante). Puede hacer esto con eb create/ eb deploy(EB CLI). Cuando cree el entorno inicialmente, se degradará, ya que los grupos de seguridad para acceder a la base de datos RDS no están configurados correctamente.
  5. Obtenga los grupos de seguridad relevantes de la configuración EB. Necesita el del grupo de escalado automático y el del balanceador de carga elástico. Puede usar aws elasticbeanstalk describe-configuration-settings(AWS CLI) para eso.
  6. Autorice a su grupo de autoescalado para el tráfico entrante a su base de datos para el grupo de seguridad que configuró en el paso 1. aws ec2 authorize-security-group-ingressUsé (AWS CLI) para eso, que usa grupos de seguridad VPC (no grupos de seguridad DB). Probablemente pueda lograr lo mismo con los grupos de seguridad de base de datos si son compatibles en su región. Al configurar la regla de tráfico entrante, asegúrese de utilizar el protocolo y el puerto correctos para su motor de base de datos.
  7. Agregue el grupo de equilibrador de carga elástico a los grupos de seguridad de su instancia de RDS (nuevamente utilizando aws rds modify-db-instance(AWS CLI)).
  8. Reinicie o vuelva a implementar la aplicación Elastic Beanstalk (por ejemplo, usando eb deploy(EB CLI)). Tuve que volver a implementar, ya que realizo migraciones en implementaciones.

Eso es sobre todo eso. Ahora debería poder ampliar / reducir sus instancias de RDS sin tener en cuenta las instancias de EB, siempre que mantenga el nombre de host y las credenciales de base de datos iguales. También puede hacer implementaciones azules / verdes con ese enfoque (pero es posible que deba realizar algunos pasos adicionales para revocar también el acceso al grupo de seguridad).


0

La forma más fácil de agregar un grupo de seguridad existente a las instancias de EB EC2 por configuración es usar el archivo simple descrito en https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/ security-configuration / securitygroup-addexisting.config

Por ejemplo:

$ cat .ebextensions/securitygroup-addexisting.config
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: rds-launch-wizard-1

0

Estaba enfrentando el mismo problema y lo solucioné usando los siguientes pasos:

1) Vaya a la instancia EC2 y observe el ejemplo de su grupo de seguridad "sg-121212121212"

2) IR al grupo de seguridad RDS ad = nd tráfico entrante

3) Editar regla, seleccione todo el tráfico y agregue su nuevo grupo de seguridad de ebs "sg-121212121212"

Espero que sea útil


-2

crear RDS bajo Elastic; agregará un nuevo grupo de seguridad correcto; modificar el grupo de seguridad del antiguo RDS existente; establecer la cadena de conexión correcta en la configuración web y todo el trabajo ...

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.