blog.dopana

Back

Alchemy (alchemy.run) là một framework Infrastructure-as-Code (IaC) thế hệ mới, cho phép bạn định nghĩa và quản lý cloud resources bằng TypeScript thuần — không HCL, không YAML, không runtime Go hay Rust như Terraform hay Pulumi. Điểm đặc biệt: Alchemy được xây dựng trên nền tảng Effect, thư viện TypeScript mạnh mẽ cho composable, typed effects.

Vấn đề với IaC truyền thống#

Các công cụ IaC hiện tại đều có những hạn chế nhất định:

Công cụNgôn ngữRuntimeVấn đề
TerraformHCLGoDSL riêng, khó mở rộng
PulumiTypeScript/Go/PythonGoChain abstraction nặng
AWS CDKTypeScriptCloudFormationSinh JSON trung gian, chậm
SSTTypeScriptWrapper quanh PulumiThêm layer, phức tạp

Tất cả đều có chung một vấn đề: bloated abstraction chain. Code của bạn bị dịch qua nhiều tầng trung gian trước khi đến tay cloud provider.

Alchemy khác biệt thế nào?#

Alchemy cắt bỏ hoàn toàn các tầng trung gian. Nó giao tiếp trực tiếp với cloud API qua HTTPS, không qua CloudFormation hay Terraform provider nào cả.

1. Infrastructure là TypeScript thuần#

Bạn viết infrastructure bằng TypeScript, không DSL:

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

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

const worker = cloudflare.Worker('my-worker', {
  script: './src/index.ts',
  bindings: { bucket }
})

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

2. Type-safe IAM Policies#

IAM policies được kiểm tra ngay tại compile time. Không thể deploy với permission thiếu:

const queue = cloudflare.Queue('my-queue')

// TypeScript sẽ báo lỗi nếu thiếu binding
const worker = cloudflare.Worker('my-worker', {
  script: './src/index.ts',
  bindings: { queue } // → tự động cấp consumer permission
})
ts

3. Hot-reload (~100ms)#

Alchemy hỗ trợ hot-reload infrastructure cực nhanh. Thay đổi resource, nhấn save — trong ~100ms, resource đã được cập nhật. Không cần chờ terraform plan hàng phút.

4. Ephemeral Stacks#

Mỗi Pull Request có thể tự động tạo một stack riêng biệt, deploy → test → destroy. Lý tưởng cho preview environments:

// Vitest + Alchemy
import { test, expect } from 'vitest'
import { createStack } from 'alchemy/test'

test('API trả về 200', async () => {
  const stack = await createStack('./alchemy.run.ts')
  const response = await fetch(stack.worker.url)
  expect(response.status).toBe(200)
  await stack.destroy()
})
ts

5. Observability tích hợp#

OpenTelemetry metrics, logs, và alarms được khai báo trực tiếp cùng resources:

const worker = cloudflare.Worker('my-worker', {
  script: './src/index.ts',
  observability: {
    metrics: ['request_count', 'error_rate'],
    alarms: [
      { metric: 'error_rate', threshold: 0.05, action: 'slack' }
    ]
  }
})
ts

Providers được hỗ trợ#

Alchemy hỗ trợ nhiều cloud providers và dịch vụ:

ProviderResources
CloudflareWorkers, R2, D1, KV, Durable Objects, Queues, Hyperdrive
AWSLambda, ECS, DynamoDB, S3, SQS, CloudWatch
NeonServerless Postgres
PlanetScaleServerless MySQL
UpstashRedis, Kafka
StripePayment infrastructure

Và tích hợp sẵn với các frontend framework: Astro, Next.js, Nuxt, SolidStart, TanStack Start.

Tại sao Alchemy đáng chú ý?#

Infrastructure là code theo nghĩa đen — không qua trung gian, không compile, không DSL.

  1. Không runtime riêng — chạy trên Bun, Node, Deno, Cloudflare Workers.
  2. Không DSL — TypeScript thuần là tất cả những gì bạn cần.
  3. Type-safe toàn diện — từ resource definition đến IAM policy.
  4. Ecosystem Effect — tận dụng typed effects, error handling, và composability.
  5. AI Agent-friendly — cấu trúc đơn giản, dễ đọc, dễ cho AI coding agents thao tác.

Kết luận#

Alchemy đại diện cho một hướng đi mới của IaC: đơn giản hóa đến tận cùng. Thay vì chồng chất abstraction layers, nó dựa vào sức mạnh của TypeScript và Effect để tạo ra trải nghiệm developer liền mạch.

Nếu bạn là TypeScript developer và muốn quản lý cloud infrastructure mà không cần học thêm công cụ mới, Alchemy là một lựa chọn đáng để thử.

Link: alchemy.run
GitHub: github.com/alchemy-run/alchemy
License: Apache-2.0