@alienplatform/bindings
用于外星存储、 kv、 队列、 金库、 链接- 容器的直接类型脚本绑定
和Postgres over a
正在处理 美洲狮 塞顿。 外加者自己住在罗斯特
条框 crates/alien-bindings-node; 此软件包是已发布的 JavaScript
把它包起来.
远程存储
使用 Bindings.forRemoteDeployment 从信任的后端访问存储器
用于现有部署的资源。 永远不要在浏览器中放出异形 API 令牌,
移动,或其他客户端代码。 符号必须具有写入权限
部署; 仅读符号不能解决云证书.
import { Bindings } from "@alienplatform/bindings"
const bindings = await Bindings.forRemoteDeployment({
deploymentId: process.env.ALIEN_DEPLOYMENT_ID!,
token: process.env.ALIEN_API_TOKEN!,
})
const archive = bindings.storage("archive")
const write = await archive.put("reports/latest.json", Buffer.from(JSON.stringify({ ready: true })), {
condition: "absent",
attributes: {
contentType: "application/json",
cacheControl: "private, max-age=60",
metadata: { schema: "report-v1" },
},
})
const head = await archive.head("reports/latest.json")
const object = await archive.get("reports/latest.json")
const report = JSON.parse(object.data.toString())
console.log(write.eTag, head.meta, head.attributes, report)
const reports = await archive.list("reports/")
await archive.delete("reports/latest.json")
云存储提供者坚持这些对象属性. 本地文件系统
提供者拒绝带有属性的写作,因为它不能代表它们.
GCS 也拒绝 contentEncoding: "gzip": 它的减压转码省略
字节精确所需的响应长度 。 其他GCS编码,例如
br被保存下来.
condition: "absent" 制造 put 仅用原子创建写入。 如果对象
已存在, 操作失败 STORAGE_OBJECT_ALREADY_EXISTS
而不是替换它.
远程存储曝光 get, (中文(简体) ), put, (中文(简体) ), head, (中文(简体) ), list,以及 delete它不会
曝光复制或签名的 URL 。 一样 Bindings 和存储手柄仍然有效
本地客户端刷新短寿命的云层证书并定期更新
重新发现部署的指定管理器. 旋转外星 API 令牌
需要新建 Bindings 数值。 过 apiBaseUrl 仅在
针对非默认的异构 API 端点; 普通 HTTP 只在 a 上被接受
地方发展的回放地址.
命名的资源必须是跑道、 冻结 S3、 GCS 或 Azure Blob 存储器 已启用远程访问资源。 允许远程访问增加了混凝土 对象读取/写入/列表/删除该桶或容器的访问权限 部署的专用遥控器身份。 生成并应用更新客户设置 允许它在现有部署中。 终点返回一个短暂的租约 对于远程绑定身份,只有在它验证了指定的资源之后,所以 外国代币和所有退回的供应商证书必须作为后端处理 秘密,我们有秘密.
远程 KV
信任的后端可以使用相同的读取和写入客户端的 KV 资源 短期证书租赁作为远程存储:
const bindings = await Bindings.forRemoteCustomer({ project, externalId, token })
await bindings.kv("check-cache").setJson("status", { ready: true }, { ttl: 86400 })
启用 remoteAccess 并首先应用更新的设置.
资源必须运行和冻结。 AWS 允许在
选定的 DynamomDB 表格; Azure 授予选定表格上的实体操作.
Firestore IAM 无法在共享默认数据库中隔离收藏, 因此它的
远程身份可以在整个项目中访问文件。 仅启用
当范围合适时.
远程 KV 使用相同的读取、 写入、 有条件写入、 扫描和逻辑 TTL 行为作为工作量 KV. 原始值限制在DynamoDB上的408 576字节, Firestore上的783,360字节(基础编码加文件元数据需要室), 和24,576字节在Azure和本地存储. DynamoDB 保留它的一基B 400 KiB 密钥和元数据项限制 。 使用对象存储值较大 .
链接集装箱
这些工厂由下列公司再出口: @alienplatform/sdk 为工人应用.
长期运行的Control和守护进程应用程序可以直接导入此包. A 类
链接容器为只读服务发现 :
import { container } from "@alienplatform/bindings"
const database = container("database")
const internalUrl = await database.getInternalUrl()
const publicUrl = await database.getPublicUrl() // string | null
使用内部 URL 调用同一部署中的资源 。 使用 只有当呼叫者不在私人网络时, 才会公开 URL .
邮资
Postgres是只连接:每个后端都说相同的线程,所以 绑定手背连接细节, 您的应用程序与自己的驱动程序连接 . 解析管理下云后端( Aurora, Cloud SQL, 灵活服务器) 读取 该云的秘密商店的密码 使用工作量本身的身份—— 只能装上定位器.
import { Client } from "pg"
import { postgres } from "@alienplatform/bindings"
const conn = await postgres("my-db").connection()
// Field style: node-postgres parses a URL's sslmode and would override `ssl`, so
// pass the fields when you need `conn.ssl` to take effect.
const client = new Client({
host: conn.host,
port: conn.port,
database: conn.database,
user: conn.username,
password: conn.password,
ssl: conn.ssl,
})
await client.connect()
conn.connectionString 与a postgres:// URL,带
证书%-编码, 对于驾驶员谁需要一个.
外部 (BYO) Postgres 绑定默认使用已验证的TLS. 他们 sslMode
政策被故意限制在 "verify-full" 财务报告和审定财务报表 "disable" 因为
节点不能代表 libpq 的机会性 prefer 后退无
拥有连接尝试 。 使用 "disable" 仅作为明确的相容性
选择退出纯文本服务器; 缺少遗留配置默认为
"verify-full"。 。 。 .
原生添加分辨率
导入软件包从不加载附加件, 因此软件包仍然保留
sideEffects: false环保工厂把它装入第一个装入
操作. Bindings.forRemoteDeployment 立即装入, 因为管理器
发现是合成器的一部分. src/loader.ts 解决它
顺序 :
ALIEN_BINDINGS_ADDON_PATH- 一条通往.node文档。 Dev/测试 只能逃出舱口;从未设置在已公布的安装中.- 每个平台的预建包
@alienplatform/bindings-<triple>,拉动 作为optionalDependency。这就是终端用户如何获得加词:npm编号 :bun只安装匹配主机的软件包os编号 :cpu编号 :libc编辑optionalDependencies块已存在 只见于已公布的清单 - 没错 发布时由发布管道注入,所以工作空间检查 携带无. - 倒计时: 本地建起的加通
crates/alien-bindings-node/alien-bindings-node.<triple>.node时 从安装的软件包走过来。 仅在装入时version()匹配 此软件包的版本( stale building 警告并拒绝).
地方发展
为主机构建附加符一次, 然后运行任何导入包的操作 :
bun run build:addon # or: pnpm -C packages/bindings run build:addon
build:addon 运行 napi build --platform --release 反对
crates/alien-bindings-node 并放弃 .node 旁边的箱子,在哪里
加载器的dev倒置后(上第3步)发现. 更改任何 Rust 后重建
内 alien-bindings 或者说 alien-bindings-node。构建 .node 被点燃了.
build:addon 仅用于主机 三进制; 在一个Mac上, 横跨
其他 mac 三进制(例如. darwin-x64 从一个 arm64 需要明确
napi build --release --target x86_64-apple-darwin --cwd ../../crates/alien-bindings-node。 。 。 .
将装载器指向另一个地方,设定 ALIEN_BINDINGS_ADDON_PATH
走向其道路(步骤1).
预建软件包( E)npm/(中文(简体) )
npm/<triple>/ 持有每个平台软件包的骨架
(单位:千美元)darwin-arm64, (中文(简体) ), darwin-x64, (中文(简体) ), linux-x64-gnu, (中文(简体) ), linux-arm64-gnu) (中文(简体) ). 每个载体
(单位:千美元) package.json (单位:千美元)name编号 :os编号 :cpu编号 :libc编号 :main编号 :files和一个读取器
.node 是在建设时间开始的 从来没有承诺过 没有木丝
目标:部署基础图像是glibc(链卫/wolfi-base),而不是高山.
释放管道在原生跑道上制造出每个加成物,分级进入
匹配 npm/<triple>/ dir, 重写占位符 0.0.0 给
释放版本, 注入精确版本 optionalDependencies 输入此选项
软件包已公布清单,并在
包装 固定准确的版本只保证出版的包装
永远装入匹配版本平台加载.
队列批次
queue("events").sendBatch([{ order: 1 }, { order: 2 }]) 发送 JSON 消息;
sendBatchText(["first", "second"]) 发送文本。 Python 曝光时 send_batch 财务报告和审定财务报表
send_batch_text 在队列控件上。 粗糙的暴露 Queue::send_batch 财务报告和审定财务报表
BoundQueue::send_batch。 。 。 .
每种输入按输入顺序返回一个结果: sent 指提供者
确认接受, rejected 包含一个代码和信件,用于确定
拒绝,和 unknown 在无法发送时包含代码和信件
已经建立。 重试未知结果可产生重复. 没有
跨批自动重复或交易担保。 之前的一个例外
结果返回意味着没有试图发送.
信件在序列化后必须包含1–65,536个UTF-8字节. 请求是 使用 SQS SendMessageBatch(最多10个条目和256KiB)进行块化,Pub/Sub发布, 并发送服务巴士HTTP批次。 服务 公共汽车还计算了JSON信封/逃逸 反对256KiB批量限制,因此严重逃逸的文本可能被否决. 空输入 返回空结果。 现有范围出版许可覆盖分批.
远程队列
发布冻结队列 remoteAccess: true,应用其最新设置
从后端解决它:
const bindings = await Bindings.forRemoteCustomer({ project, externalId, token })
const events = bindings.queue("events")
await events.send({ order: 1 })
const results = await events.sendBatch([{ order: 2 }, { order: 3 }])
Python 用途 await Bindings.for_remote_customer(...),则
bindings.queue("events").send(...) 或者说 .send_batch(...)两种语言都使用
Rust 供应商执行。 TypeScript 和 Python 远程队列控件只曝光发送;
云许可也拒绝接收、承认和清洗。 全权证书
由于租约到期,在运营前更新。 SQS、Pub/Sub和服务巴士
使用资源范围出版社赠款。 批次结果有相同的部分失败
语义作为本地队列手柄 .
新会话的沙盒能力来自 await sandbox.capabilities()。 。 。 .
重新连接后, 使用 await sandbox.capabilities(sandboxId) 以查询
届会。 Azure会议保留其原有的本地或代理运输工具
图像升级和回滚,所以工作支持可以与新会话不同.