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.