La Infraestructura como código es un enfoque para la automatización de infraestructura basado en las prácticas del desarrollo de software. Los principios que siguen son: Se puede reproducir fácilmente, son desechables, consistentes, repetibles y fácil de cambiar.
Practicas generales: Utilizar archivos de definición, Sistemas y procesos documentados, manejo de versiones, realizar cambios pequeños y asegurar la disponibilidad.
Tipos de infraestructura
Infraestructura mutable: Es cuando el estado de un servidor cambia
Ejemplo: cuando se lanza la nueva version y el aplicativo lo enlaza todo en el mismo servidor
Infraestructura inmutable: Es cuando se destruye un servidor y se crea uno nuevo con los cambios
Ejemplo: La instancia A es la version antigua que se elimina y la instancia B es la nueva version que se implementa en otro servidor.
Terraform
Es un binario que interactúa con las APIs de los proveedores de nube. Para desplegar una infraestructura con Terrafom se requiere:
file **main.tf**
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
# The provider block configures the specified provider
provider "aws" {
region = "us-west-2"
}
# Resource blocks have two strings before the block: tthe resource type and the resource name.
# the resource type and resource name form a unique ID for the resource.
# For example, the ID for your EC2 instance is aws_instance.app_server
resource "aws_instance" "app_server" {
ami = "ami-08d70e59c07c61a3a"
instance_type = "t2.micro"
tags = {
# Name = "ExampleAppServerInstance"
Name = var.instance_name
}
}
file **variables.tf**
variable "instance_name" {
description = "Value of the Name tag for the EC2 instance"
type = string
default = "ExampleAppServerInstance"
}
file **outputs.tf**
output "instance_id" {
description = "ID of the EC2 instance"
value = aws_instance.app_server.id
}
output "instance_public_ip" {
description = "Public IP address of the EC2 instance"
value = aws_instance.app_server.public_ip
}
terraform init
terraform apply
terraform destroy
terraform fmt
terraform validate
terraform show
terraform state list
terraform destroy
# set variable
terraform apply -var "instance_name=YetAnotherName"
# View Outpus
terraform output
Packer
Packer es una herramienta para construir infraestructura inmutable desarrollada por HashiCorp que nos va a permitir crear imágenes en cualquier proveedor de nube.
Elementos de Packer