How to Use Terraform with CloudFlare

CloudFlare logo

Terraform is a well-liked infrastructure as code device, and when paired with CloudFlare, makes managing advanced configurations inside of CloudFlare a lot more straightforward. For the ones no longer acquainted, Terraform makes use of the HCL configuration language to outline an infrastructure configuration that may then be used to use the asked settings to the supplier. CloudFlare gives DNS services and products, safety, and edge computing services and products that pair completely with the Terraform device.

Putting in Terraform

Terraform can be utilized both on Home windows or on Linux. The Terraform binary itself is a unmarried executable, and simply must be downloaded and positioned into the trail of the device.

Home windows Set up

First, it is important to obtain the Terraform executable for Home windows. As soon as downloaded, position the executable in a Home windows trail location. If you want to position the executable in a distinct location however would find it irresistible out there at any time, you’ll use the next PowerShell code to switch the person’s PATH environmental variable.

[System.Environment]::SetEnvironmentVariable("PATH",(($Env:PATH, "C:Equipment") -Sign up for ";"),"Person")

This can be utilized to switch the device PATH through converting Person to Gadget. You’re going to want Administrative rights to do that.

Linux Set up

Just like Home windows, you are going to obtain the most recent free up of Terraform. As a result of chances are you’ll no longer all the time be the usage of a GUI, you’ll do that by means of the next shell code. Change with the model of the code, like

wget <>
mv terraform /usr/bin/

Environment Up Terraform for CloudFlare

To comprise our Terraform configuration, we’re going to make a listing to carry the .tf information, that are the extension of the Terraform configuration information. Create a brand new listing to carry the configuration.

PowerShell 7 on Home windows

New-Merchandise -Identify 'CF_Terraform' -Kind 'Listing'
Set-Location -Trail 'CF_Terraform'

Bash Shell on Linux

mkdir cf_terraform
cd cf_terraform

After getting created and navigated to the listing, we can wish to initialize the Terraform configuration. We first wish to create our configuration dossier. We’re opting not to hardcode our credentials into the configuration dossier. As an alternative, a dossier will go in the ones credentials which might be excluded from model regulate. Talking of which, Git is very really useful to stay monitor of the adjustments.

variable "api_token" 

supplier "cloudflare" 
  model   = "~> 2.nine"
  api_token = var.api_token

The next .auto.tfvars dossier will comprise the secrets and techniques that we go into Terraform however don’t need to decide to model regulate historical past.

# Zone.DNS Permissions
# Instance token under
api_token = "as3uo7WkxL6asdfasdfaME7IdLofKBG9C_Zi-gf"

The cause of the .auto phase of the .tfvars filename is this variable folder will likely be mechanically learn through Terraform on operations as an alternative of explicitly passing it in by means of -var-file="cloudflare.tfvars".

Now that we’ve got either one of our information configured, it’s time to initialize our configuration. This may set up any suppliers which were specified within the supplier phase of our Terraform configuration dossier.

terraform init

Initializing our configuration will install any providers specified in provider section of our Terraform configuration file.

Defining the Terraform CloudFlare Configuration

Now that we’ve got effectively hooked up to our area, we wish to create our configuration. The very first thing we wish to do is adjust our dossier to incorporate the zone_id that we’re going to be focused on the DNS data adjustments to. Upload the next line into the dossier.

# Zone.DNS Permissions
api_token = "as3uo7WkxL6asdfasdfaME7IdLofKBG9C_Zi-gf"
# Explicit Area Zone ID
zone_id   = "fddd89b6e1d52ebdfdasdc8bc02186333"

Subsequent, we wish to outline the data that we’re going to upload to CloudFlare. To try this, we’re going to use the cloudflare_record useful resource to create the data. The layout of that is the next: useful resource sort title. The sort will likely be cloudflare_record, and for the title we can use a_mydomain_com and cname_www. Those names are arbitrary even though, and they may be able to be no matter you desire to.

useful resource "cloudflare_record" "a_mydomain_com" 

useful resource "cloudflare_record" "cname_www" 
  zone_id = var.zone_id
  title    = "www"
  worth   = ""
  sort    = "CNAME"
  ttl     = 1
  proxied = true

One caveat in regards to the names. If you wish to use terraform import to import state on a given document, you’ll have to fit the title with the import document like so:

terraform import cloudflare_record.a_mydomain_com zone_id/record_id

Making plans the Terraform Adjustments

Now that we’ve got our configuration outlined, we will be able to run the terraform plan command, which is able to generate the adjustments between what is understood through Terraform by means of the .tfstate dossier and the CloudFlare setting. If assets have no longer been imported, or that is the primary time operating the command, then Terraform will haven’t any wisdom of our environment and all adjustments will likely be new.

terraform plan

Run the terraform plan command

Making use of the Terraform Adjustments

As soon as you’re assured on your configuration, merely use the observe command. This may suggested for a affirmation, the place you want to sort sure. The output will display the configuration to use and the state.

terraform observe
Use apply command to prompt a confirmation, then type yes. The output shows the configuration to apply and the state.
Use the observe command. This may suggested for a affirmation, the place you want to sort sure. The output will display the configuration to use and the state.


Combining CloudFlare and Terraform is a potent aggregate. When you’ll be able to architect your setting in code and monitor adjustments over the years (the usage of model regulate), you liberate new efficiencies and regulate. Within the tournament that a configuration is improper, it’s trivial to roll again to a previous configuration, which makes improving from mistakes very fast and painless.

Leave a Reply

Your email address will not be published. Required fields are marked *