← Cloudflare Workers VPC / workers-vpc / configuration / vpc-services
Konfigurace pomocí Terraformu
VPC Services lze spravovat jako infrastrukturu pomocí cloudflare_connectivity_directory_service ↗ prostředek na Cloudflare Terraform provider.
Toto se přímo mapuje na adresář konektivity : jde o stejné rozhraní API, které pro vytváření a správu VPC Services používá i dashboard a Wrangler CLI. Stejné Pole konfigurace VPC Service (typ, hostitel, porty, ID tunelu) platí bez ohledu na to, jakým způsobem byla služba vytvořena.
Prostředek VPC Service
cloudflare_connectivity_directory_service resource vytvoří VPC Service v adresáři konektivity. Každý resource odpovídá jedné položce VPC Service, na kterou se může Worker navázat.
Konfigurace založená na hostname
Pokud používáte hostname, uveďte host.hostname s resolver_network blok. Tomu odpovídá vazba založená na hostname, konkrétně Příklad konfigurace JSON.
resource "cloudflare_connectivity_directory_service" "my_private_api" {
account_id = var.account_id
name = "my-private-api"
type = "http"
http_port = 80
https_port = 443
host = {
hostname = "internal-api.example.com"
resolver_network = {
tunnel_id = var.tunnel_id
}
}
}Chcete-li ve své privátní síti použít vlastní DNS resolver, přidejte resolver_ips:
resource "cloudflare_connectivity_directory_service" "my_private_api" {
account_id = var.account_id
name = "my-private-api"
type = "http"
host = {
hostname = "internal-api.example.com"
resolver_network = {
tunnel_id = var.tunnel_id
resolver_ips = ["10.0.0.53"]
}
}
}Konfigurace založená na IP adrese
Pokud používáte IP adresy, uveďte host.ipv4 a/nebo host.ipv6 s network blok. Tomu odpovídá vazba založená na IP adrese, konkrétně Příklad konfigurace JSON.
resource "cloudflare_connectivity_directory_service" "my_private_api" {
account_id = var.account_id
name = "my-private-api"
type = "http"
http_port = 8080
https_port = 8443
host = {
ipv4 = "10.0.1.50"
ipv6 = "fe80::1"
network = {
tunnel_id = var.tunnel_id
}
}
}Konfigurace služby TCP
U služeb TCP (například databází) nastavte type = "tcp" a uveďte tcp_port. Volitelně můžete zadat app_protocol z postgresql nebo mysql.
resource "cloudflare_connectivity_directory_service" "my_database" {
account_id = var.account_id
name = "my-postgres-db"
type = "tcp"
tcp_port = 5432
app_protocol = "postgresql"
host = {
ipv4 = "10.0.0.5"
network = {
tunnel_id = var.tunnel_id
}
}
}ověření certifikátu TLS
Chcete-li nastavit režim ověřování TLS certifikátu pro připojení k originu, přidejte tls_settings blok:
resource "cloudflare_connectivity_directory_service" "my_database" {
account_id = var.account_id
name = "my-postgres-db"
type = "tcp"
tcp_port = 5432
app_protocol = "postgresql"
host = {
ipv4 = "10.0.0.5"
network = {
tunnel_id = var.tunnel_id
}
}
tls_settings = {
cert_verification_mode = "verify_ca"
}
}Platné hodnoty pro cert_verification_mode jsou:
verify_full(výchozí)verify_cadisabled
Viz Režim ověřování certifikátu TLS s podrobnostmi.
Konfigurace portu
U služeb HTTP jsou porty volitelné a výchozí hodnoty jsou 80 (HTTP) a 443 (HTTPS). Chcete-li vynutit jediné schéma, zadejte pouze jedno z http_port nebo https_port. Viz Konfigurace VPC Service o tom, jak funguje vynucování schématu a chování portů.
U služeb TCP, tcp_port je povinné.
Konfigurace vazby Workers
Jakmile VPC Service existuje, svažte ji s Workerem pomocí vpc_service typ vazby v bindings pole objektu cloudflare_worker_version resource. To odpovídá vpc_services pole v konfiguraci Wrangler.
resource "cloudflare_worker_version" "my_worker_version" {
account_id = var.account_id
worker_id = cloudflare_worker.my_worker.id
compatibility_date = "2025-02-21" # Set this to today's date
main_module = "worker.js"
modules = [{
name = "worker.js"
content_type = "application/javascript+module"
content_file = "build/worker.js"
}]
bindings = [{
type = "vpc_service"
name = "PRIVATE_API"
service_id = cloudflare_connectivity_directory_service.my_private_api.service_id
}]
}Ke stejnému Workeru lze přidat více bindingů VPC Service:
bindings = [
{
type = "vpc_service"
name = "PRIVATE_API"
service_id = cloudflare_connectivity_directory_service.api.service_id
},
{
type = "vpc_service"
name = "PRIVATE_DATABASE"
service_id = cloudflare_connectivity_directory_service.database.service_id
}
]Kód Workeru přistupuje ke každé vazbě prostřednictvím env.PRIVATE_API.fetch() a env.PRIVATE_DATABASE.fetch(), jak je popsáno v Workers Binding API.
Další podrobnosti o správě Workers a bindingů pomocí Terraformu najdete v Infrastruktura Workers jako kód.
Zdroje dat
Poskytovatel Terraform obsahuje datové zdroje pro čtení existujících VPC Services bez správy jejich životního cyklu.
Vyhledání jedné VPC Service
data "cloudflare_connectivity_directory_service" "existing" {
account_id = var.account_id
service_id = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
}To se hodí pro binding na VPC Service, která je spravovaná mimo vaši konfiguraci Terraform (například vytvořená přes dashboard nebo Wrangler CLI).
Výpis VPC Services
data "cloudflare_connectivity_directory_services" "all_http" {
account_id = var.account_id
type = "http"
}
data "cloudflare_connectivity_directory_services" "all_tcp" {
account_id = var.account_id
type = "tcp"
}Odkaz na schéma prostředku
resource "cloudflare_connectivity_directory_service" "example" {
# Required
account_id = "your-account-id" # Account identifier
name = "my-private-api" # Human-readable name
type = "http" # Service type: "http" or "tcp"
# HTTP-specific (optional, defaults to 80/443)
http_port = 80 # HTTP port
https_port = 443 # HTTPS port
# TCP-specific (tcp_port is required when type = "tcp")
# tcp_port = 5432 # TCP port
# app_protocol = "postgresql" # Optional: "postgresql" or "mysql"
host = {
# Use hostname OR ipv4/ipv6, not both
# Option A: Hostname-based
hostname = "internal-api.example.com"
resolver_network = {
tunnel_id = "tunnel-uuid" # Required — Cloudflare Tunnel ID
resolver_ips = ["10.0.0.53"] # Optional — custom DNS resolver IPs
}
# Option B: IP-based
# ipv4 = "10.0.1.50" # IPv4 address
# ipv6 = "fe80::1" # IPv6 address
# network = {
# tunnel_id = "tunnel-uuid" # Required — Cloudflare Tunnel ID
# }
}
# Optional TLS settings
# tls_settings = {
# cert_verification_mode = "verify_full" # "verify_full", "verify_ca", or "disabled"
# }
# Read-only (computed by the API)
# id — Terraform resource ID
# service_id — VPC Service ID (use this for Worker bindings)
# created_at — Creation timestamp
# updated_at — Last update timestamp
}Úplné schéma najdete v Dokumentace registru Terraform ↗.