Bindings 允许您的 Worker 与 Cloudflare 开发者平台上的资源进行交互。
今天可用的绑定如下:
- 人工智能: 在不管理服务器或基础设施的情况下,在GPU上运行生成性AI推理和机器学习模型。
- 分析引擎: 从Workers直接以规模写入高基数数据和指标。
- 浏览器渲染: 以编程方式控制和与无头浏览器实例交互。
- D1: 在Cloudflare Workers中可用的API,用于与D1交互。D1是Cloudflare的原生无服务器数据库。
- 调度器(平台的Workers): 让您的客户将自己的代码部署到您的平台,并动态地将请求从您的Worker调度到他们的Worker。
- 持久对象: 一个全球分布的协调API,具有强一致性存储。
- 环境变量: 向您的Worker添加字符串和JSON值。
- 超驱动: 从Workers连接到您现有的数据库,将您现有的区域数据库转变为全球分布的数据库。
- KV: 全球低延迟的键值数据存储。
- mTLS: 配置您的Worker向强制执行mTLS连接的服务呈现客户端证书。
- 队列: 发送和接收保证交付的消息。
- R2: 在Cloudflare Workers中可用的API,用于从R2存储桶读取和写入。R2是与S3兼容的、零出口费用的全球分布对象存储。
- 速率限制: 定义速率限制并直接从您的Cloudflare Worker与之交互。
- 秘密: 向您的Worker添加加密的秘密。
- 服务绑定: 促进Worker与Worker之间的通信。
- 向量化: 在Cloudflare Workers中可用的API,用于与Vectorize交互。Vectorize是Cloudflare的全球分布向量数据库。
- 版本元数据: 暴露Worker版本元数据(
versionID
和versionTag
)。这些字段可以添加到从Worker发出的事件中,以发送到下游可观察性系统。
什么是绑定?
当您在 Worker 上声明绑定时,您授予它特定的功能,比如能够读取和写入文件到R2 存储桶。例如:
wrangler.toml { binding = "MY_BUCKET", bucket_name = "<MY_BUCKET_NAME>" }
index.js async fetch(request, env) { const key = url.pathname.slice(1); await env.MY_BUCKET.put(key, request.body); return new Response(`Put ${key} successfully!`);
您可以将绑定视为权限和 API 的结合体。使用绑定,您无需向 Worker 添加秘钥或令牌即可访问 Cloudflare 账户上的资源 — 权限已嵌入到 API 本身中。底层秘钥不会暴露给 Worker 的代码,因此不会意外泄露。
修改绑定
当您部署对 Worker 的更改时,仅更改其绑定(即不更改 Worker 的代码),Cloudflare 可能会重用已经运行您的 Worker 的现有隔离体。这会提高性能 — 您可以更改环境变量或其他绑定,而无需不必要地重新加载代码。
因此,在向全局范围添加绑定的衍生品时,您必须小心。您在那里创建的任何内容可能会继续存在,尽管对任何基础绑定进行更改。考虑一个使用从 env
访问的秘密 API 密钥的外部客户端实例:如果您将此客户端实例放在全局范围中,然后对秘密进行更改,则仍可能存在使用原始值的客户端实例。正确的方法是为每个请求创建一个新的客户端实例。
以下是一个很好的方法:
let client = new Client(env.MY_SECRET);
与这种可能具有令人惊讶和不希望的行为的替代方案相比:
client ??= new Client(env.MY_SECRET);
如果您有更高级的需求,请探索AsyncLocalStorage API,该API提供了一种向子执行处理程序公开值的机制。