DevOps GitOps & CloudOps
Table of Contents
DevOps
Prueba de Integración
Para poder entender qué es una prueba de integración o Integration Testing, primero debes conocer lo que es una Unit Testing.
Unit Testing es una prueba realizada al código de una aplicación. Pero esta se aplica solamente a una unidad en particular. Es decir es una prueba aislada a un módulo o unidad del programa en general.
Ahora Integration Testing sería el siguiente paso. Una o varias pruebas que se basan en la funcionalidad en conjunto de la suma de las unidades, asegurando la funcionalidad de mismas trabajando juntas.
Aproximación Big Ban
Se basa en verificar todos los módulos en una, luego de completar la revisión individual de cada módulo.
Aproximación Top Down and Bottom Up
Se basa en el uso de dummy modules para simular data que fluye entre módulos.
CI/CD Conceptos Y Alcances
Es un flujo de trabajo automatizado DevOps que agiliza los procesos de entrega de software.
CI: Integración continua
Automáticamente construye, prueba e integra cambios en el código dentro de repositorios compartidos. El alcance de este etapa suele llegar hasta la entrega del artefacto o binario.
CD: Entrega continua
Entrega automáticamente código a entornos tipo Stage (Listo para producción). Y queda a la espera de alguna aprobación posiblemente manual.
El alcance de esta etapa suele llegar hasta la entrega del artefacto a algún repositorio tipo Docker Hub o Artifactory
Despliegue continuo (Continuous Deployment)
la parte CD de CI/CD suele hacer referencia a la entrega continua. En cambio el despliegue continuo suele tener algún paso manual de aprobación. Puesto que esto ya es un pase a producción (A veces puede hacer referencia a un pase a servidores detesting).
Estrategias de Git Branching
Las estrategias de Git branching son como rutas o caminos que usan para organizar el trabajo, hacer seguimiento a las versiones y lograr un trabajo conjunto en el trabajo de control de versiones.
Trunk-Based Development
Puede darse casos de commit que van directo a la rama main, o ramas pequeñas creadas específicas para algo en particular que son merged rápidamente.
Presenta ramas de corta vida como: /task/{{id}} o /fix/1234

- Escenarios de CI/CD
- Equipos ágiles
- Cierto riesgo de inestabilidad
- Se requiere disciplina y una buena revisión de código
Feature Branching
Cada prestación o Bug fix se desarrolla en su propia rama. Una vez completado el desarrollo se une a la rama main

- Equipos que necesitan tener las prestaciones claras
- Minimiza el peligro a romper producción
- Necesita una constante actualización de las ramas
- Puede presentar conflictos de
merge
Release Branching
Ramas separadas que se mantienen para cada release versión.

- Se usa en proyectos con soporte de largo plazo (LTS)
- Brinda un historial claro de cada
release. - Difícil manejo de ramas
- No ideal para proyectos que requiera velocidad.
- Se suele usar para proyectos con pocos
deployments
Github Flow
Es un flujo simplificado para ser orientado hacia la entrega continua.
Se basa en ramas feature de corta vida que luego son integradas a la rama main.

- Se suele utilizar en equipos que quieren integrar CI/CD
- Proyectos cortos de alta velocidad
- Puede presentar inestabilidad, dado que la rama
maindebe estar siempre lista para producción.
GitFlow
Es una estrategia sumamente estructurada que utiliza multiples ramas como main, develop, feature, release y hotfix.
Requiere un buen uso del naming convention para las ramas:
- Feature:
/feature/{{author}}/{{card-number}}/{{short-description}} - Hotfix:
/hotfix/{{issue-number}} - Release:
/release/{{version}}

- Proyectos grandes y complejos que requieren mucha estabilidad.
- Los roles y las responsabilidades están bien definidas.
- Presenta complejidad y requiere un fuerte seguimiento de reglas
- No es ideal para necesidades de despliegue continuo.
Environment Branching
Es parecida a la GitFlow con la característica de tener una rama para cada entorno comoproduction, stage, dev. Y a su vez también tiene los release branches, etc.
- Asume que necesitamos una rama para cada entorno
Estrategias de Despliegue
Se basa en las formas del pase a producción de nuestro código.
Big Bang Deployment
El pase se basa básicamente en apagar un sistema para luego prender la nueva versión.
Presenta complicaciones en caso se de alguna falla durante o luego del pase. Por lo que se tendría que hacer rollback.
Necesita tener un buen plan de rollback.
Rolling Deployment
El cambio se da de forma incremental con el tiempo.

El despliegue de la nueva versión se da gradualmente por lo que se va actualizando un server a la vez.
Usualmente previene caídas de servicio para los usuarios. Sin embargo no permite realizar targeted Rollouts hacia un grupo específico de usuarios.
Blue-Green Deployment
Se basa en tener dos sistemas idénticos, el Blue y el Green.
El Blue suele estar como activo, mientras que el green, como inactivo.
El Green termina siendo como nuestro playground donde se puede desplegar y probar las nuevas versiones. Los colaboradores de Q&A suelen apuntar siempre al Green.
Cuando Green se considera como listo, se hace que todos los usuarios apunten a este entorno. Es decir Greenpasa a ser el activo.
Ahora el Blue pasa a estar inactivo y termina siendo un entorno de respaldo.
No se suele poder dirigir a un grupo específico de usuarios hacia la nueva versión una vez hecho el cambio. Además es una infraestructura compleja que consume muchos recursos.
Canary Deployment
Se basa en probar la nueva versión pero de una forma gradual y controlada.
Ejemplo: Rolled Out al 10%
Puede ser ir cambiando la versión de los servidores poco a poco, como también ir desviando a cierto grupo de usuarios para tener un entorno de producción pero a una escala menor.
En caso de falla simplemente se puede volver a desviar a los usuarios de regreso al grupo de servidores anterior. Es decir este método si permite Targeted Rollouts con lo que se puede usar diferentes criterios de selección como localización geográfica o tipo de dispositivos.
Sí requiere herramientas complejas de infraestructura como monitoreo y pruebas automatizadas.
Canary Deployment se suele utilizar en conjunto con otras estrategias de despliegue como por ejemplo Rolling Deployment
Feature Toggle
No se basa necesariamente en pasar toda la aplicación a una nueva versión. Sino más bien, manejar prestaciones específicas dentro de la aplicación.

Entonces se puede prender o apagar ciertas features a disposición para ciertos usuarios o bajo ciertas circunstancias.
También puede ser usado en combinación con cualquier otra estrategia de despliegue.
Ofrece mucho control sobre quien puede acceder a esas nuevas features. Es decir permite el Targeted user testing o A/B testing
GitOps
GitOps toma las prácticas de DevOps y las aplica a la automatización de infraestructura (Infrastructure as a Code).
Entonces diferentes colaboradores puede hacer Push desde los repositorios hacia la infraestructura para así realizar cambios en ella bajo una especie de control de versiones.
Pero así como hay un Push también existe un Pull. Que está constantemente leyendo la infraestructura para poder compararla con lo que se tiene el los repositorios.

Y gracias a herramientas tales como ArgoCD, se consigue que Git sea la fuente de la verdad (source of truth).
Esto significa que ArgoCD es capaz de detectar cualquier cambio en la infraestructura (algún posible cambio manual) y si esta es diferente al repositorio de git, lo revierte nuevamente tal y como está definido en el repositorio.
CloudOps
IAM
IAM Policies
Documentos Json que pueden ser asignados a usuarios o grupos
IAM Roles
- Servicios AWS realizando acciones a tu nombre.
- Asignar permisos a servicios AWS con
IAM roles
EC2
Infraestructura como servicio.
- EC2 maquinas virtuales
- EBS Almacenamiento o discos virtuales
- ELB Distribución de carga
- ASG Escalamiento de servicios
auto-scaling group
EC2 Instance Store
- Disco de alta performance.
- Mejor I/O, bueno para buffer, cache, etc
Security Groups
- Controlan como el tráfico es permitido hacia adentro o hacia afuera de las EC2
- Solo tiene reglas
allow
Almacenamiento
EBS
Disco de red que puede ser conectado y desconectado de un EC2 con facilidad.
- EBS snapshots
- EBS encriptación
- Puede conectarse a solo una instancia a la vez
EFS
- NFS administrable que puede ser montado en varios EC2
- Solo para Linux
AMI
- Imagen de Amazon.
Alta Disponibilidad Y Escalabilidad ELB & ASG
ELB Elastic Load Balancing
- Reenvío de tráfico a multiples servidores
- Expone un solo punto de acceso (DNS)
- SSL/TLS
- Tipos
- Classic CLB
- Aplicación ALB (capa 7)
- Red NLB (Capa 4) - Menos latencia
- Gateway GWLB
Auto Scaling Group
- La carga en tus webs puede cambiar
- Puede crear o eliminar servidores
- Scale Out: Añade EC2
- Scale In: Elimina EC2
- Políticas de escalamiento: e.g Promedio de uso de CPU.
RDS
Bases de datos relacionales
- Postgres, MySQL, MariaDB, Oracle, SQL, Aurora
- Auto scaling
- RDS Read Replicas
Aurora
Propiedad de AWS
- Aurora Serverless
- Global Aurora
Amazon RDS Proxy
Base de datos Proxy para RDS
- Mejora la eficiencia
Amazon ElastiCache
- Bases de datos de cache en memoria
- Baja latencia, alta performance
- Cargas de lectura intensa
- Redis Vs Memcached

Route 53
Traduce nombres amigables al ojo humano en direcciones IP
- Domain registrar: Amazon Route 53, GoDaddy, etc
- DNS Records
- Zone
- Name Server: Resuelve consultas DNS
- TLD: .com
- SLD: amazon.com
- CNAME Vs Alias: CNAME es Hostname que apunta a otro hostname y no pueden ser dominios raíz. Alias es hostname que apunta a algún recurso AWS.
Políticas de Enrutamiento
Define como Route 53 responde a las consultas DNS
- Simple: Enruta hacia un recurso
- Weighted: Controla el % de las solicitudes
- Failover: Active Passive.
- Latency Based: Enruta hacia recursos que tengan la menor latencia
- Geo localización: Basado en la ubicación del usuario
- Multi_Value Answer: Enrutar a varios recursos
- Geoproximity: Basado en la geografía de usuarios y recursos
Health Checks
Monitorean un endpoint
- Protocolos: HTTP, HTTPS, TCP
Amazon S3
Almacenamiento de objetos en buckets
- Versioning
- Lifecycle Rules
S3 Security
- User based: con IAM policies
- Resource based: Bucket policies
- Encriptación
Storage Classes
- Standard, Standard Infrequent Access, One zone IA, Glacier, Glacier Flexible, Glacier Deep Archive, Intelligent Tiering
AWS CloudFront
Content Delivery Network
- Mejora la lectura, el contenido esta en cache en el edge
- Protección DDoS
Storage Extra
Amazon FSx
File systems de alta performance
- FSx for Windows
- FSx for Lustre: Para alta escala
SQS, SNS, Kinesis, Active MQ
Aplicaciones que se comunican entre ellas
Amazon SQS
El mensaje persiste en SQS hasta que sea consumido por el consumidor (lo borra)
- Consumidores: EC2, serverless, lambda
- FIFO Queue
Amazon SNS
Un mensaje hacia varios receptores

- SNS + SQS: Fan Out
- Amazon SNS FIFO Topic
Kinesis
Colecta, procesa y analiza data en tiempo real
- Kinesis Data Firehose
Contenedores en AWS: ECS, Fargate, ECR y EKS
Amazon ECS
Lanza contenedores Docker en AWS
ECS - EC2 (Dentro de una instancia)

ECS - Fargate: Serverless
ECS puede usar EFS
ECR
Elastic container registry
- Sirve para almacenar imagenes Docker en AWS
Amazon EKS
Amazon Elastic Kubernetes Service
- EC2 si quieres worker nodes como instancias
- Fargate: Solución serverless
Serverless
Solo despliegue de código

- Por qué AWS Lambda

API Gateway
- Lambda + Api gateway = No hay infraestructura que manejar
- Expone cualquier AWS PI con API Gateway
Amazon Cognito
Entrega a los usuarios una identidad para con nuestra web o aplicación

Data Y Analítica
- Amazon Athena
- Amazon Redshift
- Amazon OpenSearch
- Amazon EMR
- Amazon QuickSight
- AWS Glue
- AWS Lake Formation
- Kinesis Data Analytics
- Amazon Managed Streaming for Apache Kafka
- Big Data Ingestion Pipeline
Machine Learning
- Amazon Rekognition
- Amazon Transcribe
- Amazon Polly
- Amazon Translate
- Amazon Lex & Connect
- Amazon Comprehend
- Amazon Comprehend Medical
- Amazon SageMaker
- Amazon Forecast
- Amazon Kendra
- Amazon Personalize
- Amazon Textract
AWS Monitoring and Audit: CloudWatch, CloudTrail & Config
Amazon CloudWatch
Entrega métricas
- Metric stream
- CloudWatch Logs
- CloudWatch Agent y Logs Agent
- CloudWatch Container Insights: Colecta y resume métricas y logs de contenedores
- CloudWatch Lambda Insights: Solución para serverless
Amazon EventBridge

AWS CloudTrail
Governance y compliance y auditoria para cuentas AWS

AWS Config
Ayuda a las auditorias.
IAM Advanced
- AWS Control Tower: Multi-Account
AWS Directory Services
- AWS Managed Microsoft AD: Establece confianza con AD on-premise
- AD Connector: Gateway (Proxy) que redirige a un AD on-premise
- Simple AD: AD compatible
IAM Identity Center - Active Directory Setup
Conexión con un Microsoft AD manejado por AWS

AWS Security & Encyption KMS, SSM Parameter Store, CloudHSM, Shield, WAF
- KMS: Manejo de llaves
- SSM Parameter Store: Manejo de Secrets
- AWS Secret Manager: Rotación de Secrets
- AWS Certificate Manager ACM: Manejo de certificados TLS
- WAF: Firewall
- AWS Shield
- Amazon GuardDuty
- Amazon Inspector
- Amazon Macie
Networking VPC
Virtual Private Cloud

Internet Gateway IGW
Permite que los recursos dentro de un VPC, se conecten con el internet

Bastion Hosts
Bastion está en una subnet pública que a su vez se puede conectar con las subnets privadas.
NAT Gateway

Security Groups & NACLs
Network access control list
- Control de tráfico
- Security Group es a nivel de instancia
- NACL es a nivel de subnet
VPC Peering
Conexión privada entre VPC
VPC Endpoints
Te permite conectarte con un servicio AWS usando una red privada en lugar de una pública.

- Interface Endpoint
- Gateway Endpoint
AWS Site to Site VPN
- AWS VPN CloudHub: Si tienes multiples conexiones VPN
Direct Connect DX
Conexión privada desde una red remota hacia tu VPC
Transit Gateway
Hub and spoke connection entre VPCs
CloudFormation
Despliegue y manejo de infraestructura. IaC
- Forma declarativa