尚未开放。托管应用还没有向账户开放。这些页面按目前正在构建的样子介绍它们,开放前可能还会变化。
托管应用是你的项目从目录中安装的应用:Rivet 是第一个。一次安装由你的项目已有的东西构成:方块应用承载它的服务,存储卷作为这些服务的磁盘,机密保存它生成的内容,存储桶保存它放在对象存储中的数据。每一样都带有该安装的标签,只能通过安装修改,和其他资源一样按方块的计量项向你计费。应用本身没有单独的价格。
什么时候用托管应用
- 不想自己运维的开源服务:它的版本、设置和磁盘都有人照管,没有任何请求时它会休眠,和方块一样。
- 每个环境、客户或智能体一个:一次调用安装一个,一次调用连同它的所有组成部分一起删除。
- 安装之前就知道费用:每个应用的计算器都会给出它一个月在方块各计量项上的费用。
工作方式
- 选择。
GET /v1/catalogue列出应用;GET /v1/catalogue/{app}显示一个应用:它的版本、安装接受的参数(一个 JSON Schema)、它给出的输出,以及按计算器的默认值,它一个月在方块各计量项上的费用。 - 安装。
POST /v1/installations带上应用的名称和参数,创建每个组成部分,等它的应用启动并被应用接管(最多 150 秒),然后返回它的输出:它的地址,以及访问它要用的信息。 - 使用。你的应用和沙箱通过它的地址访问它,或在项目的私有网络上通过它的应用名称访问。
- 删除。
DELETE /v1/installations/{id}删除每个组成部分:它的应用、存储卷及其中的内容、机密、存储桶及其中的内容。
POST /v1/installations
{"app": "rivet", "parameters": {"disk_gib": 20}}调用
| 调用 | 作用 |
|---|---|
GET /v1/catalogue, GET /v1/catalogue/{app} |
目录中的应用,每个都是最新版本;查看一个应用的最新版本或 ?version= 指定的版本,以及发布时的定义。 |
POST /v1/installations |
安装一个应用 (201);或者返回同一个创建请求已经做出的安装 (200)。 |
GET /v1/installations, GET /v1/installations/{id} |
项目的安装,最新的在前(?app= 只看某个应用的安装);按 id (ins-…) 或名称查看一个。 |
PATCH /v1/installations/{id} |
修改它的版本或参数。 |
DELETE /v1/installations/{id} |
删除它及它的所有组成部分。 |
/v1/managed/{app}/… |
应用自己的 API(如果有),由平台代为响应(Rivet 的)。 |
安装、修改和删除需要有 write 权限范围的密钥;读取需要 read。控制台也有这些操作:Applications 下的 Managed Applications(托管应用)页面列出项目的安装和目录,用由参数生成的表单安装应用,并能查看和删除安装。CLI (glac install rivet)、SDK 和 MCP 服务器也都可以。
安装
除 app 外,每个字段都可以省略:
| 字段 | 说明 |
|---|---|
app |
应用在目录中的名称。 |
name |
安装在项目中的名称:最多 24 个小写字母、数字和连字符,以字母开头,不能以连字符结尾,也不能有连续两个连字符。默认为应用的名称。它的应用按它命名,即 <name>-<service>,项目中已有应用使用的名称会被拒绝。 |
version |
应用的某个版本;默认为最新版本。已撤下的版本会被拒绝 (409 version_withdrawn)。 |
region |
na、eu 或 ap;默认为项目的归属区域。 |
parameters |
应用的参数 schema 所接受的内容。省略的参数取默认值;不符合 schema 的值会被拒绝 (400 invalid_parameter),它的路径在 param 中 (parameters.size.vcpus)。 |
requires |
用于依赖另一个应用的应用(比如依赖数据库):按依赖项指定项目中要使用的安装,{"db": "shop-db"}。没有指定的依赖项会随它一起安装,名为 <name>-<requirement>,并随它一起删除。 |
创建请求会创建每个组成部分,等待它的应用启动;如果应用本身在这些应用启动后还有自己的工作要做,也会等它做完(Rivet 会创建默认的 runner 池:见 Rivet),最多 150 秒:然后返回处于 ready 的安装;如果第一次启动仍在进行,则返回 installing,这时反复 GET 它,直到它变成 ready。任何一个组成部分无法创建,创建都会失败,并拆除已经创建的部分。创建按名称保证幂等:指定项目中已有安装的创建请求,如果要求的内容与它一致,就返回它 (200),否则会被拒绝 (409 name_taken)。
安装包含什么
| 字段 | 说明 |
|---|---|
id, name, app, version, region |
ins-…;与创建或修改时相同。 |
status |
installing、ready、updating、failed(failure 说明原因:它的应用、存储卷和存储桶会一直保留,直到你删除它)、deleting、deleted。 |
parameters |
所有参数:你给出的,以及取默认值的其余参数。对没有 admin 权限范围的密钥,机密参数显示为 null。 |
outputs, secret_outputs |
它给你的东西:它的地址,以及访问它要用的信息。机密输出(列在 secret_outputs 中)出现在创建的响应中,之后只有有 admin 权限范围的密钥(或控制台)才能读到;对其他密钥显示为 null。 |
apps, volumes, buckets |
它的组成:它的应用(方块的应用),按服务列出;它的存储卷(云盘),<service>/<volume>;它的存储桶,每个都附带最近一次测量(每五分钟一次)时的对象数和字节数,以及它的 ibk-… id。 |
requires, required_by |
它依赖的安装,每个要么绑定到它 (bound),要么随它一起安装;以及它是为哪个安装而安装的,它随那个安装一起删除。 |
api |
应用自己的 API(如果有)的基础地址。 |
created_at, updated_at, deleted_at |
时间。 |
安装由什么构成
它的应用和云盘属于项目:GET /v1/apps 和 GET /v1/drives 会列出它们,managed_by 指明所属的安装 ({"object": "installation", "id": "ins-…"}),它们的日志、指标和快照与其他的一样读取。每个应用都在 metadata 中带有安装信息(installation_id,以及应用的名称 installation_app)。它生成的内容(应用的管理员令牌、存储桶的密钥)是项目中的机密,名为 INS_<ID>_<SERVICE>_<NAME>。只有安装能修改它们:对它的应用更新、部署、回滚或删除,对它的云盘重命名、恢复或删除,在别处以读写方式挂载它的云盘,删除或修改它的实例,以及修改它的机密,都会被拒绝 (409 managed_by_installation)。
它的存储桶保存在平台自己的对象存储中,位于平台为项目维护的一个存储桶里,每个都在自己的前缀下 (<installation id>/<bucket>/),配有一个只能访问该前缀的密钥:应用只会得到它的存储桶的地址、前缀和密钥,别无其他。如果安装所在的区域有平台的对象存储,存储桶就保存在那里,否则保存在有对象存储的第一个区域(依次为北美、欧洲、亚太)。
限定于某个安装的密钥
用 installation 创建的密钥 (POST /v1/keys {"installation": "rivet", "scopes": ["read", "write"]}) 只能访问那个安装:读取安装本身、它的应用及其下的内容、它的云盘,以及它的应用的实例。其他操作都会被拒绝 (403 installation_key_scope),这种密钥也永远不会有 admin 权限范围 (400 invalid_field)。安装被删除时,这种密钥会被吊销。把它交给负责照管某个安装、而不应碰项目中其他任何东西的程序。
费用
安装按它的组成,以方块的价格计费:应用的实例按 CPU 时间和内存计费,存储卷和存储桶按存储卷数据计费,此外还有发往互联网的流量、请求和日志。存储桶中的数据每五分钟测量一次,按小时记为存储卷数据,记在各存储桶的 ibk-… id 下。应用本身没有自己的计量项,也不收取单独的费用。
GET /v1/usage?group_by=metadata.installation_id 按安装汇总它的实例的用量,GET /v1/usage?kind=volume&group_by=volume 按 id 列出它的存储卷和存储桶。应用的计算器(GET /v1/catalogue/{app} 的 calculator)会按它列出的输入,给出它一个月在这些计量项上的费用:month 是各输入取默认值时每个计量项的用量。
修改
PATCH /v1/installations/{id} 带上另一个 version,或以合并补丁的方式带上 parameters:给出的参数会被修改,null 把参数恢复为默认值,其余保持不变。每个应用改变的部分会作为它的一个新版本部署,等待方式与创建相同,期间安装处于 updating。存储卷创建后大小就固定了 (409 volume_size_fixed)。
删除
DELETE /v1/installations/{id} 删除它的应用、云盘及其中的内容、机密、存储桶及其中的内容,并吊销限定于它的密钥;作为它的依赖项、为它而安装的安装会随它一起删除,你绑定给它的安装则保留。被另一个安装依赖的安装不能删除 (409 required_by_installation):先删除那个安装。响应是处于 deleted 的安装;剩余部分需要更久时,返回 deleting,平台会完成删除。删除完成后名称即可再用。删除无法撤销。
事件
installation.created、installation.ready(创建或修改完成后)、installation.failed(附带 failure)、installation.updated 和 installation.deleted 都带有安装的 id,和其他事件一样发送到项目的 Webhook 和 GET /v1/events。
下一步
- Rivet:为 AI 智能体和实时应用提供的持久 actor,目录中的第一个应用。