Cómo automatizar la implementación de su proyecto Elixir en AWS

Este es el primer artículo de una serie de 2 partes, donde explicamos por completo cómo automatizar la implementación de su proyecto Elixir. Las tecnologías utilizadas son AWS, para alojar su proyecto, y CircleCI, para automatizar las pruebas y la implementación de la aplicación.

Parte II: cómo automatizar la implementación de su proyecto Elixir con CircleCI

Configuración de AWS

Una configuración básica de AWS para su aplicación debe consistir en varios servicios interconectados, de los cuales EC2 es el más importante, ya que albergará su proyecto e interactuará bastante con él.

Además, utilizamos RDS para la base de datos y Route 53 para la administración del dominio, junto con algunas otras herramientas útiles menores. Este tutorial se divide en varios pasos secuenciales que explican cómo configurar completamente estos servicios, para que pueda tener una infraestructura completamente funcional en la que pueda implementar su código.

Configuración de AWS: vista general

Si tiene problemas para encontrar los servicios que configuraremos, puede buscarlos y acceder a ellos en la pestaña de servicios:

A) EC2

Configuraremos 2 instancias, una para la preparación y otra para el entorno de producción.

1. Crear instancia de ensayo

Configuración EC2

Tenga en cuenta que algunos servicios pueden no estar disponibles en ciertas regiones, para nuestro ejemplo vamos a utilizar North Virginia.

En este ejemplo, vamos a utilizar una imagen de nivel libre de ubuntu 16.0.4 (AMI) con una instancia t2.micro compuesta de 1 GB de RAM y 20 GB de disco (volumen EBS). Para su propio proyecto, no dude en ajustar estos valores para que coincidan con las necesidades del proyecto. Otra cosa importante son las regiones y las zonas de disponibilidad y cada servicio de AWS puede o no estar disponible para esa área.

Paso 1: elija AMIPaso 2: elija el tipo de instanciaPaso 3 - Configurar instancia

No olvide marcar la casilla "Proteger contra terminación accidental".

Paso 4: agregar almacenamiento

El último paso consiste en agregar etiquetas a nuestra instancia EC2. Este paso no es crucial para la configuración y el único propósito de las etiquetas es identificar nuestra instancia dentro de los servicios de AWS, así que siéntase libre de agregar sus propias etiquetas.

2. Configure el grupo de seguridad

El grupo de seguridad es una de las configuraciones más importantes, ya que define exactamente quién puede acceder a la máquina. En nuestro caso, definimos los protocolos SSH, HTTP y HTTPS.
SSH, porque queremos poder acceder a la máquina e interactuar con ella a través de la terminal para poder configurarla.
HTTP y HTTPS para que se pueda acceder a nuestro proyecto cuando se implemente.

Paso 6: configurar el grupo de seguridad

Advertencia: las reglas con una fuente de 0.0.0.0/0 permiten que todas las direcciones IP accedan a su instancia. Recomendamos establecer las reglas del grupo de seguridad para permitir el acceso solo desde direcciones IP conocidas.

3. Cree un nuevo par de claves (para acceso externo a la instancia)

Al final del proceso de creación de la instancia EC2, es necesario crear un par de claves (guarde el par de claves en su máquina, para que pueda configurar su acceso SSH localmente).

B) IP elástica

Cree una dirección IP elástica asociada a la instancia EC2 creada. La Elastic IP es necesaria porque, por ejemplo, si cerramos esta instancia y creamos otra con otras características, simplemente asociamos la Elastic IP creada a la nueva instancia y todo funciona bien.

Paso 1 - IP elásticaPaso 2 - Asociar Elastic IP con instancia

C) Configurar la máquina EC2

1. Configurar el acceso SSH

### recomienda poner key-pair.pem en la carpeta ~ / .ssh
chmod 400 key-pair.pem
### reemplace 111.11.111 con el Elastic IP generado
ssh -i key-pair.pem ubuntu@111.11.111

2. Instale las herramientas necesarias en la instancia EC2

Acceda a la máquina e instale el software necesario.

  • Elixir / Erlang
  • Git
  • Nodo
  • Nginx
  • Postgres (no la instalación completa, solo la versión del cliente en la misma versión que la de RDS)

3. Instalar Certbot

Debe instalar Certbot y luego generar un certificado SSL para el dominio al que corresponderá su máquina. Importante: Algunas veces primero necesita ejecutar el paso “E) Ruta 53”.

# Reemplace example.com por su dominio
sudo certbot --nginx -d ejemplo.com -d www.example.com
sudo certbot renove --dry-run

A continuación, siga los pasos 3 y 4 de este tutorial.

Advertencia: Certboot es el límite de velocidad.

4. Configure Nginx

A continuación, debe configurar Nginx para usar el certificado que acaba de crear para este dominio. Navegue a la carpeta / etc / nginx / sites-available, donde puede encontrar el archivo Nginx predeterminado, que se parece al siguiente:

Advertencia: reemplace por el server_name generado previamente.

5. Última configuración en la instancia

Finalmente, debe crear la carpeta en / opt. Después de eso tenemos que pasar el control al usuario ubuntu.

sudo mkdir 
sudo chown -R ubuntu: ubuntu  /

6. Cree una imagen basada en la instancia creada y cree una instancia de producción

Puede omitir este paso si solo necesita configurar un entorno único. En nuestros proyectos, generalmente comenzamos con una puesta en escena y un entorno de producción. El entorno de ensayo contiene todo el código realizado hasta ahora y se utiliza para probar las últimas funciones antes de que entren en producción. El entorno de producción es el utilizado por los usuarios reales.

Paso 1: crear una imagen basada en la instancia creadaPaso 2 - Crear imagen

Cree una imagen (EC2 - AMI) basada en la instancia creada previamente (instancia de ensayo). Luego cree la instancia de producción a partir de la imagen (para que tengamos las dos instancias creadas y configuradas: producción y puesta en escena). No lo olvide: guarde el par de claves en su máquina para configurar su acceso SSH localmente.

Para la instancia de producción, es necesario repetir los siguientes pasos:

  • B) IP elástica (instancia de producción)
  • C) 1. Configurar el acceso SSH (instancia de producción)
  • C) 1. Configurar el acceso SSH (instancia de producción)
  • C) 3. Instalar Certbot (instancia de producción)

D) RDS

El ejemplo que le mostramos aquí usa una base de datos relacional. En este caso, usamos Postgres.

Configuraciones EC2 y RDS

1. Crear 2 instancias de base de datos (producción y puesta en escena)

  • Tenga cuidado con las opciones elegidas como: versión del motor, tienda asignada y habilite la protección de eliminación.
Paso 1 - Seleccione el motorPaso 2 - Especificaciones de instanciaPaso 3- ConfiguracionesPaso 4: red y seguridadPaso 5 - Opciones de base de datosPaso 6 - Copia de seguridadPaso 7 - MantenimientoPaso 8 - Protección de eliminación

2. Configure el grupo de seguridad para permitir que EC2 se conecte al RDS

Básicamente, debe agregar el grupo de seguridad de la instancia al grupo de seguridad RDS para permitir que EC2 se conecte a la instancia RDS.

Permitir que EC2 se conecte a la instancia RDS

E) Ruta 53

Para enrutar los dominios y subdominios a las máquinas creadas anteriormente, utilizamos Route 53.

Ruta 53 - ejemplo

1. Crear una zona alojada con un nombre de dominio

Paso 1: crear una zona alojada

2. Crear alias

  • Cree un conjunto de registros de alias para organizar la IP elástica de la máquina EC2
  • Cree un conjunto de registros de alias para la IP elástica de la máquina EC2 de producción
Paso 2: crear un conjunto de registros

Ahora tiene una configuración de AWS totalmente funcional (enrutamiento, base de datos, instancia de servidor) lista para recibir y alojar un servidor basado en elixir. En la siguiente parte del tutorial, configuraremos CircleCI para implementar automáticamente su proyecto en la configuración de AWS que acabamos de crear.

¡Gracias por leer!

Muchas gracias por leer y si disfrutaste este artículo, asegúrate de presionar el botón . ¡Significa mucho para nosotros! Tampoco olvides seguir a Coletiv en Medium, Twitter y LinkedIn, ya que seguimos publicando más y más artículos interesantes sobre múltiples tecnologías.

En caso de que no lo sepa, Coletiv es un estudio de desarrollo de software de Porto especializado en el desarrollo de aplicaciones Elixir, iOS y Android. Pero hacemos todo tipo de cosas. Nos encargamos del diseño UX / UI, el desarrollo web e incluso la seguridad para usted.

Entonces, ¿creemos algo juntos?