Inicializando AWS CloudShell 2/3

Gerardo Castro Arica
5 min readMar 30, 2021

👋 Hola

Antes de empezar, te recomiendo leer la primera parte de esta serie de 3 blogs.

Inicializando AWS CloudShell 2/3. 👋 Hola | by Gerardo Castro Arica | Mar, 2021 | Medium

Ahora si, a lo nuestro 😉

Empezaremos iniciando CloudShell y haremos 2 ejercicios con AWS ECS que nos sirve para poder orquestar contenedores docker y finalizaremos con AWS Elastic Beanstalk (estará en la parte final de esta serie) que ayuda mucho a los desarrolladores a construir y desplegar sus aplicaciones sin entrar demasiado en terrenos de AWS 😼.

Una vez iniciado nuestro CloudShell, podemos escribir la siguiente sintaxis:

ecs-cli configure — cluster micluster-docker — default-launch-type FARGATE — config-name micluster-docker

Esto dará lugar a que se cree y guarde un archivo de configuración para crear y lanzar posteriormente un clúster ECS de nombre `mi cluster-docker`, y nuestro clúster será del tipo `Fargate`.

Y si te das cuenta al inicio de la sintaxis dice `ecs-cli`.

Entonces, ¿Qué significa todo esto? 🤔

Es cierto que hay varios términos aun desconocidos para algunos
que puedan leer este blog, así que me aseguraré de hacer blogs dedicados a explicar estos temas.

Pero de momento, conozcamos lo siguiente 💡:

  • `ecs-cli` es una librería que nos permite poder crear, actualizar y administrar nuestros clústeres ECS desde una terminal.
  • `Fargate` esto es magia pura, sencillamente es Severless para contenedores. Significa que no administras nada de hardware. Solo te dedicarías a desarrollar tus ambientes y subirlos a los contenedores.

Creación de nuestro Clúster ECS

.1 Necesitaremos crear un IAM Role con un trust relationship para el servicio de ecs. Y Luego asignarle un IAM Policy que permita poder ejecutar tareas desde nuestro cluster.

  • Crearemos un `.json` en nuestro local con el siguiente contenido:
  • Luego, subiremos este `.json` hacia nuestro cloudshell y ejecutaremos el siguiente comando para crear nuestro role:

`aws iam create-role — role-name ecsTaskExecutionRole — assume-role-policy-document file://task-execution-role.json`

  • Aquí, la opción para subir los archivos que necesitemos a nuestro cloudshell:

- Y ahora, debemos asignar una policy, recomiendo usar esta política administrada por AWS, pero puedes customizar tus acciones si crees necesario:

`aws iam attach-role-policy — role-name ecsTaskExecutionRole — policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy`

.2 Ahora crearemos un cluster ECS Fargate:

`ecs-cli up — cluster-config micluster-docker`

  • Verás que adicionalmente se ha creado una nueva VPC y 2 subnets, cada uno de estos recursos con su ID, los cuales los necesitaremos mas adelante. Esto es opcional, tu puedes declarar en la sintaxis que el clúster se cree sobre una VPC existente.
  • Vamos a necesitar poder recibir tráfico entrante hacia el puerto 80 (HTTP) desde internet. Para ello, ejecutaremos lo siguiente, remplaza el valor de ` — group-id` por el que vas a utilizar:

`aws ec2 authorize-security-group-ingress — group-id sg-3829401103 — protocol tcp — port 80 — cidr 0.0.0.0/0`

Ahora si se viene lo chido.jpg 🤣

.3 Crearemos nuestro archivo Docker Compose v3 que ya es soportado por `ecs-cli` con los siguientes parámetros y lo guardaremos como `docker-compose.yml`

- En este pequeño archivo, estamos diciendo que se ejecute un `pull` de esa docker-image: `nginx-latest` que esta almacenada en Docker Hub. Y Luego hará un `push` hacia nuestro container instance para desplegar nuestra app la cual debe responder a través del puerto 80.

- Adicionalmente, se crea un grupo de registro en Cloudwatch para almacenar todos los logs provistos por nuestro clúster.

- También crearemos un archivo llamado `ecs-params.yml` para configurar los valores que tomarán nuestro task-definition e ecs-service:

- Los valores que debes cambiar son `subnets` y `security groups`

.4 Llego el momento de configurar nuestro clúster ECS:

`ecs-cli compose — project-name miweb service up — create-log-groups — cluster-config micluster-docker — cluster micluster-docker — launch-type FARGATE`

.5 En el paso anterior, obtuvimos en la ultima línea el mensaje de que nuestro ECS Service ya era estable 😃. Validemos que nuestro container-instance se encuentre en modo `running`:

`ecs-cli compose — project-name miweb service ps — cluster micluster-docker`

.6 Tomemos la EIP o IP Pública que nos brinda el paso anterior y accedamos a ella desde nuestro navegador:

.7 En cuanto lo consideres, sugiero eliminar todos los recursos que hemos creado para que no incurran en costos:

- Este comando hara un stop a la instance-contanier que hemos creado:

`ecs-cli compose — project-name miweb service down — cluster micluster-docker`

- Y Finalmente, este comando eliminara todo el contenido del cluster:

`ecs-cli down — force — cluster-config micluster-docker`

- Adicionalmente, existirá un recurso aun pendiente de eliminar, y este es el task definition:

- Solo tienes que ingresar a este recurso, y dar en la opcion de `deregister`

- Podríamos hacer muchas mas cosas aquí, como agregar un ALB, un ASG, escalar nuestros nodos, usar Container Insights, etc, pero ya sería adentrarse en terrenos de ECS 😉.

👋 Aquí paramos la tecla.

--

--

Gerardo Castro Arica

Padre, hijo y hermano 👨‍👩‍👦‍👦 Creador de contenido en Youtube. Escritor de blogs técnicos. #AWSSecurity #AWSCommunity Sígueme en mis redes sociales 👇