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

Untitled

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.

Untitled

Administrar la infraestructura

Terraform

Es un binario que interactúa con las APIs de los proveedores de nube. Para desplegar una infraestructura con Terrafom se requiere:

Untitled

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