Cómo implementar una aplicación Rails 5.2 PostgreSQL en AWS Elastic Beanstalk

Es oficial, usar Heroku para todos mis proyectos de Rails hasta ahora me ha echado a perder. Después de recibir algunos créditos de AWS gracias a una competencia de lanzamiento, decidí implementar mi último proyecto en Elastic Beanstalk (competidor de Heroku de AWS). Todo lo que tengo que decir es que extraño a Heroku.

Por desgracia, si se encuentra en una situación similar, aquí hay instrucciones paso a paso para implementar su aplicación Rails 5.2 / PostgreSQL en Elastic Beanstalk.

Instalación de la CLI de Elastic Beanstalk

Usaremos la terminal en este tutorial. Comencemos con la instalación de la "Interfaz de línea de comandos de Elastic Beanstalk". A continuación se explica cómo hacerlo en macOS usando Homebrew:

brew install awsebcli

Si está utilizando otra plataforma, buscar en Google "cómo instalar awsebcli en [su plataforma]" debería llevarlo en la dirección correcta.

Inicialización de Elastic Beanstalk

Asumiré que ya tiene una cuenta de Amazon Web Services, si no, cree una. Ahora, vaya al directorio de su proyecto e inicialice Elastic Beanstalk:

cd my_projecteb init

Luego, la CLI de EB le hará algunas preguntas para inicializar la aplicación Elastic Beanstalk. La parte de inicialización es sencilla. Si se queda atascado en algún lugar, puede consultar la página "Configurar la CLI de EB" de la documentación.

Creando un nuevo ambiente

Como ya sabe, su aplicación puede tener muchos entornos (piense en ellos como configuraciones diferentes). Por ejemplo, puede tener un entorno de "producción". Este es el entorno que utiliza para la versión de su aplicación para el usuario. Pero es posible que desee tener otro entorno llamado "puesta en escena". Aquí es donde prueba nuevas versiones de su aplicación, antes de enviarla al entorno de producción.

Podemos crear un entorno usando el siguiente comando:

eb create production

Implementar en Elastic Beanstalk

Suponiendo que está utilizando Git, confirme sus cambios antes de implementar su aplicación. La CLI de EB implementa su última confirmación. Si implementa antes de comprometerse, implementará una versión anterior de su aplicación.

Después de confirmar sus cambios, implemente usando lo siguiente:

eb deploy

Hasta ahora todo va bien, ahora debemos configurar algunas cosas antes de que nuestra aplicación comience a funcionar.

Configurar la llave maestra

También puede usar la CLI para este propósito, pero prefiero usar el panel web para esto. Aquí es cómo:

  1. Vaya a AWS, elija "Servicios -> Elastic Beanstalk", luego haga clic en su entorno.
  2. Abra la pestaña "Configuración" y haga clic en "Modificar" debajo del cuadro titulado "Software".
  3. En "Propiedades del entorno", agregue una nueva clave denominada RAILS_MASTER_KEY. Establezca su valor en el contenido de su archivo "master.key". Puede encontrar este archivo en el directorio "config" de su aplicación Rails.
  4. Haga clic en el botón "Aplicar" en la parte inferior de la página.

Configurar una base de datos PostgreSQL

Elastic Beanstalk proporciona una forma sencilla de configurar una base de datos, a la que puede acceder a través de "Configuración -> Base de datos". Prefiero no usar eso porque si necesita reconstruir su entorno de Elastic Beanstalk, su base de datos será eliminada. Por lo tanto, configuraremos la base de datos por separado de nuestro entorno Elastic Beanstalk.

Creación de una base de datos PostgreSQL en RDS

  1. Vaya a AWS, elija "Servicios -> RDS".
  2. Elija "Crear base de datos".
  3. Elija "PostgreSQL" y haga clic en "Siguiente".
  4. Seleccione su caso de uso, "Producción" o "Desarrollo / Prueba", y haga clic en "Siguiente".
  5. Aquí, puede probar diferentes opciones y ver cuáles son los costos mensuales estimados. Acepta algo que esté dentro de tu presupuesto. Puede comenzar con una db.t2.microinstancia, sin implementación multi-AZ y con un SSD de uso general.
  6. Elija un identificador de instancia, esto es una especie de "espacio de nombres".
  7. Elija un nombre de usuario y contraseña, téngalos a mano por ahora, haga clic en "Siguiente".
  8. En la sección “Configurar opciones avanzadas”, lo importante son los grupos de seguridad. Seleccione "Elegir grupos de seguridad de VPC existentes" y seleccione el grupo de seguridad que se parece a "… -AWSEBSecurityGroup-…"
  9. Elija un nombre de base de datos, como my_app_production.
  10. Haga clic en "Crear base de datos", esto llevará un tiempo.

Permitir el acceso a la base de datos

Mientras tanto, agreguemos el acceso de Postgres a su grupo de seguridad:

  1. Vaya a AWS, elija "Servicios -> EC2".
  2. Haga clic en "Grupos de seguridad" en el panel izquierdo.
  3. Elija el grupo de seguridad de la sección anterior.
  4. Vaya a la pestaña "Entrante" y haga clic en "Editar".
  5. Haga clic en "Agregar regla". Para “Tipo”, elija “PostgreSQL” y para “Fuente” escriba el ID del grupo de seguridad al que está agregando esta regla. Debería estar justo encima de la pestaña "Entrante" y debería verse así sg-*.
  6. Clic en Guardar."

Establecer la configuración de la base de datos de producción

Ahora, en tu directorio Rails, abre config/database.yml. Cámbielo como tal:

# ...
production: <<: *default database:  username:  password:  host:  port: 

Agregar variables de entorno relevantes a Elastic Beanstalk

Le dijimos a Rails que obtuviera la información para la base de datos de producción utilizando las variables de entorno anteriores. Ahora debemos asegurarnos de que nuestro entorno de Elastic Beanstalk incluya estas variables:

  1. Vaya a AWS, elija "Servicios -> Elastic Beanstalk", luego haga clic en su entorno.
  2. Abra la pestaña "Configuración" y haga clic en "Modificar" debajo del cuadro titulado "Software".
  3. En "Propiedades del entorno", agregue los siguientes pares clave-valor:
  4. RDS_DB_NAME: Nombre de la base de datos que eligió al configurar su base de datos.
  5. RDS_USERNAME: Nombre de usuario que eligió al configurar su base de datos.
  6. RDS_PASSWORD: Contraseña que eligió al configurar su base de datos.
  7. RDS_HOSTNAME: Vaya a "Servicios -> RDS" y podrá encontrar esta información en la sección "Conectar" de la página de información de la instancia de su base de datos. Se llama "Punto final".
  8. RDS_PORT: Establezca esto en 5432.
  9. Haga clic en el botón "Aplicar" en la parte inferior de la página.

Después de esto, confirme el directorio de su aplicación Rails nuevamente y ejecútelo eb deploy. Es posible que desee esperar unos minutos antes de hacer esto porque Elastic Beanstalk hace algunas cosas en segundo plano después de actualizar las variables de entorno.

Después de estos pasos, su aplicación Rails "debería" estar ejecutándose.

¿Sigue sin funcionar?

Si hay algún problema, puede ir a su entorno EB en el panel web de AWS, hacer clic en "Registros" y elegir "Solicitar registros -> Últimas 100 líneas" para ver los registros. Pero antes de hacer eso, recomendaría intentar ejecutar su aplicación Rails usando el entorno de producción en su máquina local usando la coma nd rails s RAILS_ENV=product.

Seré el primero en admitir que no soy la persona más experimentada en lo que respecta al despliegue. Como dije, siempre usé Heroku en el pasado, y probablemente también lo usaré para mis proyectos futuros. Estos pasos funcionaron para mí después de unos días de rascarme la cabeza al intentar configurar mi aplicación Rails en Elastic Beanstalk, así que quería compartirlos con la esperanza de ahorrar tiempo para las personas que se encuentran en la misma situación que yo. Entonces, tómate todo esto con un grano de sal y ¡buena suerte!

Si te gusta este artículo, sígueme en Twitter o suscríbete a mi boletín para recibir notificaciones cuando escriba nuevos artículos. Escribo sobre software y startups.

Si está buscando un desarrollador de Rails, actualmente estoy disponible para trabajo remoto. No dudes en ponerte en contacto conmigo en hi {at} evrim.io.

Publicado originalmente en evrim.io el 28 de noviembre de 2018.