Skip to main content

Gerenciando as configurações no Cloudflare com Terraform

A intenção aqui é ir direto ao ponto e mostrar por meio de exemplos como gerenciar seu DNS e algumas configurações da sua conta no Cloudflare utilizando o Terraform.

As vantagens deste modelo são inúmeras, entre elas a facilidade de ter sua estrutura definida por código, a possibilidade de versionamento, um backup para algum eventual problema…

As respectivas documentações podem ser encontradas nos links abaixo:

$ tree
.
├── seudominio-com.tf
└── vars.tf

Onde:

  • seudominio-com.tf - Aqui você pode usar qualquer nome para o arquivo, contanto que a extensão seja .cf. É onde teremos todas configurações do nosso domínio.
  • vars.tf - Arquivo onde serão especificadas todas variáveis que serão utilizadas. Também utilizeo para as configurações do Provider, no caso, o Cloudflare.

vars.tf

Nas configurações do Provider, o email é o mesmo que você utiliza na sua conta do Cloudflare, enquanto o Token pode ser obtido no seu perfil em “Global API Key”.

A variável “domain” vai representar o seu domínio nas configurações.

provider "cloudflare" {
  email = "[email protected]"
  token = "xxxxx"
}

variable "domain" {
  default = "seudominio.com"
}

seudominio-com.tf

No exemplo abaixo temos um modelo de como é a definição de um CNAME, ALAIS, TXT e MX. Também temos algumas configurações para um site com HTTPS e dois exemplos de Page Rules.

## cname ----------------------------------------
resource "cloudflare_record" "www" {
  domain  = "${var.domain}"
  name    = "www"
  proxied = true
  type    = "CNAME"
  value   = "rdfranzen.github.io"
}

## alias ----------------------------------------
resource "cloudflare_record" "teste" {
  domain  = "${var.domain}"
  name    = "teste"
  proxied = false
  type    = "A"
  value   = "1.1.1.1"
}

## txt ------------------------------------------
resource "cloudflare_record" "spf" {
  domain = "${var.domain}"
  name   = "${var.domain}"
  type   = "TXT"
  value  = "v=spf1 include:_spf.google.com ~all"
}

## mx -------------------------------------------
resource "cloudflare_record" "mx-1" {
  domain   = "${var.domain}"
  name     = "${var.domain}"
  priority = "1"
  type     = "MX"
  value    = "aspmx.l.google.com"

## settings -------------------------------------
resource "cloudflare_zone_settings_override" "settings" {
  name = "${var.domain}"
  settings {
    always_use_https         = "off"
    automatic_https_rewrites = "off"
    brotli                   = "on"
    challenge_ttl            = "3600"
    ip_geolocation           = "on"
    opportunistic_encryption = "on"
    pseudo_ipv4              = "off"
    rocket_loader            = "on"
    security_level           = "medium"
    ssl                      = "full"
    tls_1_3                  = "on"
    websockets               = "on"
    minify                   = {
      js   = "on"
      css  = "on"
      html = "on"
    }
  }
}

## page rules -----------------------------------
resource "cloudflare_page_rule" "forward-to-https-10" {
  priority = "10"
  target   = "http://${var.domain}/*"
  zone     = "${var.domain}"
  actions  = {
    forwarding_url {
      url = "https://meudominio.com/$1"
      status_code = 301
    }
  }
}
resource "cloudflare_page_rule" "always-https" {
  priority = "20"
  target   = "https://www.${var.domain}/"
  zone     = "${var.domain}"
  actions  = {
    always_use_https = "true"
  }
}

Então…

Lembrando que este post não foi para apresentar o Terraform, mas sim apenas para dar um exemplo de configuração com o Provider do Cloudflare.