Inicializando AWS CloudShell 2/3
--
đ 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.