env 与绑定:能力式 API 的契约表面
能力式 API:env 是 Worker 唯一的资源表面
把"隔离机制"和"硬限额"都装进口袋之后,下一个问题自然是:Worker 实际能做什么?它能不能写数据库?能不能发邮件?能不能调外部 API?答案是统一的:能——但全部通过一个对象 env(environment)暴露。Bindings 文档原话:"Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform. Bindings provide better performance and less restrictions when accessing resources from Workers than the REST APIs which are intended for non-Workers applications."——env 不仅是"访问资源的入口",它本身就是"Worker 与平台资源对话的唯一合法途径"。
把 env 设计成唯一表面,背后有第二层(隔离)和第三章(Layer-2 沙箱)已经铺垫好的工程逻辑:Workers 运行时进程被 seccomp 屏蔽了所有文件系统与网络系统调用,只能通过 UNIX 域套接字与 outbound 代理通信;而 outbound 代理对"谁能去哪"的策略,是按绑定下发的。换句话说,绑定就是 Workers 决定"这个 Worker 能做什么"的最终仲裁机制。文档把这件事概括为一句非常值得背下来的原话:"you can think of a binding as a permission and an API in one piece. With bindings, you never have to add secret keys or tokens to your Worker in order to access resources on your Cloudflare account — the permission is embedded within the API itself. The underlying secret is never exposed to your Worker's code, and therefore can't be accidentally leaked."——权限与接口打包在同一个对象里,密钥永远不出 Workers 运行时。
从工程角度,这意味着三件事读者可以立刻放下:
- 不需要把访问凭证放进
vars、代码、.env文件里——只要在 dashboard 或wrangler.toml里配置一个 binding,运行时就会把对应的"权限 + API"作为一个对象塞进env; - 切换环境(从 staging 到 production)只需要重新指向不同的绑定,不需要改 Worker 代码;
- 即使代码被泄露、即使某个 binding 配置被错误地公开,攻击者拿到的也只是"绑定的引用"——
env.MY_BUCKET对象的方法可以在 Workers 运行时内部被调用,但它的底层凭证永远拿不到。
绑定的全表
把 env 想象成一张表,Workers 文档在 Bindings 索引页里把这张表完全公开。下面按"对工程读者最有用"的四类重排:
- 存储类——
KV(低延迟 key-value 存储,适合读多写少、cache 类场景)、R2(S3 兼容、零出口流量的对象存储)、D1(Cloudflare 自家的 serverless SQL 数据库)、Durable Objects(强一致、全球分布的协调与状态原语)。这四个加起来覆盖了"从轻量级 cache 到强一致状态"的所有持久化需求。 - 计算与数据类——
Workers AI(在 Workers 内直接调用 Cloudflare 自家 GPU 上的推理模型)、Vectorize(向量数据库,给 AI 应用做语义检索)、Workflows(带步骤与重试的长时间任务)、Hyperdrive(把已有区域数据库加速到边缘的代理)、Queues(保证投递的消息队列)、Analytics Engine(高基数时序写入,给 Tail Workers 写聚合用)、Assets(把静态资源直接挂在 Worker 上,配合 Workers Static Assets 部署)。 - 集成与扩展类——
Service bindings(Worker-to-Worker 通信的内部协议,不走 Internet)、Browser Run(受控的无头浏览器实例)、Dispatcher(Workers for Platforms 的动态分发)、Dynamic Worker Loaders(在运行时动态 spawn isolate)、mTLS(给 Worker 配 mTLS 客户端证书)。 - 身份与网络类——
Secrets/Secrets Store(凭证存储;后者是账户级别)、Version metadata(让 Worker 拿到自己的 versionID / versionTag)、Rate Limiting(基于 Cloudflare 边缘的速率限制)、Media Transformations、Images、Stream(媒体处理)、Environment Variables(明文配置)。