1
0
Fork 0
mirror of https://github.com/imjasonh/terraform-playground synced 2026-07-06 23:12:22 +00:00

add cloudflare worker example

Signed-off-by: Jason Hall <jason@chainguard.dev>
This commit is contained in:
Jason Hall 2023-08-12 10:22:54 -04:00
parent 201548b75a
commit 1e82289e81
Failed to extract signature
3 changed files with 62 additions and 0 deletions

2
.gitignore vendored
View file

@ -7,3 +7,5 @@ terraform.tfstate.backup
terraform.tfstate.*.backup terraform.tfstate.*.backup
.terraform.tfstate.lock.* .terraform.tfstate.lock.*
.terraform.lock.hcl .terraform.lock.hcl
terraform.tfvars

54
cf-worker/main.tf Normal file
View file

@ -0,0 +1,54 @@
terraform {
required_providers {
cloudflare = { source = "cloudflare/cloudflare" }
}
}
variable "name" { type = string }
variable "cloudflare_zone" { type = string }
variable "cloudflare_api_token" { type = string }
variable "cloudflare_account_id" { type = string }
provider "cloudflare" {
api_token = var.cloudflare_api_token
}
// TODO: need to manually enable the workers.dev route in the dashboard
// use cloudflare_worker_route instead to set up routing
resource "cloudflare_worker_script" "script" {
account_id = var.cloudflare_account_id
name = var.name
content = file("script.js")
kv_namespace_binding {
name = "KV"
namespace_id = cloudflare_workers_kv_namespace.kv_ns.id
}
}
/*
resource "cloudflare_worker_route" "route" {
zone_id = data.cloudflare_zone.zone.id
pattern = "${var.name}.${var.cloudflare_zone}/*"
script_name = cloudflare_worker_script.script.name
}
data "cloudflare_zone" "zone" {
name = var.cloudflare_zone
}
*/
resource "cloudflare_workers_kv_namespace" "kv_ns" {
account_id = var.cloudflare_account_id
title = "${var.name}-namespace"
}
// Set a value.
resource "cloudflare_workers_kv" "kv" {
account_id = var.cloudflare_account_id
namespace_id = cloudflare_workers_kv_namespace.kv_ns.id
key = "foo"
value = "bar"
}

6
cf-worker/script.js Normal file
View file

@ -0,0 +1,6 @@
addEventListener("fetch", (event) => {
console.log("Hello from the service worker!");
let value = KV.get("foo");
event.respondWith(new Response(value,
{ headers: { "content-type": "text/plain" } }));
});