Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Terraform で Transform Rules を設定する

最終更新 Markdown で表示Agent セットアップ

このページでは、Terraform を使ってゾーンに Transform Rules を作成する例を示します。次のシナリオを扱います。

Cloudflare API を使う場合は、次のリソースを参照してください。

始める前に

必要なアカウント ID またはゾーン ID を取得する

このページの Terraform 設定には、ルールセットをデプロイするゾーン / アカウントのゾーン ID(またはアカウント ID)が必要です。

  • アクセスできるアカウントの一覧と ID を取得するには、List accounts 操作を使います。
  • アクセスできるゾーンの一覧と ID を取得するには、List zones 操作を使います。

既存の ruleset をインポートまたは削除する

Terraform は、アカウントとゾーンのルールセットを完全に管理していると想定します。アカウントまたはゾーンにルールセットが既にある場合は、次のいずれかを行ってください。

  • cf-terraforming ツールを使い、既存のルールセットを Terraform へインポート します。最近のバージョンでは、既存ルールセットのリソース定義を生成し、その設定を Terraform の状態へインポートできます。
  • 既存のルールセットを削除 してから(アカウントルールセットは "kind": "root"、ゾーンルールセットは "kind": "zone")、Terraform でルールセットの設定を定義し、最初から始めます。

URL rewrite rule を作成する

次の例では、example.com/old-folder へのリクエストを example.com/new-folder に書き換える URL rewrite rule を作成します。

必要な API トークン権限

次の トークン権限 がすべて必要です。

  • Zone Transform Rules Write
  • Account 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 rewrite rule を作成するには、同じ cloudflare_ruleset リソースに新しい rules オブジェクトを追加します。

Terraform を使う場合、更新をまたいでルール ID を安定させるには ref フィールドを使います。このフィールドを追加すると、変更時に Terraform がルールを再作成するのを防げます。詳細は トラブルシューティング を参照してください。


URL の書き換えについて詳しくは、URL Rewrite Rules を参照してください。

リクエストヘッダーの Transform Rule を作成する

次の設定例では、HTTP リクエストヘッダーに次の変更を行います。

  • 静的な値の my-header-1 ヘッダーをリクエストに追加します。
  • 式で定義した動的な値の my-header-2 ヘッダーをリクエストに追加します。
  • 存在する場合、リクエストから existing-header ヘッダーを削除します。

必要な API トークン権限

次の トークン権限 がすべて必要です。

  • Zone Transform Rules Write
  • Account 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"
      }
    }
  }
}

別の request header transform rule を作成するには、同じ cloudflare_ruleset リソースに新しい rules オブジェクトを追加します。

Terraform を使う場合、更新をまたいでルール ID を安定させるには ref フィールドを使います。このフィールドを追加すると、変更時に Terraform がルールを再作成するのを防げます。詳細は トラブルシューティング を参照してください。

リクエストヘッダーの変更について詳しくは、Request Header Transform Rules を参照してください。

レスポンスヘッダーの Transform Rule を作成する

次の設定例では、HTTP レスポンスヘッダーに次の変更を行います。

  • 静的な値の my-header-1 ヘッダーをレスポンスに追加します。
  • 式で定義した動的な値の my-header-2 ヘッダーをレスポンスに追加します。
  • 存在する場合、レスポンスから existing-header ヘッダーを削除します。

必要な API トークン権限

次の トークン権限 がすべて必要です。

  • Zone Transform Rules Write
  • Account 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"
      }
    }
  }
}

別の response header transform rule を作成するには、同じ cloudflare_ruleset リソースに新しい rules オブジェクトを追加します。

Terraform を使う場合、更新をまたいでルール ID を安定させるには ref フィールドを使います。このフィールドを追加すると、変更時に Terraform がルールを再作成するのを防げます。詳細は トラブルシューティング を参照してください。

レスポンスヘッダーの変更について詳しくは、Response Header Transform Rules を参照してください。

Managed Transforms を設定する

必要な API トークン権限

次の トークン権限 がすべて必要です。

  • Managed headers Write
  • Account 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 について詳しくは、Managed Transforms を参照してください。

役に立ちましたか?