¿Cómo usar cloud-init con Terraform?

24

Estoy trabajando con Digital Ocean y Terraform y ya puedo automatizar el dominio, el subdominio, las preferencias de red y el host, pero hay una sección llamada User dataque se ve así:

Datos del usuario

La descripción de ese campo dice Allows the use of Cloud-init to configure your droplet. Mirando a mi alrededor encontré la documentación .

Mi pregunta es, ¿cómo aprovechar esto mientras uso Terraform ?

Gepser
fuente

Respuestas:

21

Los archivos de inicio en la nube son esencialmente códigos de arranque, que se ejecutan antes de cada inicio y pueden, entre otros, modificar archivos, configurar servicios, crear usuarios, etc.

No todos los tipos de gotas admiten todas las funcionalidades de cloud-init, por ejemplo, CoreOS usa su propia implementación, con un subconjunto muy limitado de valores válidos.

Para usar esto en terraform, simplemente proporcione el archivo cloud-init durante la creación de gotitas:

main.tf:

resource "digitalocean_droplet" "web" {
  image              = "coreos-stable"
  name               = "web"
  region             = "lon1"
  size               = "2gb"
  private_networking = true
  ssh_keys           = ["${digitalocean_ssh_key.dodemo.id}"]
  user_data          = "${file("web.conf")}"
}

web.conf:

#cloud-config
coreos:
  units:
    - name: "etcd2.service"
      command: "start"
    - name: "fleet.service"
      command: "start"

Esto, por ejemplo, creará una gota, donde CoreOS ejecutará etcd2 y la flota durante el inicio

Puede encontrar algunos ejemplos más en este repositorio , donde muestro cómo se pueden usar estas opciones de configuración para configurar algunos servicios simples basados ​​en Docker en CoreOS

SztupY
fuente
5

Cuando crea un grupo de Auto Scaling con Terraform, puede especificar el user_dataque utilizarán las instancias creadas por este ASG. Documentado aquí: https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#user_data

También puede crear una única instancia EC2 y proporcionarla user_datapara su uso: https://www.terraform.io/docs/providers/aws/r/instance.html#user_data

La documentación de AWS EC2 explica cómo user_datase pasa al cloud-initservicio que se ejecuta en la mayoría de las distribuciones de Linux disponibles como AMI en AWS: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user- data-cloud-init

Evgeny
fuente