このページでは、Terraform を使ってゾーンに Transform Rules を作成する例を示します。次のシナリオを扱います。
- URL rewrite rule を作成する
- リクエストヘッダーの Transform Rule を作成する
- レスポンスヘッダーの Transform Rule を作成する
- Managed Transforms を設定する
Cloudflare API を使う場合は、次のリソースを参照してください。
- API で URL rewrite rule を作成する
- API でリクエストヘッダーの Transform Rule を作成する
- API でレスポンスヘッダーの Transform Rule を作成する
- Managed Transforms を設定する
このページの Terraform 設定には、ルールセットをデプロイするゾーン / アカウントのゾーン ID(またはアカウント ID)が必要です。
- アクセスできるアカウントの一覧と ID を取得するには、List accounts 操作を使います。
- アクセスできるゾーンの一覧と ID を取得するには、List zones 操作を使います。
Terraform は、アカウントとゾーンのルールセットを完全に管理していると想定します。アカウントまたはゾーンにルールセットが既にある場合は、次のいずれかを行ってください。
cf-terraformingツールを使い、既存のルールセットを Terraform へインポート します。最近のバージョンでは、既存ルールセットのリソース定義を生成し、その設定を Terraform の状態へインポートできます。- 既存のルールセットを削除 してから(アカウントルールセットは
"kind": "root"、ゾーンルールセットは"kind": "zone")、Terraform でルールセットの設定を定義し、最初から始めます。
次の例では、example.com/old-folder へのリクエストを example.com/new-folder に書き換える URL rewrite rule を作成します。
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 rewrite rule を作成するには、同じ cloudflare_ruleset リソースに新しい rules オブジェクトを追加します。
Terraform を使う場合、更新をまたいでルール ID を安定させるには ref フィールドを使います。このフィールドを追加すると、変更時に Terraform がルールを再作成するのを防げます。詳細は トラブルシューティング を参照してください。
URL の書き換えについて詳しくは、URL Rewrite Rules を参照してください。
次の設定例では、HTTP リクエストヘッダーに次の変更を行います。
- 静的な値の
my-header-1ヘッダーをリクエストに追加します。 - 式で定義した動的な値の
my-header-2ヘッダーをリクエストに追加します。 - 存在する場合、リクエストから
existing-headerヘッダーを削除します。
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"
}
}
}
}別の request header transform rule を作成するには、同じ cloudflare_ruleset リソースに新しい rules オブジェクトを追加します。
Terraform を使う場合、更新をまたいでルール ID を安定させるには ref フィールドを使います。このフィールドを追加すると、変更時に Terraform がルールを再作成するのを防げます。詳細は トラブルシューティング を参照してください。
リクエストヘッダーの変更について詳しくは、Request Header Transform Rules を参照してください。
次の設定例では、HTTP レスポンスヘッダーに次の変更を行います。
- 静的な値の
my-header-1ヘッダーをレスポンスに追加します。 - 式で定義した動的な値の
my-header-2ヘッダーをレスポンスに追加します。 - 存在する場合、レスポンスから
existing-headerヘッダーを削除します。
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"
}
}
}
}別の response header transform rule を作成するには、同じ cloudflare_ruleset リソースに新しい rules オブジェクトを追加します。
Terraform を使う場合、更新をまたいでルール ID を安定させるには ref フィールドを使います。このフィールドを追加すると、変更時に Terraform がルールを再作成するのを防げます。詳細は トラブルシューティング を参照してください。
レスポンスヘッダーの変更について詳しくは、Response Header Transform Rules を参照してください。
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 について詳しくは、Managed Transforms を参照してください。