← Провайдер Cloudflare Terraform / terraform / additional-configurations
Настройка Transform Rules с помощью Terraform
На этой странице приведены примеры создания Transform Rules в зоне с помощью Terraform. Примеры охватывают следующие сценарии:
- Создание правила перезаписи URL
- Создание правила преобразования заголовка запроса
- Создание правила преобразования заголовка ответа
- Настройка Managed Transforms
Если вы используете Cloudflare API, см. следующие ресурсы:
- Создайте правило URL rewrite через API
- Создайте правило преобразования заголовков запроса через API
- Создайте правило преобразования заголовков ответа через API
- Настройка Managed Transforms
Прежде чем начать
Получите нужные идентификаторы аккаунта или зоны
Для конфигураций Terraform, приведённых на этой странице, требуется идентификатор зоны (или идентификатор аккаунта), в которой вы будете развёртывать наборы правил.
- Чтобы получить список аккаунтов, к которым у вас есть доступ, включая их идентификаторы, используйте Выведите список аккаунтов операцию.
- Чтобы получить список зон, к которым у вас есть доступ, включая их идентификаторы, используйте Выведите список зон операцию.
Импорт или удаление существующих наборов правил
Terraform исходит из того, что полностью контролирует наборы правил аккаунта и зоны. Если у вас уже настроены наборы правил в аккаунте или зоне, выполните одно из следующих действий:
- Импорт существующих наборов правил в Terraform с помощью
cf-terraformingинструмента. Его последние версии умеют генерировать определения ресурсов для существующих наборов правил и импортировать их конфигурацию в состояние Terraform. - Начните с нуля, выполнив удаление существующих наборов правил (наборы правил уровня аккаунта и зоны с
"kind": "root"и"kind": "zone", соответственно), а затем задать конфигурацию наборов правил в Terraform.
Создание правила перезаписи URL
В следующем примере создаётся правило перезаписи URL, которое перезаписывает запросы к example.com/old-folder к example.com/new-folder:
Необходимые разрешения API-токена
Все перечисленные ниже права доступа токена обязательны:
Zone Transform Rules WriteAccount Rulesets Read
Настройте cloudflare_ruleset ↗ ресурс:
resource "cloudflare_ruleset" "transform_url_rewrite" {
zone_id = var.cloudflare_zone_id
name = "Transform Rule performing a static URL rewrite"
description = ""
kind = "zone"
phase = "http_request_transform"
rules = [{
ref = "url_rewrite_old_folder"
description = "Example URL rewrite rule"
expression = "(http.host eq \"example.com\" and http.request.uri.path eq \"/old-folder\")"
action = "rewrite"
action_parameters = {
uri = {
path = {
value = "/new-folder"
}
}
}
}]
}resource "cloudflare_ruleset" "transform_url_rewrite" {
zone_id = "<ZONE_ID>"
name = "Transform Rule performing a static URL rewrite"
description = ""
kind = "zone"
phase = "http_request_transform"
rules {
ref = "url_rewrite_old_folder"
description = "Example URL rewrite rule"
expression = "(http.host eq \"example.com\" and http.request.uri.path eq \"/old-folder\")"
action = "rewrite"
action_parameters {
uri {
path {
value = "/new-folder"
}
}
}
}
}Чтобы создать ещё одно правило перезаписи URL, добавьте новый rules объект в тот же cloudflare_ruleset ресурс.
Используйте ref поле, чтобы идентификаторы правил оставались стабильными при обновлениях в Terraform. Добавление этого поля не позволяет Terraform пересоздавать правило при изменениях. Дополнительную информацию см. в Устранение неполадок.
Дополнительную информацию о перезаписи URL-адресов см. в URL Rewrite Rules.
Создание правила преобразования заголовка запроса
Следующий пример конфигурации выполняет следующие изменения заголовков HTTP-запроса:
- Добавляет
my-header-1заголовок к запросу со статическим значением. - Добавляет
my-header-2заголовок к запросу со значением, динамически определяемым выражением. - Удаляет
existing-headerзаголовок из запроса, если он существует.
Необходимые разрешения API-токена
Все перечисленные ниже права доступа токена обязательны:
Zone Transform Rules WriteAccount Rulesets Read
Настройте cloudflare_ruleset ↗ ресурс:
resource "cloudflare_ruleset" "transform_modify_request_headers" {
zone_id = var.cloudflare_zone_id
name = "Transform Rule performing HTTP request header modifications"
description = ""
kind = "zone"
phase = "http_request_late_transform"
rules = [{
ref = "modify_request_headers"
description = "Example request header transform rule"
expression = "true"
action = "rewrite"
action_parameters = {
headers = {
"my-header-1" = {
operation = "set"
value = "Fixed value"
}
"my-header-2" = {
operation = "set"
expression = "cf.zone.name"
}
"existing-header" = {
operation = "remove"
}
}
}
}]
}resource "cloudflare_ruleset" "transform_modify_request_headers" {
zone_id = "<ZONE_ID>"
name = "Transform Rule performing HTTP request header modifications"
description = ""
kind = "zone"
phase = "http_request_late_transform"
rules {
ref = "modify_request_headers"
description = "Example request header transform rule"
expression = "true"
action = "rewrite"
action_parameters {
headers {
name = "my-header-1"
operation = "set"
value = "Fixed value"
}
headers {
name = "my-header-2"
operation = "set"
expression = "cf.zone.name"
}
headers {
name = "existing-header"
operation = "remove"
}
}
}
}Чтобы создать ещё одно правило преобразования заголовков запроса, добавьте новый rules объект в тот же cloudflare_ruleset ресурс.
Используйте ref поле, чтобы идентификаторы правил оставались стабильными при обновлениях в Terraform. Добавление этого поля не позволяет Terraform пересоздавать правило при изменениях. Дополнительную информацию см. в Устранение неполадок.
Дополнительную информацию об изменении заголовков запросов см. в Request Header Transform Rules.
Создание правила преобразования заголовка ответа
Следующий пример конфигурации выполняет следующие изменения заголовков HTTP-ответа:
- Добавляет
my-header-1заголовок к ответу со статическим значением. - Добавляет
my-header-2заголовок к ответу со значением, динамически определяемым выражением. - Удаляет
existing-headerзаголовок из ответа, если он существует.
Необходимые разрешения API-токена
Все перечисленные ниже права доступа токена обязательны:
Zone Transform Rules WriteAccount Rulesets Read
Настройте cloudflare_ruleset ↗ ресурс:
resource "cloudflare_ruleset" "transform_modify_response_headers" {
zone_id = var.cloudflare_zone_id
name = "Transform Rule performing HTTP response header modifications"
description = ""
kind = "zone"
phase = "http_response_headers_transform"
rules = [{
ref = "modify_response_headers"
description = "Example response header transform rule"
expression = "true"
action = "rewrite"
action_parameters = {
headers = {
"my-header-1" = {
operation = "set"
value = "Fixed value"
}
"my-header-2" = {
operation = "set"
expression = "cf.zone.name"
}
"existing-header" = {
operation = "remove"
}
}
}
}]
}resource "cloudflare_ruleset" "transform_modify_response_headers" {
zone_id = "<ZONE_ID>"
name = "Transform Rule performing HTTP response header modifications"
description = ""
kind = "zone"
phase = "http_response_headers_transform"
rules {
ref = "modify_response_headers"
description = "Example response header transform rule"
expression = "true"
action = "rewrite"
action_parameters {
headers {
name = "my-header-1"
operation = "set"
value = "Fixed value"
}
headers {
name = "my-header-2"
operation = "set"
expression = "cf.zone.name"
}
headers {
name = "existing-header"
operation = "remove"
}
}
}
}Чтобы создать ещё одно правило преобразования заголовков ответа, добавьте новый rules объект в тот же cloudflare_ruleset ресурс.
Используйте ref поле, чтобы идентификаторы правил оставались стабильными при обновлениях в Terraform. Добавление этого поля не позволяет Terraform пересоздавать правило при изменениях. Дополнительную информацию см. в Устранение неполадок.
Дополнительную информацию об изменении заголовков ответов см. в Response Header Transform Rules.
Настройка Managed Transforms
Необходимые разрешения API-токена
Все перечисленные ниже права доступа токена обязательны:
Managed headers WriteAccount Rulesets Read
Настройте cloudflare_managed_transforms ↗ ресурс:
resource "cloudflare_managed_transforms" "tf_example" {
zone_id = var.cloudflare_zone_id
managed_request_headers = [{
id = "add_visitor_location_headers"
enabled = true
}]
managed_response_headers = [{
id = "remove_x-powered-by_header"
enabled = true
}]
}resource "cloudflare_managed_headers" "tf_example" {
zone_id = "<ZONE_ID>"
managed_request_headers {
id = "add_visitor_location_headers"
enabled = true
}
managed_response_headers {
id = "remove_x-powered-by_header"
enabled = true
}
}Убедитесь, что обновляемые Managed Transforms указаны в правильном объекте (managed_request_headers или managed_response_headers).
Дополнительную информацию об управляемых преобразованиях см. в Managed Transforms.