Como usar o cloud-init com o Terraform?

24

Estou trabalhando com o Digital Ocean e o Terraform e já posso automatizar o domínio, subdomínio, preferências de rede e host, mas há uma seção chamada User dataque se parece com isso:

Dados do usuário

A descrição desse campo diz Allows the use of Cloud-init to configure your droplet. Olhando em volta, encontrei a documentação .

Minha pergunta é: como tirar proveito disso enquanto estiver usando o Terraform ?

Gepser
fonte

Respostas:

21

Os arquivos init na nuvem são essencialmente códigos de inicialização, executados antes de cada inicialização e podem - entre outros - modificar arquivos, configurar serviços, criar usuários etc.

Nem todos os tipos de gotículas suportam todas as funcionalidades do cloud-init, por exemplo, o CoreOS usa sua própria implementação, com um subconjunto muito limitado de valores válidos.

Para usar isso em terraform, basta fornecer o arquivo cloud-init durante a criação de gotículas:

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"

Por exemplo, isso criará uma gota, onde o CoreOS executará o etcd2 e a frota durante a inicialização

Você pode encontrar mais alguns exemplos neste repositório , onde mostro como é possível usar essas opções de configuração para configurar alguns serviços baseados em docker simples no CoreOS

SztupY
fonte
5

Ao criar um grupo de Auto Scaling com Terraform, você pode especificar o user_dataque será usado pelas instâncias criadas por este ASG. Documentado aqui - https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#user_data

Você também pode criar uma única instância do EC2 e fornecer user_datapara ser usado - https://www.terraform.io/docs/providers/aws/r/instance.html#user_data

A documentação do AWS EC2 explica como user_dataé passada para o cloud-initserviço que está sendo executado na maioria das distribuições Linux disponíveis como AMIs na AWS - http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user- data-cloud-init

Evgeny
fonte