Load Balancers
resource cloudflare_load_balancer
required
optional
Time, in seconds, until a client's session expires after being created. Once the expiry time has been reached, subsequent requests may get sent to a different origin server. The accepted ranges per session_affinity policy are: - "cookie" / "ip_cookie": The current default of 23 hours will be used unless explicitly set. The accepted range of values is between [1800, 604800]. - "header": The current default of 1800 seconds will be used unless explicitly set. The accepted range of values is between [30, 3600]. Note: With session affinity by header, sessions only expire after they haven't been used for the number of seconds specified.
Time to live (TTL) of the DNS entry for the IP address returned by this load balancer. This only applies to gray-clouded (unproxied) load balancers.
A mapping of country codes to a list of pool IDs (ordered by their failover priority) for the given country. Any country not explicitly defined will fall back to using the corresponding region_pool mapping if it exists else to default_pools.
Enterprise only: A mapping of Cloudflare PoP identifiers to a list of pool IDs (ordered by their failover priority) for the PoP (datacenter). Any PoPs not explicitly defined will fall back to using the corresponding country_pool, then region_pool mapping if it exists else to default_pools.
A mapping of region codes to a list of pool IDs (ordered by their failover priority) for the given region. Any regions not explicitly defined will fall back to using default_pools.
Specifies the type of session affinity the load balancer should use unless specified as "none". The supported types are: - "cookie": On the first request to a proxied load balancer, a cookie is generated, encoding information of which origin the request will be forwarded to. Subsequent requests, by the same client to the same load balancer, will be sent to the origin server the cookie encodes, for the duration of the cookie and as long as the origin server remains healthy. If the cookie has expired or the origin server is unhealthy, then a new origin server is calculated and used. - "ip_cookie": Behaves the same as "cookie" except the initial origin selection is stable and based on the client's ip address. - "header": On the first request to a proxied load balancer, a session key based on the configured HTTP headers (see session_affinity_attributes.headers) is generated, encoding the request headers used for storing in the load balancer session state which origin the request will be forwarded to. Subsequent requests to the load balancer with the same headers will be sent to the same origin server, for the duration of the session and as long as the origin server remains healthy. If the session has been idle for the duration of session_affinity_ttl seconds or the origin server is unhealthy, then a new origin server is calculated and used. See headers in session_affinity_attributes for additional required configuration.
Steering Policy for this load balancer.
"off": Usedefault_pools."geo": Useregion_pools/country_pools/pop_pools. For non-proxied requests, the country forcountry_poolsis determined bylocation_strategy."random": Select a pool randomly."dynamic_latency": Use round trip time to select the closest pool in default_pools (requires pool health checks)."proximity": Use the pools' latitude and longitude to select the closest pool using the Cloudflare PoP location for proxied requests or the location determined bylocation_strategyfor non-proxied requests."least_outstanding_requests": Select a pool by taking into considerationrandom_steeringweights, as well as each pool's number of outstanding requests. Pools with more pending requests are weighted proportionately less relative to others."least_connections": Select a pool by taking into considerationrandom_steeringweights, as well as each pool's number of open connections. Pools with more open connections are weighted proportionately less relative to others. Supported for HTTP/1 and HTTP/2 connections."": Will map to"geo"if you useregion_pools/country_pools/pop_poolsotherwise"off".
cloudflare_load_balancer
resource "cloudflare_load_balancer" "example_load_balancer" {
zone_id = "699d98642c564d2e855e9661899b7252"
default_pools = ["17b5962d775c646f3f9725cbc7a53df4", "9290f38c5d07c2e2f4df57b1f61d4196", "00920f38ce07c2e2f4df50b1f61d4194"]
fallback_pool = "fallback_pool"
name = "www.example.com"
adaptive_routing = {
failover_across_pools = true
}
country_pools = {
GB = ["abd90f38ced07c2e2f4df50b1f61d4194"]
US = ["de90f38ced07c2e2f4df50b1f61d4194", "00920f38ce07c2e2f4df50b1f61d4194"]
}
description = "Load Balancer for www.example.com"
location_strategy = {
mode = "resolver_ip"
prefer_ecs = "always"
}
networks = ["string"]
pop_pools = {
LAX = ["de90f38ced07c2e2f4df50b1f61d4194", "9290f38c5d07c2e2f4df57b1f61d4196"]
LHR = ["abd90f38ced07c2e2f4df50b1f61d4194", "f9138c5d07c2e2f4df57b1f61d4196"]
SJC = ["00920f38ce07c2e2f4df50b1f61d4194"]
}
proxied = true
random_steering = {
default_weight = 0.2
pool_weights = {
"9290f38c5d07c2e2f4df57b1f61d4196" = 0.5
de90f38ced07c2e2f4df50b1f61d4194 = 0.3
}
}
region_pools = {
ENAM = ["00920f38ce07c2e2f4df50b1f61d4194"]
WNAM = ["de90f38ced07c2e2f4df50b1f61d4194", "9290f38c5d07c2e2f4df57b1f61d4196"]
}
rules = [{
condition = "http.request.uri.path contains \"/testing\""
disabled = true
fixed_response = {
content_type = "application/json"
location = "www.example.com"
message_body = "Testing Hello"
status_code = 0
}
name = "route the path /testing to testing datacenter."
overrides = {
adaptive_routing = {
failover_across_pools = true
}
country_pools = {
GB = ["abd90f38ced07c2e2f4df50b1f61d4194"]
US = ["de90f38ced07c2e2f4df50b1f61d4194", "00920f38ce07c2e2f4df50b1f61d4194"]
}
default_pools = ["17b5962d775c646f3f9725cbc7a53df4", "9290f38c5d07c2e2f4df57b1f61d4196", "00920f38ce07c2e2f4df50b1f61d4194"]
fallback_pool = "fallback_pool"
location_strategy = {
mode = "resolver_ip"
prefer_ecs = "always"
}
pop_pools = {
LAX = ["de90f38ced07c2e2f4df50b1f61d4194", "9290f38c5d07c2e2f4df57b1f61d4196"]
LHR = ["abd90f38ced07c2e2f4df50b1f61d4194", "f9138c5d07c2e2f4df57b1f61d4196"]
SJC = ["00920f38ce07c2e2f4df50b1f61d4194"]
}
random_steering = {
default_weight = 0.2
pool_weights = {
"9290f38c5d07c2e2f4df57b1f61d4196" = 0.5
de90f38ced07c2e2f4df50b1f61d4194 = 0.3
}
}
region_pools = {
ENAM = ["00920f38ce07c2e2f4df50b1f61d4194"]
WNAM = ["de90f38ced07c2e2f4df50b1f61d4194", "9290f38c5d07c2e2f4df57b1f61d4196"]
}
session_affinity = "cookie"
session_affinity_attributes = {
drain_duration = 100
headers = ["x"]
require_all_headers = true
samesite = "Auto"
secure = "Auto"
zero_downtime_failover = "sticky"
}
session_affinity_ttl = 1800
steering_policy = "dynamic_latency"
ttl = 30
}
priority = 0
terminates = true
}]
session_affinity = "cookie"
session_affinity_attributes = {
drain_duration = 100
headers = ["x"]
require_all_headers = true
samesite = "Auto"
secure = "Auto"
zero_downtime_failover = "sticky"
}
session_affinity_ttl = 1800
steering_policy = "dynamic_latency"
ttl = 30
}
data cloudflare_load_balancer
computed
The DNS hostname to associate with your Load Balancer. If this hostname already exists as a DNS record in Cloudflare's DNS, the Load Balancer will take precedence and the DNS record will not be used.
Specifies the type of session affinity the load balancer should use unless specified as "none". The supported types are: - "cookie": On the first request to a proxied load balancer, a cookie is generated, encoding information of which origin the request will be forwarded to. Subsequent requests, by the same client to the same load balancer, will be sent to the origin server the cookie encodes, for the duration of the cookie and as long as the origin server remains healthy. If the cookie has expired or the origin server is unhealthy, then a new origin server is calculated and used. - "ip_cookie": Behaves the same as "cookie" except the initial origin selection is stable and based on the client's ip address. - "header": On the first request to a proxied load balancer, a session key based on the configured HTTP headers (see session_affinity_attributes.headers) is generated, encoding the request headers used for storing in the load balancer session state which origin the request will be forwarded to. Subsequent requests to the load balancer with the same headers will be sent to the same origin server, for the duration of the session and as long as the origin server remains healthy. If the session has been idle for the duration of session_affinity_ttl seconds or the origin server is unhealthy, then a new origin server is calculated and used. See headers in session_affinity_attributes for additional required configuration.
Time, in seconds, until a client's session expires after being created. Once the expiry time has been reached, subsequent requests may get sent to a different origin server. The accepted ranges per session_affinity policy are: - "cookie" / "ip_cookie": The current default of 23 hours will be used unless explicitly set. The accepted range of values is between [1800, 604800]. - "header": The current default of 1800 seconds will be used unless explicitly set. The accepted range of values is between [30, 3600]. Note: With session affinity by header, sessions only expire after they haven't been used for the number of seconds specified.
Steering Policy for this load balancer.
"off": Usedefault_pools."geo": Useregion_pools/country_pools/pop_pools. For non-proxied requests, the country forcountry_poolsis determined bylocation_strategy."random": Select a pool randomly."dynamic_latency": Use round trip time to select the closest pool in default_pools (requires pool health checks)."proximity": Use the pools' latitude and longitude to select the closest pool using the Cloudflare PoP location for proxied requests or the location determined bylocation_strategyfor non-proxied requests."least_outstanding_requests": Select a pool by taking into considerationrandom_steeringweights, as well as each pool's number of outstanding requests. Pools with more pending requests are weighted proportionately less relative to others."least_connections": Select a pool by taking into considerationrandom_steeringweights, as well as each pool's number of open connections. Pools with more open connections are weighted proportionately less relative to others. Supported for HTTP/1 and HTTP/2 connections."": Will map to"geo"if you useregion_pools/country_pools/pop_poolsotherwise"off".
Time to live (TTL) of the DNS entry for the IP address returned by this load balancer. This only applies to gray-clouded (unproxied) load balancers.
A mapping of country codes to a list of pool IDs (ordered by their failover priority) for the given country. Any country not explicitly defined will fall back to using the corresponding region_pool mapping if it exists else to default_pools.
A list of pool IDs ordered by their failover priority. Pools defined here are used by default, or when region_pools are not configured for a given region.
Enterprise only: A mapping of Cloudflare PoP identifiers to a list of pool IDs (ordered by their failover priority) for the PoP (datacenter). Any PoPs not explicitly defined will fall back to using the corresponding country_pool, then region_pool mapping if it exists else to default_pools.
cloudflare_load_balancer
data "cloudflare_load_balancer" "example_load_balancer" {
zone_id = "699d98642c564d2e855e9661899b7252"
load_balancer_id = "699d98642c564d2e855e9661899b7252"
}
Load BalancersMonitors
resource cloudflare_load_balancer_monitor
optional
To be marked unhealthy the monitored origin must fail this healthcheck N consecutive times.
To be marked healthy the monitored origin must pass this healthcheck N consecutive times.
The port number to connect to for the health check. Required for TCP, UDP, and SMTP checks. HTTP and HTTPS checks should only define the port when using a non-standard port (HTTP: default 80, HTTPS: default 443).
The HTTP request headers to send in the health check. It is recommended you set a Host header by default. The User-Agent header cannot be overridden. This parameter is only valid for HTTP and HTTPS monitors.
Do not validate the certificate when monitor use HTTPS. This parameter is currently only valid for HTTP and HTTPS monitors.
A case-insensitive sub-string to look for in the response body. If this string is not found, the origin will be marked as unhealthy. This parameter is only valid for HTTP and HTTPS monitors.
The expected HTTP response code or code range of the health check. This parameter is only valid for HTTP and HTTPS monitors.
Follow redirects if returned by the origin. This parameter is only valid for HTTP and HTTPS monitors.
The interval between each health check. Shorter intervals may improve failover time, but will increase load on the origins as we check from multiple locations.
The method to use for the health check. This defaults to 'GET' for HTTP/HTTPS based checks and 'connection_established' for TCP based health checks.
The endpoint path you want to conduct a health check against. This parameter is only valid for HTTP and HTTPS monitors.
Assign this monitor to emulate the specified zone while probing. This parameter is only valid for HTTP and HTTPS monitors.
cloudflare_load_balancer_monitor
resource "cloudflare_load_balancer_monitor" "example_load_balancer_monitor" {
account_id = "023e105f4ecef8ad9ca31a8372d0c353"
allow_insecure = true
consecutive_down = 0
consecutive_up = 0
description = "Login page monitor"
expected_body = "alive"
expected_codes = "2xx"
follow_redirects = true
header = {
Host = ["example.com"]
X-App-ID = ["abc123"]
}
interval = 0
method = "GET"
path = "/health"
port = 0
probe_zone = "example.com"
retries = 0
timeout = 0
type = "https"
}
data cloudflare_load_balancer_monitor
computed
Do not validate the certificate when monitor use HTTPS. This parameter is currently only valid for HTTP and HTTPS monitors.
To be marked unhealthy the monitored origin must fail this healthcheck N consecutive times.
To be marked healthy the monitored origin must pass this healthcheck N consecutive times.
A case-insensitive sub-string to look for in the response body. If this string is not found, the origin will be marked as unhealthy. This parameter is only valid for HTTP and HTTPS monitors.
The expected HTTP response code or code range of the health check. This parameter is only valid for HTTP and HTTPS monitors.
Follow redirects if returned by the origin. This parameter is only valid for HTTP and HTTPS monitors.
The interval between each health check. Shorter intervals may improve failover time, but will increase load on the origins as we check from multiple locations.
The method to use for the health check. This defaults to 'GET' for HTTP/HTTPS based checks and 'connection_established' for TCP based health checks.
The endpoint path you want to conduct a health check against. This parameter is only valid for HTTP and HTTPS monitors.
The port number to connect to for the health check. Required for TCP, UDP, and SMTP checks. HTTP and HTTPS checks should only define the port when using a non-standard port (HTTP: default 80, HTTPS: default 443).
Assign this monitor to emulate the specified zone while probing. This parameter is only valid for HTTP and HTTPS monitors.
The number of retries to attempt in case of a timeout before marking the origin as unhealthy. Retries are attempted immediately.
cloudflare_load_balancer_monitor
data "cloudflare_load_balancer_monitor" "example_load_balancer_monitor" {
account_id = "023e105f4ecef8ad9ca31a8372d0c353"
monitor_id = "f1aba936b94213e5b8dca0c0dbf1f9cc"
}
data cloudflare_load_balancer_monitors
cloudflare_load_balancer_monitors
data "cloudflare_load_balancer_monitors" "example_load_balancer_monitors" {
account_id = "023e105f4ecef8ad9ca31a8372d0c353"
}
Load BalancersPools
resource cloudflare_load_balancer_pool
required
optional
The latitude of the data center containing the origins used in this pool in decimal degrees. If this is set, longitude must also be set.
The longitude of the data center containing the origins used in this pool in decimal degrees. If this is set, latitude must also be set.
The ID of the Monitor Group to use for checking the health of origins within this pool.
A list of regions from which to run health checks. Null means every Cloudflare data center.
Whether to enable (the default) or disable this pool. Disabled pools will not receive traffic and are excluded from health checks. Disabling a pool will cause any load balancers using it to failover to the next pool (if any).
The minimum number of origins that must be healthy for this pool to serve traffic. If the number of healthy origins falls below this number, the pool will be marked unhealthy and will failover to the next available pool.
This field is now deprecated. It has been moved to Cloudflare's Centralized Notification service https://developers.cloudflare.com/fundamentals/notifications/. The email address to send health status notifications to. This can be an individual mailbox or a mailing list. Multiple emails can be supplied as a comma delimited list.
cloudflare_load_balancer_pool
resource "cloudflare_load_balancer_pool" "example_load_balancer_pool" {
account_id = "023e105f4ecef8ad9ca31a8372d0c353"
name = "primary-dc-1"
origins = [{
address = "0.0.0.0"
enabled = true
header = {
host = ["example.com"]
}
name = "app-server-1"
port = 0
virtual_network_id = "a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
weight = 0.6
}]
description = "Primary data center - Provider XYZ"
enabled = false
latitude = 0
load_shedding = {
default_percent = 0
default_policy = "random"
session_percent = 0
session_policy = "hash"
}
longitude = 0
minimum_origins = 0
monitor = "monitor"
monitor_group = "monitor_group"
notification_email = "someone@example.com,sometwo@example.com"
notification_filter = {
origin = {
disable = true
healthy = true
}
pool = {
disable = true
healthy = false
}
}
origin_steering = {
policy = "random"
}
}
data cloudflare_load_balancer_pool
computed
This field shows up only if the pool is disabled. This field is set with the time the pool was disabled at.
Whether to enable (the default) or disable this pool. Disabled pools will not receive traffic and are excluded from health checks. Disabling a pool will cause any load balancers using it to failover to the next pool (if any).
The latitude of the data center containing the origins used in this pool in decimal degrees. If this is set, longitude must also be set.
The longitude of the data center containing the origins used in this pool in decimal degrees. If this is set, latitude must also be set.
The minimum number of origins that must be healthy for this pool to serve traffic. If the number of healthy origins falls below this number, the pool will be marked unhealthy and will failover to the next available pool.
The ID of the Monitor Group to use for checking the health of origins within this pool.
A short name (tag) for the pool. Only alphanumeric characters, hyphens, and underscores are allowed.
This field is now deprecated. It has been moved to Cloudflare's Centralized Notification service https://developers.cloudflare.com/fundamentals/notifications/. The email address to send health status notifications to. This can be an individual mailbox or a mailing list. Multiple emails can be supplied as a comma delimited list.
cloudflare_load_balancer_pool
data "cloudflare_load_balancer_pool" "example_load_balancer_pool" {
account_id = "023e105f4ecef8ad9ca31a8372d0c353"
pool_id = "17b5962d775c646f3f9725cbc7a53df4"
}
data cloudflare_load_balancer_pools
optional
cloudflare_load_balancer_pools
data "cloudflare_load_balancer_pools" "example_load_balancer_pools" {
account_id = "023e105f4ecef8ad9ca31a8372d0c353"
monitor = "monitor"
}