blog.dopana

Back

Alchemy (alchemy.run) và Terraform Cloudflare Provider (registry.terraform.io) là hai cách tiếp cận hoàn toàn khác nhau để quản lý Cloudflare infrastructure. Bài này so sánh chúng trên nhiều khía cạnh để giúp bạn chọn công cụ phù hợp.

Tổng quan#

Tiêu chíAlchemyTerraform Cloudflare Provider
Ngôn ngữTypeScript thuần (Effect)HCL (hoặc CDKTF với TypeScript)
RuntimeChạy trên Bun/Node/DenoGo runtime riêng
LoạiFramework IaC nativeProvider cho Terraform
LicenseApache-2.0MPL-2.0
Cloud providersCloudflare, AWS, Neon, Upstash3000+ providers

Code so sánh#

1. Tạo R2 Bucket + Worker với binding#

Alchemy:

alchemy.run.ts
import { cloudflare, define } from 'alchemy'

const bucket = cloudflare.r2.Bucket('assets', {
  location: 'WEUR'
})

const worker = cloudflare.Worker('api-worker', {
  script: './src/index.ts',
  bindings: { bucket } // Tự động infer type cho WorkerEnv
})

export default define({
  resources: [bucket, worker]
})
ts

Terraform HCL:

2. D1 Database + Worker#

Alchemy:

db cloudflare.d1.Database('my-db', {
  name: 'production-db'
})

const worker = cloudflare.Worker('api', {
  script: './src/index.ts',
  bindings: { db } // TypeScript biết db là D1Database binding
})
ts

Terraform:

resource "cloudflare_d1_database" "my_db" {
  account_id = var.cloudflare_account_id
  name       = "production-db"
}

# Worker + D1 binding cần config riêng
resource "cloudflare_worker_script" "api" {
  name    = "api"
  content = file("./worker.js")
  
  d1_database_bindings {
    name    = "db"
    id      = cloudflare_d1_database.my_db.id
  }
}
hcl

So sánh chi tiết#

1. Type Safety#

Alchemy — Type-safe toàn diện. Khi bạn bind một R2 bucket vào Worker, TypeScript tự động infer kiểu WorkerEnv:

// Alchemy tự sinh type:
// interface WorkerEnv { bucket: R2Bucket }

export default {
  async fetch(req: Request, env: WorkerEnv) {
    await env.bucket.get('key') // ✅ Type-safe
  }
}
ts

Terraform — HCL không có type safety. Mọi lỗi chỉ phát hiện ở runtime (terraform plan). CDKTF (đã deprecated) có type safety qua generated classes, nhưng thường lag so với upstream API.

2. Developer Experience#

Khía cạnhAlchemyTerraform
Ngôn ngữTypeScript — học 0 phútHCL — phải học DSL mới
IDE supportFull autocomplete, type checkingHCL LSP cơ bản
Local devalchemy dev — hot-reload ~100msKhông có — phải dùng wrangler dev riêng
TestVitest + isolated stacksKhông có built-in
State managementBuilt-in (Cloudflare state Worker)Terraform Cloud/S3/remote state

3. Development Workflow#

Alchemy workflow:

code ←→ alchemy dev ←→ Cloudflare API (live)
plaintext
  • Hot-reload 100ms
  • Code + Infrastructure cùng file TypeScript
  • Test với isolated stack (deploy → assert → destroy)

Terraform workflow:

code → wrangler dev (local) 
     → terraform plan → terraform apply → Cloudflare API
plaintext
  • Local development và infrastructure deployment tách rời
  • Cần 2 toolchain riêng (wrangler + terraform)
  • Không có hot-reload cho infrastructure

4. State Management#

Terraform có state management mạnh mẽ nhất:

  • Remote state với locking
  • Drift detection
  • Granular access control
  • Workspace isolation
  • Audit trail

Alchemy state management đơn giản hơn:

  • State lưu trong Cloudflare (Durable Object)
  • Phù hợp cho serverless workloads
  • Thiếu các tính năng enterprise như locking, audit

5. Multi-Provider Support#

Terraform — 3000+ providers. Một config file quản lý được AWS + Cloudflare + Datadog + GitHub cùng lúc.

Alchemy — Hỗ trợ Cloudflare, AWS, Neon, Upstash. Ít hơn nhưng tích hợp sâu.

6. AI Agent Friendliness#

Alchemy: Được thiết kế cho AI coding agents:

  • TypeScript thuần — LLM hiểu dễ dàng
  • Toàn bộ stack trong 1-2 files
  • Cung cấp llms.txt guide
  • Structure đơn giản, ít boilerplate

Terraform: HCL cũng được LLM hiểu tốt (nhờ lượng lớn training data), nhưng:

  • Version mismatches thường gây lỗi
  • Worker code (TypeScript) và HCL config tách rời
  • AI agent khó suy luận end-to-end

Khi nào dùng công cụ nào?#

Chọn Alchemy nếu#

✅ Bạn là TypeScript developer, không muốn học HCL ✅ Bạn cần local development workflow nhanh (hot-reload infrastructure) ✅ Dự án của bạn chạy chủ yếu trên Cloudflare Workers/R2/D1/KV ✅ Bạn muốn type-safe từ infrastructure đến application code ✅ Bạn dùng AI coding agents để viết infrastructure

Chọn Terraform nếu#

✅ Team của bạn đã có Terraform workflow ✅ Bạn quản lý multi-provider infrastructure (AWS + Cloudflare + …) ✅ Bạn cần enterprise features: state locking, audit, compliance ✅ Bạn quản lý hàng trăm resources với dependency graph phức tạp ✅ Team của bạn có HCL expertise

So sánh với Wrangler#

Một câu hỏi thường gặp: “Sao không dùng wrangler.toml?”

Công cụMục đíchPhạm vi
WranglerCLI cho Cloudflare WorkersChỉ Workers & liên quan
TerraformIaC đa năngMọi cloud resource
AlchemyIaC TypeScript-nativeCloud + Application

wrangler.toml chỉ quản lý được Workers. Cả Terraform và Alchemy đều quản lý được R2, D1, KV, Queues, DNS, Pages — nhưng với cách tiếp cận khác nhau.

Kết luận#

Alchemy và Terraform đại diện cho hai triết lý khác nhau:

  • Terraform — IaC truyền thống: mạnh mẽ, ổn định, đa năng, nhưng learning curve cao và workflow rời rạc.
  • Alchemy — IaC hiện đại: TypeScript-native, type-safe, dev experience tuyệt vời, nhưng còn mới và ít provider.

Lựa chọn phụ thuộc vào context của bạn. Nếu bạn đang xây dựng cloud-native apps trên Cloudflare với TypeScript, Alchemy là lựa chọn hấp dẫn. Nếu bạn cần enterprise-grade IaC cho multi-provider infrastructure, Terraform vẫn là chuẩn mực.

Alchemy: alchemy.run
Terraform Cloudflare Provider: registry.terraform.io
Wrangler: developers.cloudflare.com/workers/wrangler