Neste guia, vou mostrar como usei cf-terraforming
Para importar os recursos do CloudFlare para o código Terraform.
Nota importante: Na iteração atual, uso o Terraform principalmente como um mecanismo de armazenamento de backup para os recursos do CloudFlare. Gerenciamento e modificações continuarão sendo realizados manualmente através do painel Cloudflare, pois essa abordagem é geralmente mais rápida e eficiente.
Configurando o acesso ao Cloudflare
Antes de usar o Terraform com o CloudFlare, os usuários precisam configurar as variáveis de ambiente apropriadas.
Usando uma chave de API
Se autenticar através de uma chave da API, exporte as seguintes variáveis de ambiente:
export CLOUDFLARE_API_KEY=
export CLOUDFLARE_EMAIL=
Usando um token de API
Como alternativa, a autenticação pode ser feita com um token da API exportando apenas esta variável:
export CLOUDFLARE_API_TOKEN=
A autenticação do token da API da CloudFlare é flexível, mas requer configuração complexa. Para simplificar o processo, recomendamos o uso de uma chave da API associada a uma conta de usuário. No entanto, use -o com cautela, pois a chave da API concede acesso total a todas as ações do CloudFlare.
Para encontrar a chave da API global ou criar um token da API, visite os tokens da API CloudFlare.
Usando cf-terraforming
Cloudflare fornece uma ferramenta oficial, cf-terraforming
que pode gerar a configuração e o estado da Terraform a partir dos recursos existentes. Esta é a abordagem recomendada para automatizar o processo de importação.
- Testado em
cf-terraforming
versão0.23.3
. - Nem todos os recursos são suportados por
cf-terraforming
. Encontre a lista de recursos suportados aqui. - Esteja ciente de que, depois de atualizar o fornecedor da CloudFlare Terraform para a versão 5.xx ou superior, as definições de recursos podem mudar.
Guia passo a passo: importação com terras de CF cf-terraforming
1. Inicialize o fornecedor do Terraform:
Para usar esta ferramenta, inicialize o provedor. Crie um arquivo temporário, por exemplo, providers.tf
com a seguinte configuração:
terraform {
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "4.43.0"
}
}
}
provider "cloudflare" {}
Em seguida, inicialize o Terraform:
terraform init
2. Instale cf-terraforming
:
brew install cloudflare/cloudflare/cf-terraforming
Ou faça o download do lançamento do repositório do GitHub.
3. Gere Configuração do Recurso do Terraform (por exemplo, para um registro DNS):
cf-terraforming generate --resource-type cloudflare_record --zone > generate.tf
Exemplo de saída:
resource "cloudflare_record" "terraform_managed_resource_" {
content = "EXAMPLE_CONTENT"
name = "EXAMPLE_NAME"
proxied = false
ttl = 1
type = "TXT"
zone_id = ""
}
4. Gere a configuração de importação do Terraform:
cf-terraforming import --resource-type cloudflare_record --zone --modern-import-block > import.tf
Exemplo de saída:
import {
to = cloudflare_record.terraform_managed_resource_
id = "/"
}
5 Aplique configuração do Terraform:
terraform apply
Considerações importantes
Um aspecto crucial do uso cf-terraforming
está distinguindo entre os recursos no nível da conta e na zona. Antes de usar cf-terraforming
consulte a documentação de recursos suportados para entender o escopo de recursos.
Para otimizar o processo de importação, automatize cf-terraforming
usando um loop para processar múltiplos ZONE_ID
valores de uma só vez.
Notas importantes
- Nesse contexto de usar o Terraform, o objetivo principal é o armazenamento de backup, em vez de gerenciamento direto de recursos.
- Se você tiver um grande número de recursos, o código gerado poderá se tornar extenso, dificultando a navegação e a manutenção.
- Para manter o estado de Terraform gerenciável, considere estruturar recursos em módulos lógicos em vez de criar um único estado monolítico.
- Recomendamos não modificar o código gerado automaticamente. Em vez disso, faça alterações no painel Cloudflare e reimporte os recursos conforme necessário.
Seguindo essa abordagem, você pode fazer backup com eficiência dos recursos do CloudFlare, mantendo um estado de Terraform claro e gerenciável.