Time to Demo. AWS ECS by RoxsRoss [AWS Community Day Argentina 2023]
Amazon Elastic Container Service, también conocido como Amazon ECS, es un tipo de servicio que permite la administración, implementación y el escalado de aplicaciones en contenedores y que se caracteriza por ser totalmente gestionado. Este servicio será de gran utilidad para tus labores de orquestación de contenedores, por lo que es importante que conozcas, gracias a este post, los beneficios de Amazon ECS de mayor relevancia.
Uno de los principales beneficios de Amazon ECS es que funciona como un servicio elástico completamente administrado, por lo que el usuario no deberá preocuparse de los procesos de gestión y administración del plano de control.
La implementación Blue/Green es un modelo de lanzamiento de aplicaciones que intercambia el tráfico de una versión anterior de una aplicación o microservicio a una nueva versión. La versión anterior se llama entorno blue, mientras que la nueva versión se llama entorno green.
En este modelo, es esencial para garantizar su preparación para manejar el tráfico de producción. Una vez superadas las pruebas, esta nueva versión se promueve a producción reconfigurando el balanceador de carga para transferir el tráfico entrante del entorno blue al entorno green, ejecutando por fin la última versión de la aplicación.
El uso de esta estrategia aumenta la disponibilidad de las aplicaciones y reduce el riesgo operativo , al mismo tiempo que se simplifica el proceso de reversión.
Crear un clúster ECS y un pipeline que cree la nueva versión de la imagen del contenedor para implementarla en modo blue/green no es difícil en sí mismo, pero requiere la creación de muchos recursos en la nube para coordinar.
- Tener instalado terraform
- Contar con token de github
- Acceso a las claves programaticas de AWS
- Estructura del terraform.tfvars, tambien puede manejarlos por ambiente con terraform workspace
aws_profile = "xxxx"
aws_region = "xxxx"
environment_name = "xxxx"
repository_name = "xxxxx"
repository_owner = "xxxxx"
- Se debe ubicar en la carpeta Infra, donde encontras todos los modulos que se requiere para el aprovisionamiento de la infra
infra
├── Modules
│ ├── ALB
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── CodeBuild
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── CodeBuildSecurity
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── CodeDeploy
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── CodePipeline
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── CodeStar
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── ECR
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── ECS
│ │ ├── Autoscaling
│ │ │ ├── main.tf
│ │ │ ├── outputs.tf
│ │ │ └── variables.tf
│ │ ├── Cluster
│ │ │ ├── main.tf
│ │ │ ├── outputs.tf
│ │ │ └── variable.tf
│ │ ├── Service
│ │ │ ├── main.tf
│ │ │ ├── outputs.tf
│ │ │ └── variables.tf
│ │ └── TaskDefinition
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── IAM
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── Networking
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── S3
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── SNS
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ └── SecurityGroup
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── Templates
│ ├── appspec.yaml
│ ├── buildspec-secrets.yml
│ ├── buildspec.yml
│ └── taskdef.json
├── main.tf
├── outputs.tf
├── terraform.tfvars
├── variables.tf
└── versions.tf
- Para iniciar el proyecto solo requieres correr el comando
terraform init
Resultado de la Salida:
> terraform init
Initializing the backend...
Initializing modules...
- alb_client in Modules/ALB
...
Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 5.15.0"...
...
Terraform has been successfully initialized!
terraform validate
Success! The configuration is valid, but there were some validation warnings as shown
above.
Ahora si vamos con el plan...
terraform plan
Otra opcion:
terraform plan --out plan.out
Resultado:
Plan: 49 to add, 0 to change, 0 to destroy.
terraform apply --auto-approve
Tambien podrias usar
terraform apply "plan.out"
Wooo ..... 3m 6s tenemos magia..
Para destruir todo los recursos generados.
terraform destroy --auto-approve
Y si quieren eliminar todos los archivos de configuracion de Terraform, te ubicas en el root del directorio y ejecuta
make clean
> make clean
find . -type f -name "*.tfstate*" -prune -exec rm -rf {} \;
find . -type f -name "*.terraform.lock.hcl" -prune -exec rm -rf {} \;
find . -type d -name "*.terraform" -prune -exec rm -rf {} \;
find . -type d -name "*.out" -prune -exec rm -rf {} \;
Hemos visto cómo integrar y coordinar muchos objetos diferentes para hacerlos converger hacia la automatización de un extremo a otro, incluyendo también recursos que deben adaptarse al caso de uso específico.
La automatización de despliegues es una actividad que encuentro muy gratificante. Históricamente, las liberaciones siempre han sido un dolor de cabeza, precisamente porque la actividad era manual, no sujeta a pruebas, con muchas variables inesperadas: afortunadamente, como hemos visto, ahora es posible contar con un sistema claro y bien definido. y proceso repetible.
Las herramientas que tenemos disponibles para la automatización son muy interesantes y versátiles, pero la nube no lo hace todo por sí sola. Sin embargo, es necesario un importante trabajo de integración (el código que hemos visto es sólo una parte; el ejemplo completo está aquí ), y sobre todo saber adaptar los recursos al caso de uso, buscando siempre la mejor solución para solucionar el problema concreto. problema.
⌨️ con ❤️ por roxsross 😊
"No se trata de cambiar el mundo, creo que creas un cambio pequeño, pero que te importe estás cambiando las cosas".