You can now deploy and manage Workflows in Terraform
You can now create and manage Workflows using Terraform, now supported in the Cloudflare Terraform provider v5.11.0 ↗. Workflows allow you to build durable, multi-step applications -- without needing to worry about retrying failed tasks or managing infrastructure.
Now, you can deploy and manage Workflows through Terraform using the new cloudflare_workflow resource ↗:
resource "cloudflare_workflow" "my_workflow" {
account_id = var.account_id
workflow_name = "my-workflow"
class_name = "MyWorkflow"
script_name = "my-worker"
}Here are full examples of how to configure cloudflare_workflow in Terraform, using the existing cloudflare_workers_script resource ↗, and the beta cloudflare_worker_version resource ↗.
resource "cloudflare_workers_script" "workflow_worker" {
account_id = var.cloudflare_account_id
script_name = "my-workflow-worker"
content_file = "${path.module}/../dist/worker/index.js"
content_sha256 = filesha256("${path.module}/../dist/worker/index.js")
main_module = "index.js"
}
resource "cloudflare_workflow" "workflow" {
account_id = var.cloudflare_account_id
workflow_name = "my-workflow"
class_name = "MyWorkflow"
script_name = cloudflare_workers_script.workflow_worker.script_name
}You can more granularly control the lifecycle of each Worker resource using the beta cloudflare_worker_version ↗ resource, alongside the cloudflare_worker ↗ and cloudflare_workers_deployment ↗ resources.
resource "cloudflare_worker" "workflow_worker" {
account_id = var.cloudflare_account_id
name = "my-workflow-worker"
}
resource "cloudflare_worker_version" "workflow_worker_version" {
account_id = var.cloudflare_account_id
worker_id = cloudflare_worker.workflow_worker.id
main_module = "index.js"
modules = [{
name = "index.js"
content_file = "${path.module}/../dist/worker/index.js"
content_type = "application/javascript+module"
}]
}
resource "cloudflare_workers_deployment" "workflow_deployment" {
account_id = var.cloudflare_account_id
script_name = cloudflare_worker.workflow_worker.name
strategy = "percentage"
versions = [{
version_id = cloudflare_worker_version.workflow_worker_version.id
percentage = 100
}]
}
resource "cloudflare_workflow" "my_workflow" {
account_id = var.cloudflare_account_id
workflow_name = "my-workflow"
class_name = "MyWorkflow"
script_name = cloudflare_worker.workflow_worker.name
}- Get started with the Cloudflare Terraform provider (v5.11.0) ↗ and the new
cloudflare_workflowresource ↗.