Un c贸ctel perfecto 馃嵐 ECS Fargate, Service Connect,Terraform y Github Actions.

Alex Rodr铆guez - Feb 12 - - Dev Community

En nuestro 煤ltimo post de #AwtwinS comentamos un avance del Re:Invent donde utilizabamos EKS POD Identity para administrar las credenciales de aplicaci贸n 馃攼 y como no, hablando de containers, como tambi茅n comentamos la parte de AppRunner, EKS y ahora porque no... un poquito de ECS. 馃殌

鉁岋笍En esta nueva Poc tenemos dos servicios en ECS Fargate鉁岋笍

Front: Usaremos un script en python que har谩 llamadas contra nuestro backend, como siempre. (dummy-dummy)
Backend: Servidor HTTP que escucha en un puerto especifico, este est谩 en Nodejs. (otra dummy-dummy) 隆Prep谩rate para disfrutar de un c贸ctel!

No obstante cuando pensamos en servicios, debemos de pensar tambi茅n en como vamos a conectar esos servicios y aqu铆 en AWS surgen varias formas de conectarlos.馃

En primera instancia pensamos en ELB por servicio, creando as铆 un espect谩culo de balanceadores. Sin embargo, cuanto nos cobran la entrada, el espect谩culo deja de ser divertido, aqu铆 es donde se complica.馃 Y si tienes que luchar contra el Preserve IP? (Esta experiencia,que merecer铆a otro post propio nos ense帽a que cada soluci贸n tiene sus desafios)馃く

En este caso vamos a hablar de Ecs Service Connect, baile de proxies 馃暫 en perfecta coordinaci贸n 馃暫. Service Connect despliega sus artes escenicas a trav茅s de un container Sidecar que se ejecuta a cada tarea del servicio. Este Sidecar act煤a como proxy, gestionando las conexiones entre servicios. Pero aqu铆 el paso brutal: Service connect registra los endpoints en Cloud Map por nosotros.

Para m谩s informaci贸n:
Service Connect

Tenemos dos subnets en la VPC con 2 servicios. Nuestro frontend es el encargado de hacerle peticiones a nuestro backend.

En este caso,la conexi贸n se est谩 usando con el nombre corto de ecs-backend en el puerto para nuestro backend, definiendo los puertos en el terraform de nuestra task definition.馃憦

Para entender mejor esto, el baile en el siguiente diagrama:

Proxy

Comentada la teor铆a pasemos a la acci贸n! M贸dulos de terraform de community 馃樁鈥嶐煂笍 Github Actions y Service Connect.馃樁鈥嶐煂笍

Para este caso los m贸dulos que utilizaremos son los siguientes:

ECR
VPC
ECS

Cabe remarcar que a帽adiremos una parte de c贸digo (Service Discovery) en alguno de ellos para hacer nuestra PoC, no obstante,os dejamos nuestros repos p煤blicos con la PoC. 馃捇

Terraform-ECS-PoC
Frontend Dummy
Backend Dummy

Al desplegar nuestro terraform desde el repositorio podremos ver el ECS con sus respectivos servicios.

Servicios

Como dec铆amos, nuestro compi de baile se ejecuta a su lado como un Sidecar.

Sidecar frontend

Sidecar backend

Una vez desplegado y configurado todo y al no tener endpoint p煤blico, usaremos cloudwatch para ver los registros y podemos ver que est谩n conectando correctamente nuestras apps. 馃サ

Peticiones front

Peticiones back

鉁岋笍 隆Aviso Importante! Este post est谩 creado con el prop贸sito de compartir conocimientos y experiencias en el entorno de una Prueba de Concepto (PoC).

Etiqueta "latest" en Docker: 隆Atenci贸n! 馃毃 (Puede ocasionar problemas en tus entornos)

Costos Asociados y Buenas Pr谩cticas 馃搳: Adem谩s, en este entorno de Poc, hemos tomado decisiones que pueden tener implicaciones en t茅rminos de costes, VPC, Logs... En el mundo real, se recomienda seguiir unas buenas pr谩cticas, optimizar costes y tener en cuenta la seguridad y eficiencia.

Por tanto, a testear con responsabilidad! 馃攳

Esperamos vuestras reacciones y comentarios! 馃帀

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .