Terraform

De TheNets Wiki
Ir para: navegação, pesquisa

https://www.terraform.io/

Como trabalhar com o Terraform

Providers

Os Providers são provedores de serviços, não necessáriamente provedores de servidores na nuvem. Eles variam desde serviços dos GitHub, até VMs, storage e outros serviços da AWS.

Criar um projeto

Primeiro passo é criar um arquivo de provider.tf. Este arquivo conterá tudo que é necessário para atingir os provedores de serviços.

Se o objetivo for criar uma VM no DigitalOcean, por exemplo, o objetivo do Provider será entregar todas as ferramentas para se comunicar com os serviços do DigitalOcean.

Após criar o provider, execute inicialize o Terraform para baixar todos os plugins que serão necessários.

Todos os arquivos baixados serão colocados no diretório do projeto chamada ./.terraform.

terraform init

Projeto Terraform + Digital Ocean

Exemplo de como criar uma infraestrutura utilizando o DigitalOcean.

Outros

Para gerar o MD5 digest da chave pública, execute:

https://stackoverflow.com/questions/9607295/how-do-i-find-my-rsa-key-fingerprint

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub

Arquivos

terraform.tfvars

do_token = "DIGITAL_OCEAN_API_KEY_HERE"
ssh_fingerprint = "MD5_DIGEST_HERE"
pub_key = "~/.ssh/id_rsa.pub"
pvt_key = "~/.ssh/id_rsa"

provider.tf

1 variable "do_token" {}
2 variable "ssh_fingerprint" {}
3 variable "pub_key" {}
4 variable "pvt_key" {}
5 
6 provider "digitalocean" {
7   token = "${var.do_token}"
8   version = "~> 1.1"
9 }

web.tf

 1 resource "digitalocean_droplet" "web" {
 2   image  = "centos-7-x64"
 3   name   = "tf-test-web"
 4   region = "nyc1"
 5   size   = "s-1vcpu-1gb"
 6 
 7   ssh_keys = [
 8       "${var.ssh_fingerprint}"
 9   ]
10 
11   connection {
12       user = "root"
13       type = "ssh"
14       private_key = "${file(var.pvt_key)}"
15       timeout = "2m"
16   }
17 
18   provisioner "remote-exec" {
19       inline = [
20           "export PATH=$PATH:/user/bin",
21           "curl -sSL https://get.docker.com | sudo sh",
22           "systemctl enable docker",
23           "systemctl restart docker",
24           "sudo docker run -d -p 80:5000 thenets/notes"
25       ]
26   }
27 }