Esta es una guía sobre como hacer bootstrapping de servidores usando Terraform y Salt, el objetivo es explicar los pasos necesarios para desplegar una nueva maquina virtual (instancia EC2) desde Terraform, instalar Salt minion y conectarlo con el servidor Salt master para hacer la configuración final del servidor.
Este es un mecanismo efectivo para producir componentes de infraestructura reusables y escalables en granjas de servidores.
Escenario
Necesitamos automatizar el despliegue de una granja de servidores web donde la intervención manual sea mínima.
Despliegue de la instancia usando Terraform y bootstrapping inicial
Ejemplo de código en Terraform, se incluye solo parte de creación de la instancia para mantener el foco en el proceso.
Archivo: main.tf
resource "aws_instance" "instance" {
ami = var.instance_image_id
instance_type = var.instance_type
subnet_id = var.subnet
iam_instance_profile = aws_iam_instance_profile.instance_profile.name
key_name = var.key_name
vpc_security_group_ids = [ aws_security_group.security_group.id ]
root_block_device {
volume_type = var.root_volume_type
volume_size = var.root_volume_size
}
user_data =
#!/bin/sh
curl -o bootstrap-salt.sh -L https://bootstrap.saltproject.io
chmod +x bootstrap-salt.sh
./bootstrap-salt.sh -A "${var.bootstrap_salt_master}"
EOF
}
Lo más importante del código anterior es el contenido de user_data, ya que en ese campo se coloca todo el código de bootstrapping inicial para instalar Salt.
1. Se descarga el script desde el sitio de bootstrapping de Salt
2. Se le dan permisos de ejecución
3. Se ejecuta el script especificando el Salt master ( -A "${var.bootstrap_salt_master}" )
Una vez que el código terraform esta listo, se puede desplegar la instancia usando:
terraform apply
Una vez que se despliega la instancia, esta se conectara inmediatamente al servidor Salt master, en Salt master se tiene que autorizar la llave y comenzar a administrarlo desde el servidor Salt master como es usual.
salt-key -a keyname
-a keyname es la llave a aceptar en el servidor Salt master
Una vez que la llave se acepta, lo que sigue es comenzar a administrar el servidor desde el Salt master y aplicar toda la configuración correspondiente, instalación de servicios y aplicaciones, configuraciones, permisos, etc; preparada usando
salt keyname state.hightstate
Y con eso ya tenemos una nueva instancia desplegada desde terraform y administrada desde Salt.
Conclusión
Utilizar Terraform junto con Salt brinda grandes posibilidades de automatización agregando valor para hacer activación de servicios repetibles, reusables, y escalables sin necesidad de administración manual.