SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
Terraspace
The definitive Terraform framework
by @mario21ic
Una Infraestructura “chiquitita”
1. Un EC2 + EIP (zona publica) con el App de la empresa y RDS.
2. Un ELB para carga y EC2 en 2 zonas para HA.
3. Un VPC propio, EC2 y RDS en zonas privadas y ELB en zona publica.
4. Un par de SSM roles para evitar bastion e IPs en Security Groups.
1.- Un EC2 + EIP (zona publica) con el App de la empresa y RDS.
2.- Un ELB para carga y EC2 en 2 zonas para HA.
3. Un VPC propio, EC2 y RDS en zonas privadas y ELB en zona publica.
3. Un VPC propio, EC2 y RDS en zonas privadas y ELB en zona publica.
4. Un par de SSM Roles para evitar bastion e IPs en Security Groups
1. Desplegar lo mismo para:
a. Dev.- una aws account en especifico.
b. Test.- en otra account pues se elimina todo a fin de semana.
c. Stage.- en la región Oregon.
d. Prod.- region Virginia.
2. Desplegar lo mismo en la cuenta Aws del cliente.
Nuevos requerimientos
Algunas consideraciones
1. El código de la infraestructura debe ejecutarse en otra cuenta (backend s3).
2. El mismo Environment (qa, stage, dev, etc) en otra aws region.
3. DRY en variables, módulos, backends, providers, etc.
4. Manejo de Aws Secrets en el código.
5. Debemos agregar Tests de Integración y Unitarios.
6. Estandarizar la estructura de las carpetas.
7. Entender y graficar las dependencias.
● Terraform Framework
● Provee una estructura organizada de directorios
● Convenciones sobre configuraciones (app/modules, app/stacks,
config/terraform)
● DRY
● Escrito en Ruby
● https://terraspace.cloud/
Terraspace
● DRY (config, modules, stacks, helpers, hooks, etc)
● Generators (projects, modules, stacks, tfvars, etc)
● Multiple Environments (tfvars and layering)
● Deploy Multiple Stacks
● Secrets support
● Terrafile
● Configurable Hooks & CLI
● Testing
Terraspace Features
Don’t Repeat Yourself (DRY)
Modules & Stacks
Modules:
Son piezas de código reutilizables y génericos.
Stacks:
Usan los modules para generar infraestructura
de una solución en especifica.
Algunas soluciones propias
1. Dividir recetarios y guardar valores en Consul:
○ Network: vpc, subnets, acl, nat gateway, internet gateway, security groups, etc
○ IAM: users, roles, policies, etc
○ Components: elb, ec2, rds, k8s cluster, autoscaling, launch template, target group, etc
Inconvenientes:
● Necesitas desplegar Consul y mantenerlo.
● Codigo HCL para leer y escribir en Consul. Ademas de invocarlo en recetario.
● Outputs desperdiciados.
● Estados de cada componente en un S3 bucket y diferentes Keys (paths).
Backends
Generación automatica del backend.tf de
clouds como:
● Aws: S3 bucket y DynamoDB (locks)
● Azure Storage Account
● Google Cloud Storage (GCS)
Revisar config/terraform/backend.tf
Backends
Usando variables:
● Account Id
● Region
● Env
Locks
Para evitar colisiones en la actualización de
recursos se requiere de una tabla de “locks” en
Aws DynamoDB.
Revisar config/terraform/backend.tf
Algunas soluciones
1. Crear un script para reemplazar el Backend antes de cada terraform apply
Inconvenientes:
● Crear el script y testearlo.
● Se debe crear S3 bucket y DynamoDB para cada proyecto.
Tfvars Layering
Usar el mismo código para crear múltiples
Environments.
1. base.tfvars valores iniciales
2. dev.tfvars puede sobreescribir
valores.
3. region/dev.tfvars para una region
en especifico.
4. account/dev.tfvars para una cuenta
en especifico.
Algunas soluciones
1. Script a mano que lea un base.tfvars y haga un merge con el del entorno
dev.tfvars por ejemplo
Inconvenientes:
● Como validar que se están tomando los valores?
● Hacer test del script
Secrets Supports
Puedes leer datos desde:
● Aws Secrets Manager
● Aws SSM Parameter Store
● Azure Key Vault
● Google Secrets Manager
Algunas soluciones propias
1. Script para leer datos y luego reemplazar el codigo antes de hacer terraform
apply.
2. Usar Hashicorp Vault
Inconvenientes:
● Llenarte de scripts y parámetros
● Como testearias los scripts?
● Instalación de mas servicios y debes mantenerlos.
● Fija que un valor solo se saque de un cloud provider.
Multiples Stacks
Desplegar y Eliminar Multiples Stacks con un
solo comando:
● $ terraspace all up
● $ terraspace all down
Otros comandos:
● $ terraspace all init
● $ terraspace all plan
● $ terraspace all output
● $ terraspace all providers
● $ terraspace all refresh
● $ terraspace all validate
Algunas soluciones
1. Crear un script para que recorra cada carpeta y haga:
$ terraform init
$ terraform workspace select myenv
$ terraform plan -var-file=myenv.tfvars
$ terraform apply -var-file=myenv.tfvars
Inconvenientes:
● Manejo de Estados por cada carpeta y Backend en S3.
Terraform Modules centralizado
Se define en Terrafile como por ejemplo:
mod "sg", source:
"terraform-aws-modules/security-group/aws",
version: "3.10.0"
mod "vpc", source:
"terraform-aws-modules/vpc/aws", version:
"3.10.0", stack: "simple-vpc"
Instalacion y uso:
$ terraspace bundle
$ ls -la vendor/modules
Generators
Enfocarnos en el código y olvidarnos de las
estructuras. Usando el comando:
terraspace new
● project myproject
● module mymodule
● stack mystack
● helper myhelper
● hook myhook
● arg myarg
● test mytest
Nuevo Environment:
$ export TS_ENV=qa
$ terraspace seed mystack
Algunas soluciones
1. Tener plantillas para cada tipo de recurso: vars, outputs, module, etc
2. Crear un script para copiar las plantillas y pegarlas en cada carpeta.
Inconvenientes:
● Un script para cada cosa
Testing
● Concepto de Test Harnesses, copiar y
ejecutar en un nuevo directorio.
● Deploy de todo el Modulo o Stack y
Eliminar todo al terminar.
● Tests de Integración
● Tests Unitarios para Helpers
Configurable
Extender las funcionalidades de Modulos, Stacks,
etc mediante:
Hooks:
● $ terraspace new hook --type project hook1
● $ terraspace new hook --type module hook2
● $ terraspace new hook --type stack hook3
Args CLI:
● $ terraspace new arg --type project mpyarg
● $ terraspace new arg --type module mymarg
● $ terraspace new arg --type stack mysarg
Recomendaciones
1. Crear Terraform módulos propios solo cuando sea necesario y usar
preferentemente https://registry.terraform.io/
2. Siempre tener en cuenta DRY (Don’t Repeat Yourself)
3. Leer siempre la documentación (RTFM) https://terraspace.cloud/docs/intro/
4. A veces hacer una PoC puede evitar dolores de cabeza en el futuro.
5. No tool obsession, que la herramienta se adecue a la solución.
6. No existe la bala de plata.
7. Replique y modifique https://github.com/mario21ic/terraspace-demo

Más contenido relacionado

La actualidad más candente

DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
DevOps Lifecycle | Edureka
DevOps Lifecycle | EdurekaDevOps Lifecycle | Edureka
DevOps Lifecycle | EdurekaEdureka!
 
Continuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCPContinuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCPKAI CHU CHUNG
 
Service Mesh - Why? How? What?
Service Mesh - Why? How? What?Service Mesh - Why? How? What?
Service Mesh - Why? How? What?Orkhan Gasimov
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...Jasmine Conseil
 
Infrastructure Deployment with Docker & Ansible
Infrastructure Deployment with Docker & AnsibleInfrastructure Deployment with Docker & Ansible
Infrastructure Deployment with Docker & AnsibleRobert Reiz
 
Gitlab flow solo
Gitlab flow soloGitlab flow solo
Gitlab flow soloviniciusban
 
Containers and workload security an overview
Containers and workload security an overview Containers and workload security an overview
Containers and workload security an overview Krishna-Kumar
 
Google Cloud Platform monitoring with Zabbix
Google Cloud Platform monitoring with ZabbixGoogle Cloud Platform monitoring with Zabbix
Google Cloud Platform monitoring with ZabbixMax Kuzkin
 
DevOps 101 - an Introduction to DevOps
DevOps 101  - an Introduction to DevOpsDevOps 101  - an Introduction to DevOps
DevOps 101 - an Introduction to DevOpsRed Gate Software
 

La actualidad más candente (20)

DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
DevOps Lifecycle | Edureka
DevOps Lifecycle | EdurekaDevOps Lifecycle | Edureka
DevOps Lifecycle | Edureka
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Microservice architecture
Microservice architectureMicroservice architecture
Microservice architecture
 
Continuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCPContinuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCP
 
GitLab
GitLabGitLab
GitLab
 
Service Mesh - Why? How? What?
Service Mesh - Why? How? What?Service Mesh - Why? How? What?
Service Mesh - Why? How? What?
 
GitLab.pptx
GitLab.pptxGitLab.pptx
GitLab.pptx
 
CI-CD WITH GITLAB WORKFLOW
CI-CD WITH GITLAB WORKFLOWCI-CD WITH GITLAB WORKFLOW
CI-CD WITH GITLAB WORKFLOW
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
 
Infrastructure Deployment with Docker & Ansible
Infrastructure Deployment with Docker & AnsibleInfrastructure Deployment with Docker & Ansible
Infrastructure Deployment with Docker & Ansible
 
Gitlab flow solo
Gitlab flow soloGitlab flow solo
Gitlab flow solo
 
Architecting Applications
Architecting ApplicationsArchitecting Applications
Architecting Applications
 
Containers and workload security an overview
Containers and workload security an overview Containers and workload security an overview
Containers and workload security an overview
 
Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
 
Google Cloud Platform monitoring with Zabbix
Google Cloud Platform monitoring with ZabbixGoogle Cloud Platform monitoring with Zabbix
Google Cloud Platform monitoring with Zabbix
 
Kali linux.ppt
Kali linux.pptKali linux.ppt
Kali linux.ppt
 
DevOps 101 - an Introduction to DevOps
DevOps 101  - an Introduction to DevOpsDevOps 101  - an Introduction to DevOps
DevOps 101 - an Introduction to DevOps
 

Similar a Terraform Framework con Terraspace

Docker y Kubernetes, en busca de la alta disponibilidad
Docker y Kubernetes, en busca de la alta disponibilidadDocker y Kubernetes, en busca de la alta disponibilidad
Docker y Kubernetes, en busca de la alta disponibilidadÓscar De Arriba González
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Restorando
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C SharpEdgardo Martinez
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualizaciónMarcelo Ochoa
 
administracion de sistemas de informacion
administracion de sistemas de informacionadministracion de sistemas de informacion
administracion de sistemas de informacionStivenLopez46
 
Ingeniería Inversa en Android. Rooted Labs. Rooted CON 2012.
Ingeniería Inversa en Android.  Rooted Labs. Rooted CON 2012.Ingeniería Inversa en Android.  Rooted Labs. Rooted CON 2012.
Ingeniería Inversa en Android. Rooted Labs. Rooted CON 2012.Internet Security Auditors
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scalajose diaz
 

Similar a Terraform Framework con Terraspace (20)

Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Kubernetes workshop
Kubernetes workshopKubernetes workshop
Kubernetes workshop
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Docker y Kubernetes, en busca de la alta disponibilidad
Docker y Kubernetes, en busca de la alta disponibilidadDocker y Kubernetes, en busca de la alta disponibilidad
Docker y Kubernetes, en busca de la alta disponibilidad
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 
Usando docker
Usando dockerUsando docker
Usando docker
 
Metacoretex
MetacoretexMetacoretex
Metacoretex
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualización
 
administracion de sistemas de informacion
administracion de sistemas de informacionadministracion de sistemas de informacion
administracion de sistemas de informacion
 
Introducción a ndk
Introducción a ndkIntroducción a ndk
Introducción a ndk
 
Ingeniería Inversa en Android. Rooted Labs. Rooted CON 2012.
Ingeniería Inversa en Android.  Rooted Labs. Rooted CON 2012.Ingeniería Inversa en Android.  Rooted Labs. Rooted CON 2012.
Ingeniería Inversa en Android. Rooted Labs. Rooted CON 2012.
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Introduccion Java.ppt
Introduccion Java.pptIntroduccion Java.ppt
Introduccion Java.ppt
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Kubernetes para developers
Kubernetes para developersKubernetes para developers
Kubernetes para developers
 
Webpack desde cero
Webpack desde ceroWebpack desde cero
Webpack desde cero
 
Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
 
Sistema de colas Condor en CICA
Sistema de colas Condor en CICASistema de colas Condor en CICA
Sistema de colas Condor en CICA
 

Más de Mario IC

Dominando AWS KMS desde cifrado básico hasta firma avanzada - aws community d...
Dominando AWS KMS desde cifrado básico hasta firma avanzada - aws community d...Dominando AWS KMS desde cifrado básico hasta firma avanzada - aws community d...
Dominando AWS KMS desde cifrado básico hasta firma avanzada - aws community d...Mario IC
 
Aws Security Latam - Criptografia con KMS
Aws Security Latam - Criptografia con KMSAws Security Latam - Criptografia con KMS
Aws Security Latam - Criptografia con KMSMario IC
 
Aws Community Day Guatemala Criptografia con AWS KMS
Aws Community Day Guatemala Criptografia con AWS KMSAws Community Day Guatemala Criptografia con AWS KMS
Aws Community Day Guatemala Criptografia con AWS KMSMario IC
 
Testing Ansible Playbook con Molecule + TestInfra
Testing Ansible Playbook con Molecule + TestInfraTesting Ansible Playbook con Molecule + TestInfra
Testing Ansible Playbook con Molecule + TestInfraMario IC
 
Automatización de tareas con Ansible
Automatización de tareas con AnsibleAutomatización de tareas con Ansible
Automatización de tareas con AnsibleMario IC
 
Earthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroidesEarthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroidesMario IC
 
Infraestructura como Codigo para Developers
Infraestructura como Codigo para DevelopersInfraestructura como Codigo para Developers
Infraestructura como Codigo para DevelopersMario IC
 
Cloud native Computing Perú Octubre
Cloud native Computing Perú OctubreCloud native Computing Perú Octubre
Cloud native Computing Perú OctubreMario IC
 
Agiles Peru 2019 - Infrastructure As Code
Agiles Peru 2019 - Infrastructure As CodeAgiles Peru 2019 - Infrastructure As Code
Agiles Peru 2019 - Infrastructure As CodeMario IC
 
Workshop Infrastructure as Code - Suestra
Workshop Infrastructure as Code - SuestraWorkshop Infrastructure as Code - Suestra
Workshop Infrastructure as Code - SuestraMario IC
 
Docker Compose to Production with Docker Swarm
Docker Compose to Production with Docker SwarmDocker Compose to Production with Docker Swarm
Docker Compose to Production with Docker SwarmMario IC
 
GDG Lima - Docker Compose
GDG Lima - Docker ComposeGDG Lima - Docker Compose
GDG Lima - Docker ComposeMario IC
 
Docker Lima meetup - 22 de junio
Docker Lima meetup - 22 de junioDocker Lima meetup - 22 de junio
Docker Lima meetup - 22 de junioMario IC
 
Docker Compose para el Docker Lima Meetup Mayo
Docker Compose para el Docker Lima Meetup MayoDocker Compose para el Docker Lima Meetup Mayo
Docker Compose para el Docker Lima Meetup MayoMario IC
 
Testing en BDD con Python y Behave
Testing en BDD con Python y BehaveTesting en BDD con Python y Behave
Testing en BDD con Python y BehaveMario IC
 
Infrastructure as Code with Terraform
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with TerraformMario IC
 
Docker Birthday Peru #dockerbday
Docker Birthday Peru #dockerbdayDocker Birthday Peru #dockerbday
Docker Birthday Peru #dockerbdayMario IC
 
Modelado de API con RAML
Modelado de API con RAMLModelado de API con RAML
Modelado de API con RAMLMario IC
 
Docker Ecosystem: Part V - Docker Registry
Docker Ecosystem: Part V - Docker RegistryDocker Ecosystem: Part V - Docker Registry
Docker Ecosystem: Part V - Docker RegistryMario IC
 
Docker Ecosystem: Part IV - Swarm
Docker Ecosystem: Part IV - SwarmDocker Ecosystem: Part IV - Swarm
Docker Ecosystem: Part IV - SwarmMario IC
 

Más de Mario IC (20)

Dominando AWS KMS desde cifrado básico hasta firma avanzada - aws community d...
Dominando AWS KMS desde cifrado básico hasta firma avanzada - aws community d...Dominando AWS KMS desde cifrado básico hasta firma avanzada - aws community d...
Dominando AWS KMS desde cifrado básico hasta firma avanzada - aws community d...
 
Aws Security Latam - Criptografia con KMS
Aws Security Latam - Criptografia con KMSAws Security Latam - Criptografia con KMS
Aws Security Latam - Criptografia con KMS
 
Aws Community Day Guatemala Criptografia con AWS KMS
Aws Community Day Guatemala Criptografia con AWS KMSAws Community Day Guatemala Criptografia con AWS KMS
Aws Community Day Guatemala Criptografia con AWS KMS
 
Testing Ansible Playbook con Molecule + TestInfra
Testing Ansible Playbook con Molecule + TestInfraTesting Ansible Playbook con Molecule + TestInfra
Testing Ansible Playbook con Molecule + TestInfra
 
Automatización de tareas con Ansible
Automatización de tareas con AnsibleAutomatización de tareas con Ansible
Automatización de tareas con Ansible
 
Earthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroidesEarthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroides
 
Infraestructura como Codigo para Developers
Infraestructura como Codigo para DevelopersInfraestructura como Codigo para Developers
Infraestructura como Codigo para Developers
 
Cloud native Computing Perú Octubre
Cloud native Computing Perú OctubreCloud native Computing Perú Octubre
Cloud native Computing Perú Octubre
 
Agiles Peru 2019 - Infrastructure As Code
Agiles Peru 2019 - Infrastructure As CodeAgiles Peru 2019 - Infrastructure As Code
Agiles Peru 2019 - Infrastructure As Code
 
Workshop Infrastructure as Code - Suestra
Workshop Infrastructure as Code - SuestraWorkshop Infrastructure as Code - Suestra
Workshop Infrastructure as Code - Suestra
 
Docker Compose to Production with Docker Swarm
Docker Compose to Production with Docker SwarmDocker Compose to Production with Docker Swarm
Docker Compose to Production with Docker Swarm
 
GDG Lima - Docker Compose
GDG Lima - Docker ComposeGDG Lima - Docker Compose
GDG Lima - Docker Compose
 
Docker Lima meetup - 22 de junio
Docker Lima meetup - 22 de junioDocker Lima meetup - 22 de junio
Docker Lima meetup - 22 de junio
 
Docker Compose para el Docker Lima Meetup Mayo
Docker Compose para el Docker Lima Meetup MayoDocker Compose para el Docker Lima Meetup Mayo
Docker Compose para el Docker Lima Meetup Mayo
 
Testing en BDD con Python y Behave
Testing en BDD con Python y BehaveTesting en BDD con Python y Behave
Testing en BDD con Python y Behave
 
Infrastructure as Code with Terraform
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with Terraform
 
Docker Birthday Peru #dockerbday
Docker Birthday Peru #dockerbdayDocker Birthday Peru #dockerbday
Docker Birthday Peru #dockerbday
 
Modelado de API con RAML
Modelado de API con RAMLModelado de API con RAML
Modelado de API con RAML
 
Docker Ecosystem: Part V - Docker Registry
Docker Ecosystem: Part V - Docker RegistryDocker Ecosystem: Part V - Docker Registry
Docker Ecosystem: Part V - Docker Registry
 
Docker Ecosystem: Part IV - Swarm
Docker Ecosystem: Part IV - SwarmDocker Ecosystem: Part IV - Swarm
Docker Ecosystem: Part IV - Swarm
 

Último

Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 

Último (7)

Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 

Terraform Framework con Terraspace

  • 1. Terraspace The definitive Terraform framework by @mario21ic
  • 2. Una Infraestructura “chiquitita” 1. Un EC2 + EIP (zona publica) con el App de la empresa y RDS. 2. Un ELB para carga y EC2 en 2 zonas para HA. 3. Un VPC propio, EC2 y RDS en zonas privadas y ELB en zona publica. 4. Un par de SSM roles para evitar bastion e IPs en Security Groups.
  • 3. 1.- Un EC2 + EIP (zona publica) con el App de la empresa y RDS.
  • 4. 2.- Un ELB para carga y EC2 en 2 zonas para HA.
  • 5. 3. Un VPC propio, EC2 y RDS en zonas privadas y ELB en zona publica.
  • 6. 3. Un VPC propio, EC2 y RDS en zonas privadas y ELB en zona publica.
  • 7. 4. Un par de SSM Roles para evitar bastion e IPs en Security Groups
  • 8. 1. Desplegar lo mismo para: a. Dev.- una aws account en especifico. b. Test.- en otra account pues se elimina todo a fin de semana. c. Stage.- en la región Oregon. d. Prod.- region Virginia. 2. Desplegar lo mismo en la cuenta Aws del cliente. Nuevos requerimientos
  • 9. Algunas consideraciones 1. El código de la infraestructura debe ejecutarse en otra cuenta (backend s3). 2. El mismo Environment (qa, stage, dev, etc) en otra aws region. 3. DRY en variables, módulos, backends, providers, etc. 4. Manejo de Aws Secrets en el código. 5. Debemos agregar Tests de Integración y Unitarios. 6. Estandarizar la estructura de las carpetas. 7. Entender y graficar las dependencias.
  • 10. ● Terraform Framework ● Provee una estructura organizada de directorios ● Convenciones sobre configuraciones (app/modules, app/stacks, config/terraform) ● DRY ● Escrito en Ruby ● https://terraspace.cloud/ Terraspace
  • 11. ● DRY (config, modules, stacks, helpers, hooks, etc) ● Generators (projects, modules, stacks, tfvars, etc) ● Multiple Environments (tfvars and layering) ● Deploy Multiple Stacks ● Secrets support ● Terrafile ● Configurable Hooks & CLI ● Testing Terraspace Features
  • 13. Modules & Stacks Modules: Son piezas de código reutilizables y génericos. Stacks: Usan los modules para generar infraestructura de una solución en especifica.
  • 14. Algunas soluciones propias 1. Dividir recetarios y guardar valores en Consul: ○ Network: vpc, subnets, acl, nat gateway, internet gateway, security groups, etc ○ IAM: users, roles, policies, etc ○ Components: elb, ec2, rds, k8s cluster, autoscaling, launch template, target group, etc Inconvenientes: ● Necesitas desplegar Consul y mantenerlo. ● Codigo HCL para leer y escribir en Consul. Ademas de invocarlo en recetario. ● Outputs desperdiciados. ● Estados de cada componente en un S3 bucket y diferentes Keys (paths).
  • 15. Backends Generación automatica del backend.tf de clouds como: ● Aws: S3 bucket y DynamoDB (locks) ● Azure Storage Account ● Google Cloud Storage (GCS) Revisar config/terraform/backend.tf
  • 16. Backends Usando variables: ● Account Id ● Region ● Env
  • 17. Locks Para evitar colisiones en la actualización de recursos se requiere de una tabla de “locks” en Aws DynamoDB. Revisar config/terraform/backend.tf
  • 18. Algunas soluciones 1. Crear un script para reemplazar el Backend antes de cada terraform apply Inconvenientes: ● Crear el script y testearlo. ● Se debe crear S3 bucket y DynamoDB para cada proyecto.
  • 19. Tfvars Layering Usar el mismo código para crear múltiples Environments. 1. base.tfvars valores iniciales 2. dev.tfvars puede sobreescribir valores. 3. region/dev.tfvars para una region en especifico. 4. account/dev.tfvars para una cuenta en especifico.
  • 20. Algunas soluciones 1. Script a mano que lea un base.tfvars y haga un merge con el del entorno dev.tfvars por ejemplo Inconvenientes: ● Como validar que se están tomando los valores? ● Hacer test del script
  • 21. Secrets Supports Puedes leer datos desde: ● Aws Secrets Manager ● Aws SSM Parameter Store ● Azure Key Vault ● Google Secrets Manager
  • 22. Algunas soluciones propias 1. Script para leer datos y luego reemplazar el codigo antes de hacer terraform apply. 2. Usar Hashicorp Vault Inconvenientes: ● Llenarte de scripts y parámetros ● Como testearias los scripts? ● Instalación de mas servicios y debes mantenerlos. ● Fija que un valor solo se saque de un cloud provider.
  • 23. Multiples Stacks Desplegar y Eliminar Multiples Stacks con un solo comando: ● $ terraspace all up ● $ terraspace all down Otros comandos: ● $ terraspace all init ● $ terraspace all plan ● $ terraspace all output ● $ terraspace all providers ● $ terraspace all refresh ● $ terraspace all validate
  • 24. Algunas soluciones 1. Crear un script para que recorra cada carpeta y haga: $ terraform init $ terraform workspace select myenv $ terraform plan -var-file=myenv.tfvars $ terraform apply -var-file=myenv.tfvars Inconvenientes: ● Manejo de Estados por cada carpeta y Backend en S3.
  • 25. Terraform Modules centralizado Se define en Terrafile como por ejemplo: mod "sg", source: "terraform-aws-modules/security-group/aws", version: "3.10.0" mod "vpc", source: "terraform-aws-modules/vpc/aws", version: "3.10.0", stack: "simple-vpc" Instalacion y uso: $ terraspace bundle $ ls -la vendor/modules
  • 26. Generators Enfocarnos en el código y olvidarnos de las estructuras. Usando el comando: terraspace new ● project myproject ● module mymodule ● stack mystack ● helper myhelper ● hook myhook ● arg myarg ● test mytest Nuevo Environment: $ export TS_ENV=qa $ terraspace seed mystack
  • 27. Algunas soluciones 1. Tener plantillas para cada tipo de recurso: vars, outputs, module, etc 2. Crear un script para copiar las plantillas y pegarlas en cada carpeta. Inconvenientes: ● Un script para cada cosa
  • 28. Testing ● Concepto de Test Harnesses, copiar y ejecutar en un nuevo directorio. ● Deploy de todo el Modulo o Stack y Eliminar todo al terminar. ● Tests de Integración ● Tests Unitarios para Helpers
  • 29. Configurable Extender las funcionalidades de Modulos, Stacks, etc mediante: Hooks: ● $ terraspace new hook --type project hook1 ● $ terraspace new hook --type module hook2 ● $ terraspace new hook --type stack hook3 Args CLI: ● $ terraspace new arg --type project mpyarg ● $ terraspace new arg --type module mymarg ● $ terraspace new arg --type stack mysarg
  • 30. Recomendaciones 1. Crear Terraform módulos propios solo cuando sea necesario y usar preferentemente https://registry.terraform.io/ 2. Siempre tener en cuenta DRY (Don’t Repeat Yourself) 3. Leer siempre la documentación (RTFM) https://terraspace.cloud/docs/intro/ 4. A veces hacer una PoC puede evitar dolores de cabeza en el futuro. 5. No tool obsession, que la herramienta se adecue a la solución. 6. No existe la bala de plata. 7. Replique y modifique https://github.com/mario21ic/terraspace-demo