为运行中的沙箱挂载存储卷
沙箱立即以读写方式把存储卷挂载到 path(休眠中的沙箱会被唤醒)。另一个节点持有的存储卷会先被带到沙箱所在的节点:原节点在对象存储保存了它当前的状态后释放它,沙箱所在的节点则逐块重建它,优先从原节点读取。mode 设为 snapshot 并给出 snapshot 时 (slice D7):沙箱在自己的节点上以只读方式挂载存储卷的那个快照,无论存储卷现在被谁持有,即使存储卷已被删除也可以,前提是沙箱的节点位于读取该快照的区域,即创建快照时存储卷所在的区域,快照会记住这个区域(否则返回 409 not_on_one_machine:在别处挂载属于 D9);其数据块在客户机读取时从对象存储取来,按存储卷的冷读取计入沙箱所属账户,挂载的响应是该快照。一个沙箱最多挂载 8 个存储卷(包括它自有的存储卷)。所需权限范围:write。
https://api.glac.ai/v1/sandboxes/{id}/volumes授权
路径参数
请求体JSON可选
- modeoptionalread_write或snapshot或null
read_write(默认):唯一的写入方。snapshot:以只读方式挂载snapshot指定的存储卷快照 (slice D7),存储卷所在区域的任何节点上的任意多个沙箱都可以同时挂载(为此沙箱会创建在存储卷所在的区域;在其他区域节点上的沙箱会被拒绝,返回 409not_on_one_machine:在别处挂载属于 D9),无论存储卷现在被谁持有,存储卷删除后也可以。沙箱从对象存储读取的数据按存储卷的冷读取计入其账户(drive_cold_read_bytes,在GET /v1/usage中该沙箱名下);其节点上已有的数据读取不计费。
Returns
200
已挂载的存储卷;以只读方式挂载快照时(mode 为 snapshot),为该快照。
以下之一:
- Volume
- managed_byobject | nullrequired
它所属的数据库 (
/v1/databases),或它所属的托管应用安装 (/v1/installations),只有它们能修改它:其他任何会修改它的调用都会被拒绝,返回 409managed_by_database或managed_by_installation。null:不受任何东西管理。- objectdatabase或installationrequired
- idstringrequired
- idstringrequired
其 id。
pattern: ^vol-[0-9a-hjkmnp-tv-z]{16}$ - objectstringrequired
- namestring | nullrequired
- size_bytesintegerrequired
最大容量:4 KiB 块的整数倍。
format: int64 · minimum: 16777216 - used_bytesintegerrequired
它在逻辑上保存的数据量:写入过、且此后没有被丢弃的 4 KiB 数据块(客户机的
fstrim会归还它们,节点每分钟请求一次),包括其文件系统自身的部分。按此计费(storage_gb_hours,每 GB·月 $0.05);分叉出的存储卷也按其保存的全部数据计费,其中包括其快照保存的数据:从 10 GB 的快照分叉出的存储卷按 10 GB 的存储卷计费,无论它在对象存储中与快照及原存储卷共享了多少数据。以其节点最后报告的为准;没有节点持有它时,以控制平面最后收到的为准。format: int64 · minimum: 0 - attached_to数组,元素为stringrequired
挂载它的沙箱,按 id 列出,与存储卷 API 一贯的写法相同:最多一个(
attachments说明挂载在哪里、以何种方式挂载)。pattern: ^sbx-[0-9a-hjkmnp-tv-z]{16}$ - regionrequired}
以下之一:
- string
- null
- homerequired
保存其副本的对象存储所在的区域:即创建它的区域 (
region),直到它迁到挂载它的区域(通过POST /v1/volumes/{id}/home,或者在那里待满一小时后自动迁移)。其节点不向对象存储复制任何东西时为 null。云盘以外类型的存储卷为 null (kind)。}以下之一:
- string
- null
- home_moveobject | nullrequired
正在进行的归属区域迁移(迁到持有它的区域):何时以及为何请求迁移(
user:POST /v1/volumes/{id}/home;away:在那里被持有了一小时;back:在归属区域迁过去之前,又回到归属区域被持有,从另一个区域的对象存储取回:它在那里写入的内容会复制回归属区域,归属区域保持不变),到目前为止已复制了多少个对象、多少字节,还剩多少个对象,以及中途停止时最后遇到的错误(它会自行继续)。没有正在进行的迁移时为 null。云盘以外类型的存储卷为 null (kind)。- asked_atstringrequiredformat: date-time
- asked_bystring | nullrequired
- copied_objectsinteger | nullrequiredminimum: 0
- copied_bytesinteger | nullrequiredformat: int64 · minimum: 0
- objects_leftinteger | nullrequiredminimum: 0
- errorstring | nullrequired
- statusstringrequired
ready;restoring:从备份创建,尚未全部就绪;failed:那次恢复已放弃,只能删除它;unavailable:其节点现在连不上(它保持上次看到的样子)。 - leaserequired
有沙箱以读写方式挂载它时提供;否则为 null。云盘以外类型的存储卷为 null (
kind)。}以下之一:
- VolumeLease
- null
- app_idstring | nullrequired
对于键控实例的存储卷(应用版本的
key_drives):所属的应用。云盘以外类型的存储卷为 null (kind)。 - keystring | nullrequired
以及它所属的键:它随该键的实例创建,不会挂载到其他沙箱,并随键一起删除。云盘以外类型的存储卷为 null (
kind)。 - created_atstringrequiredformat: date-time
- cache_bytesinteger | nullrequired
它在节点 NVMe 上的缓存:节点在那里最多保存多少,缓存为整个存储卷时(默认)即其大小;其余部分只在对象存储中,读取时会取回(客户机等待对象存储)并保留,同时最久未使用的数据在对象存储保存了它之后被逐出(对象存储还没保存的数据从不逐出,因此在对象存储收到之前,存储卷可能暂时超出其缓存)。小于 64 MiB 时按 64 MiB 计,即客户机一次读取连同预读带来的量。按小时作为存储卷的 NVMe 缓存计费,最多按其保存的数据量计(
GET /v1/usage的cache_gb_hours),与其保存的数据(used_bytes、storage_gb_hours)分开计费:全部缓存时两项都计费,完全不缓存时只计后一项。数据库的存储卷缓存其四分之一,至少 1 GiB。分叉出的存储卷沿用原存储卷的缓存设置。云盘以外类型的存储卷为 null (kind)。format: int64 · minimum: 0 - cached_bytesinteger | nullrequired
它现在在节点 NVMe 上的量:写入过和读取过、且此后没有被逐出的数据。没有节点持有它时为 null,来自早于缓存功能的节点时也为 null。云盘以外类型的存储卷为 null (
kind)。format: int64 · minimum: 0 - history_secondsinteger | nullrequired
存储卷最多能按时间恢复或分叉到多久以前(其版本窗口,slice DB8:reports/storage/drives.md 4.7):3600 到 86400 秒(一小时到一天)。有写入的存储卷每个时间段(30 秒)都会得到一个版本,即存储卷在某一时刻的状态(为最后那部分会暂停其虚拟机,最长两秒),按此时长保留;这些版本保留的、存储卷已不再需要的数据,像快照一样计费(
history.exclusive_bytes,计入dhist-<the volume's id without vol->名下的存储计量项)。null(或 0):不保留,即默认值;设为 null 时,已保留的版本会被删除。云盘以外类型的存储卷为 null (kind)。format: int64 · maximum: 86400 · minimum: 3600 - historyobject | nullrequired
有版本窗口时为其版本窗口 (
history_seconds);否则为 null。云盘以外类型的存储卷为 null (kind)。- fromstring | nullrequired
它最早能恢复到的时间:窗口的开始,如果其第一个版本更晚则为第一个版本的时间;还没有版本时为 null。
format: date-time - versionsintegerrequired
窗口保留了多少个版本 (
GET /v1/volumes/{id}/versions)。minimum: 0 - exclusive_bytesintegerrequired
其版本单独保存的数据:它们从存储卷的最新版本、其快照以及其他所有存储卷都不需要的对象中读取的数据,以对象存储回收程序最近一次的计算为准。版本窗口按此计费,与快照一样。
format: int64 · minimum: 0 - exclusive_atstring | nullrequired
回收程序计算出这个结果的时间;null:尚未计算。
format: date-time - keep_bytesinteger | nullrequired
窗口最多保留的旧数据量(免费版的数据库:1 GB,与 Tiger 的保留量相同):超出时最旧的版本会被删除。null:没有限制。
format: int64 · minimum: 0
- attachments数组,元素为objectrequired
挂载它的沙箱,以及挂载位置和方式:最多一个。云盘以外类型的存储卷为空。
- sandbox_idstringrequiredpattern: ^sbx-[0-9a-hjkmnp-tv-z]{16}$
- pathstring | nullrequired
沙箱挂载它的位置:一个绝对路径。如果控制平面只从节点的盘点中得知这次挂载,则为 null。
- modestringrequired
read_write:唯一的写入者。其快照的只读挂载不在这里:那是沙箱自己的存储卷 (view_of),要用快照的 id 移除。
- parent_volume_idstring | nullrequired
本存储卷从哪个存储卷分叉而来 (
POST /v1/volumes/{id}/fork),那个存储卷可能已被删除;不是分叉出的存储卷为 null。云盘以外类型的存储卷为 null (kind)。pattern: ^vol-[0-9a-hjkmnp-tv-z]{16}$ - root_volume_idstring | nullrequired
其分叉链上的第一个存储卷(父存储卷的根;父存储卷本身不是分叉时即为父存储卷);不是分叉出的存储卷为 null。云盘以外类型的存储卷为 null (
kind)。pattern: ^vol-[0-9a-hjkmnp-tv-z]{16}$ - kindstringrequired
drive:本节所说的存储卷,同一时间只属于一个沙箱的磁盘,复制到对象存储中(为项目密钥创建的存储卷,除共享存储卷外都是这种)。shared:由节点保存、可同时供任意多个沙箱使用的文件系统(POST /v1/volumes,带上shared: true),其余特性它都没有:没有租约、没有归属区域、没有快照、分叉或版本,也没有自己的缓存。plain:运营方创建的存储卷(单个节点上的文件系统,从不复制)。 - sharedbooleanrequired
是否为共享存储卷(
kind为shared)。 - host_failureobject | nullrequired
其节点宿主机上一次硬宕机后,其磁盘上有哪些不确定的地方,以其节点的说法为准;null:没有。
- from_backupstring | nullrequired
创建它所依据的备份(
POST /v1/volumes,带上from_backup);创建时为空的存储卷为 null。 - failurestring | nullrequired
无法从其备份创建的原因(
status为failed);其他情况为 null。 - restore_attemptinteger | nullrequired
对于从备份创建的存储卷,这是第几次尝试创建它(2:第一次在另一个节点上失败了);创建时为空的存储卷为 null。
maximum: 2 · minimum: 1 - first_failurestring | nullrequired
restore_attempt为 2 时,第一次尝试失败的原因;其他情况为 null。 - placement_refusalsarray | nullrequired
对于从备份创建的存储卷:在某个节点创建它之前拒绝创建它的节点,以及拒绝的原因;第一个节点就创建了它时为 null。
- backupsobject | nullrequired
其备份规则(
PATCH /v1/volumes/{id},带上backups;其备份见/v1/volumes/{id}/backups):是否每天备份、保留多少个每日备份,以及每个备份保留多久。其节点没有给出时为 null。- dailyoptionalboolean
- keepoptionalinteger
- expires_in_daysoptionalinteger
- durabilityoptionalstring | null
持久化方式,在创建时确定 (
DriveCreate.durability)。standard:客户机的 fsync 立即返回(写入已在其节点上),宿主机丢失时最多丢失最后一秒的写入。strict:客户机的 fsync 以及其文件系统的每次刷写,都要等对象存储保存了此前的全部写入才返回:客户机同步过的数据不会随宿主机丢失,每次 fsync 都要等待一次对对象存储的请求(几十毫秒)。云盘以外类型的存储卷为 null (kind)。
- VolumeSnapshot
- idstringrequiredpattern: ^dsnap-[0-9a-hjkmnp-tv-z]{16}$
- objectstringrequired
- namestring | nullrequired
- consistencystring | nullrequired
创建快照时如何暂停客户机的写入:
frozen,由沙箱的代理程序冻结其文件系统 (fs_consistent),对文件系统而言是一致的;paused,暂停其虚拟机,相当于断电时的状态;at_rest,当时没有运行中的沙箱以读写方式挂载该存储卷。 - used_bytesintegerrequired
创建快照时存储卷保存的数据量(其
used_bytes)。format: int64 · minimum: 0 - exclusive_bytesintegerrequired
它单独保存的数据:其版本从存储卷的最新版本、更新的快照以及所有分叉都不需要的对象中读取的数据(两个快照共同保存的对象计在较旧的那个上),以存储回收程序最近一次的计算为准;在此之前为 0。按此按小时计费。
format: int64 · minimum: 0 - exclusive_atstring | nullrequired
回收程序计算出这个结果的时间;null:尚未计算。
format: date-time - versionobjectrequired
它对应的存储卷版本。
- numberintegerrequiredformat: int64 · minimum: 0
- epochintegerrequiredformat: int64 · minimum: 0
- created_atstringrequiredformat: date-time
- volume_idstringrequired
它所属的存储卷,该存储卷可能已被删除。
pattern: ^vol-[0-9a-hjkmnp-tv-z]{16}$
400
invalid_json、unknown_field、unknown_parameter;missing_field:没有 drive 或没有 path,或者 mode 为 snapshot 却没有给出快照(param 为 snapshot);invalid_field:path 不是 / 以外的绝对路径,mode 既不是 read_write 也不是 snapshot,或者给出了 snapshot 而 mode 不是 snapshot,或者指定的是另一个存储卷的快照;invalid_path:节点不在 path 上挂载任何东西(那是系统自己的路径)。
- reportoptionalobject
随
compose_refused返回:导入的报告,说明拒绝了什么、为什么以及要改什么。- services数组,元素为objectrequired
导入所采纳的服务,按模型中的顺序。
- appobjectrequired
导入写入的服务应用字段:其版本的构成,以及立即生效的设置。
- scaleobjectrequired
- min_instancesintegerrequired
无论有没有请求,应用在一个区域内保持运行的实例数:即下限。该区域服务该应用的节点按分摊
max_instances的方式分摊它(两个节点、下限为 2:各一个;下限为 1:一个,在最先尝试的节点上;下限为 5:三个和两个),不在线的节点由其他节点补足。节点在收到通知时就创建自己那部分,而不是等到第一个请求,也不会因为空闲而停止或删除这些实例;它们按运行中的实例计量。0(未设置时的值):没有下限。调低后,超出部分的实例从那一刻起视为空闲,并像空闲实例一样被停止和删除。最多为max_instances(如果给出),且不超过账户套餐允许应用在一个区域请求的数量(caps.app_instances.limit:5、50 和 500):超出会被拒绝,返回 403plan_cap_reached。minimum: 0 - max_instancesinteger | nullrequired
应用在一个区域内最多有多少个实例:由该区域服务该应用的节点分摊。最多为账户套餐允许应用请求的数量(
caps.app_instances.limit:免费版 5,付费版 500):超出会被拒绝,返回 403plan_cap_reached;在允许的套餐上请求的数值会保留,但受当前套餐数值的限制。null:未指定数量的应用使用套餐的数值(caps.app_instances.default:免费版 2,付费版 50),如果min_instances更大则用它。告诉节点的数值,不超过账户除其他运行中资源外还能容纳的运行量,也不少于应用当前运行的实例数。minimum: 1 - sleep_after_msinteger | nullrequired
实例在没有请求时最多等待多久就停止,单位为毫秒。在这个上限以内,节点根据应用自己的流量选择等待时间:在应用最近一段时间里两次请求之间的间隔上,比较多运行一秒空闲与停止再恢复所花的 CPU 时间,选出成本最低的等待时间;这样,请求间隔比停止成本还短的应用会一直运行,请求间隔很长的应用则在最后一个响应结束后立即停止(
0:总是立即停止)。null(未设置时的值):平台的上限,三秒。设置过 100(2026年10月28日之前的默认值)的应用,从那天起视为 null。持续停止的实例会在delete_after_ms后被其节点删除,下一个需要实例的请求会得到一个新实例;min_instances保持运行的实例既不会停止也不会删除。maximum: 600000 · minimum: 0 - sleep_hold_max_msintegerrequired
实例中的程序发起的保持,在空闲时间到期后最多还能让实例运行多久,单位为毫秒:程序连接
/run/sbx/awake,如果某个请求在响应之后还有后续工作,就在响应它之前发送+,工作完成后发送-(或关闭连接,或退出);最后一个保持解除sleep_after_ms之后,实例停止。超过这个时间,无论有什么保持,实例都会停止;如果sleep_notice_ms要求通知,会先向已连接的程序发送sleep N cap。保持期间实例在运行,并按运行计量。0:不理会保持。null:30000(默认)。maximum: 900000 · minimum: 0 - delete_after_msinteger | nullrequired
实例空闲多久后被删除,与停止使用同一个起算点:下一个需要实例的请求会得到一个新实例,即版本模板的克隆,不含被删除的实例在内存和磁盘中积累的东西(需要长久保存的数据请放在存储卷或数据库中)。一秒到一小时,一小时是平台的时间,也是上限:超出会被拒绝 (400
invalid_field),需要保持预热的实例应计入min_instances。null(未设置时的值):节点的一小时 (--app-delete-after-seconds)。修改对应用现有的实例和之后创建的实例同样有效:每个节点至少每秒按应用当前的时间检查一次每个实例。不适用于应用的键控实例,键控实例用keys.delete_after_idle_ms。maximum: 3600000 · minimum: 1000 - wake_daily_atoptionalstring | null
每天的某个 UTC 时刻 (
HH:MM),在此时唤醒应用中处于休眠状态的键控实例和有状态服务的实例,让它们完成等待唤醒才能做的工作(比如数据库维护);节点根据应用请求创建和删除的实例只会被请求唤醒。唤醒本身不算活动:唤醒后运行的东西才算,运行完毕后实例会再次休眠。此外,无论这里怎么设置,有状态服务的实例都会为其 PostgreSQL 服务器pg_cron任务的下一次运行而被唤醒。null(默认):不唤醒。数据库的wake_daily_at就是其应用的这一设置。pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$
- runtimeoptional
运行时设置 (
AppCreate.runtime)。null:没有。}以下之一:
- Runtime
- ulimits映射,值为RuntimeLimitGivenrequired
- sysctls映射,值为stringrequired
- tmpfs数组,元素为objectrequired
- pathstringrequired
- size_bytesinteger | nullrequired
- modeintegerrequired
- dnsobjectrequired
- servers数组,元素为stringrequired
- search数组,元素为stringrequired
- options数组,元素为stringrequired
- shm_size_bytesinteger | nullrequired
- null
401
missing_api_key, invalid_api_key, expired_api_key, invalid_token.
- reportoptionalobject
随
compose_refused返回:导入的报告,说明拒绝了什么、为什么以及要改什么。- services数组,元素为objectrequired
导入所采纳的服务,按模型中的顺序。
- appobjectrequired
导入写入的服务应用字段:其版本的构成,以及立即生效的设置。
- scaleobjectrequired
- min_instancesintegerrequired
无论有没有请求,应用在一个区域内保持运行的实例数:即下限。该区域服务该应用的节点按分摊
max_instances的方式分摊它(两个节点、下限为 2:各一个;下限为 1:一个,在最先尝试的节点上;下限为 5:三个和两个),不在线的节点由其他节点补足。节点在收到通知时就创建自己那部分,而不是等到第一个请求,也不会因为空闲而停止或删除这些实例;它们按运行中的实例计量。0(未设置时的值):没有下限。调低后,超出部分的实例从那一刻起视为空闲,并像空闲实例一样被停止和删除。最多为max_instances(如果给出),且不超过账户套餐允许应用在一个区域请求的数量(caps.app_instances.limit:5、50 和 500):超出会被拒绝,返回 403plan_cap_reached。minimum: 0 - max_instancesinteger | nullrequired
应用在一个区域内最多有多少个实例:由该区域服务该应用的节点分摊。最多为账户套餐允许应用请求的数量(
caps.app_instances.limit:免费版 5,付费版 500):超出会被拒绝,返回 403plan_cap_reached;在允许的套餐上请求的数值会保留,但受当前套餐数值的限制。null:未指定数量的应用使用套餐的数值(caps.app_instances.default:免费版 2,付费版 50),如果min_instances更大则用它。告诉节点的数值,不超过账户除其他运行中资源外还能容纳的运行量,也不少于应用当前运行的实例数。minimum: 1 - sleep_after_msinteger | nullrequired
实例在没有请求时最多等待多久就停止,单位为毫秒。在这个上限以内,节点根据应用自己的流量选择等待时间:在应用最近一段时间里两次请求之间的间隔上,比较多运行一秒空闲与停止再恢复所花的 CPU 时间,选出成本最低的等待时间;这样,请求间隔比停止成本还短的应用会一直运行,请求间隔很长的应用则在最后一个响应结束后立即停止(
0:总是立即停止)。null(未设置时的值):平台的上限,三秒。设置过 100(2026年10月28日之前的默认值)的应用,从那天起视为 null。持续停止的实例会在delete_after_ms后被其节点删除,下一个需要实例的请求会得到一个新实例;min_instances保持运行的实例既不会停止也不会删除。maximum: 600000 · minimum: 0 - sleep_hold_max_msintegerrequired
实例中的程序发起的保持,在空闲时间到期后最多还能让实例运行多久,单位为毫秒:程序连接
/run/sbx/awake,如果某个请求在响应之后还有后续工作,就在响应它之前发送+,工作完成后发送-(或关闭连接,或退出);最后一个保持解除sleep_after_ms之后,实例停止。超过这个时间,无论有什么保持,实例都会停止;如果sleep_notice_ms要求通知,会先向已连接的程序发送sleep N cap。保持期间实例在运行,并按运行计量。0:不理会保持。null:30000(默认)。maximum: 900000 · minimum: 0 - delete_after_msinteger | nullrequired
实例空闲多久后被删除,与停止使用同一个起算点:下一个需要实例的请求会得到一个新实例,即版本模板的克隆,不含被删除的实例在内存和磁盘中积累的东西(需要长久保存的数据请放在存储卷或数据库中)。一秒到一小时,一小时是平台的时间,也是上限:超出会被拒绝 (400
invalid_field),需要保持预热的实例应计入min_instances。null(未设置时的值):节点的一小时 (--app-delete-after-seconds)。修改对应用现有的实例和之后创建的实例同样有效:每个节点至少每秒按应用当前的时间检查一次每个实例。不适用于应用的键控实例,键控实例用keys.delete_after_idle_ms。maximum: 3600000 · minimum: 1000 - wake_daily_atoptionalstring | null
每天的某个 UTC 时刻 (
HH:MM),在此时唤醒应用中处于休眠状态的键控实例和有状态服务的实例,让它们完成等待唤醒才能做的工作(比如数据库维护);节点根据应用请求创建和删除的实例只会被请求唤醒。唤醒本身不算活动:唤醒后运行的东西才算,运行完毕后实例会再次休眠。此外,无论这里怎么设置,有状态服务的实例都会为其 PostgreSQL 服务器pg_cron任务的下一次运行而被唤醒。null(默认):不唤醒。数据库的wake_daily_at就是其应用的这一设置。pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$
- runtimeoptional
运行时设置 (
AppCreate.runtime)。null:没有。}以下之一:
- Runtime
- ulimits映射,值为RuntimeLimitGivenrequired
- sysctls映射,值为stringrequired
- tmpfs数组,元素为objectrequired
- pathstringrequired
- size_bytesinteger | nullrequired
- modeintegerrequired
- dnsobjectrequired
- servers数组,元素为stringrequired
- search数组,元素为stringrequired
- options数组,元素为stringrequired
- shm_size_bytesinteger | nullrequired
- null
402
account_in_debt:账户欠费(余额低于零),付清之前账户的任何东西都不能使用:其密钥以及其沙箱令牌的每个调用都会这样被拒绝,以下除外:读取欠款和付款的调用;列出和读取其存储卷的备份,以及从备份创建存储卷的调用(POST /v1/volumes,带上 from_backup,正在删除账户存储的数据时除外),这是停止付款的账户最需要的;此外,除非控制平面以 --debt-allows-delete false 启动,还有列出、读取和删除账户存储的存储卷、快照和沙箱,以及删除其备份的调用。新建备份始终不行。在检查密钥的权限范围之前就拒绝,无论路径是什么。错误信息会说明欠款金额、起始时间、账户存储的数据何时会被删除、如何付款、可以删除存储的数据以免金额继续增长,以及仍然可以从备份创建存储卷(GET /v1/billing、debt)。
- reportoptionalobject
随
compose_refused返回:导入的报告,说明拒绝了什么、为什么以及要改什么。- services数组,元素为objectrequired
导入所采纳的服务,按模型中的顺序。
- appobjectrequired
导入写入的服务应用字段:其版本的构成,以及立即生效的设置。
- scaleobjectrequired
- min_instancesintegerrequired
无论有没有请求,应用在一个区域内保持运行的实例数:即下限。该区域服务该应用的节点按分摊
max_instances的方式分摊它(两个节点、下限为 2:各一个;下限为 1:一个,在最先尝试的节点上;下限为 5:三个和两个),不在线的节点由其他节点补足。节点在收到通知时就创建自己那部分,而不是等到第一个请求,也不会因为空闲而停止或删除这些实例;它们按运行中的实例计量。0(未设置时的值):没有下限。调低后,超出部分的实例从那一刻起视为空闲,并像空闲实例一样被停止和删除。最多为max_instances(如果给出),且不超过账户套餐允许应用在一个区域请求的数量(caps.app_instances.limit:5、50 和 500):超出会被拒绝,返回 403plan_cap_reached。minimum: 0 - max_instancesinteger | nullrequired
应用在一个区域内最多有多少个实例:由该区域服务该应用的节点分摊。最多为账户套餐允许应用请求的数量(
caps.app_instances.limit:免费版 5,付费版 500):超出会被拒绝,返回 403plan_cap_reached;在允许的套餐上请求的数值会保留,但受当前套餐数值的限制。null:未指定数量的应用使用套餐的数值(caps.app_instances.default:免费版 2,付费版 50),如果min_instances更大则用它。告诉节点的数值,不超过账户除其他运行中资源外还能容纳的运行量,也不少于应用当前运行的实例数。minimum: 1 - sleep_after_msinteger | nullrequired
实例在没有请求时最多等待多久就停止,单位为毫秒。在这个上限以内,节点根据应用自己的流量选择等待时间:在应用最近一段时间里两次请求之间的间隔上,比较多运行一秒空闲与停止再恢复所花的 CPU 时间,选出成本最低的等待时间;这样,请求间隔比停止成本还短的应用会一直运行,请求间隔很长的应用则在最后一个响应结束后立即停止(
0:总是立即停止)。null(未设置时的值):平台的上限,三秒。设置过 100(2026年10月28日之前的默认值)的应用,从那天起视为 null。持续停止的实例会在delete_after_ms后被其节点删除,下一个需要实例的请求会得到一个新实例;min_instances保持运行的实例既不会停止也不会删除。maximum: 600000 · minimum: 0 - sleep_hold_max_msintegerrequired
实例中的程序发起的保持,在空闲时间到期后最多还能让实例运行多久,单位为毫秒:程序连接
/run/sbx/awake,如果某个请求在响应之后还有后续工作,就在响应它之前发送+,工作完成后发送-(或关闭连接,或退出);最后一个保持解除sleep_after_ms之后,实例停止。超过这个时间,无论有什么保持,实例都会停止;如果sleep_notice_ms要求通知,会先向已连接的程序发送sleep N cap。保持期间实例在运行,并按运行计量。0:不理会保持。null:30000(默认)。maximum: 900000 · minimum: 0 - delete_after_msinteger | nullrequired
实例空闲多久后被删除,与停止使用同一个起算点:下一个需要实例的请求会得到一个新实例,即版本模板的克隆,不含被删除的实例在内存和磁盘中积累的东西(需要长久保存的数据请放在存储卷或数据库中)。一秒到一小时,一小时是平台的时间,也是上限:超出会被拒绝 (400
invalid_field),需要保持预热的实例应计入min_instances。null(未设置时的值):节点的一小时 (--app-delete-after-seconds)。修改对应用现有的实例和之后创建的实例同样有效:每个节点至少每秒按应用当前的时间检查一次每个实例。不适用于应用的键控实例,键控实例用keys.delete_after_idle_ms。maximum: 3600000 · minimum: 1000 - wake_daily_atoptionalstring | null
每天的某个 UTC 时刻 (
HH:MM),在此时唤醒应用中处于休眠状态的键控实例和有状态服务的实例,让它们完成等待唤醒才能做的工作(比如数据库维护);节点根据应用请求创建和删除的实例只会被请求唤醒。唤醒本身不算活动:唤醒后运行的东西才算,运行完毕后实例会再次休眠。此外,无论这里怎么设置,有状态服务的实例都会为其 PostgreSQL 服务器pg_cron任务的下一次运行而被唤醒。null(默认):不唤醒。数据库的wake_daily_at就是其应用的这一设置。pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$
- runtimeoptional
运行时设置 (
AppCreate.runtime)。null:没有。}以下之一:
- Runtime
- ulimits映射,值为RuntimeLimitGivenrequired
- sysctls映射,值为stringrequired
- tmpfs数组,元素为objectrequired
- pathstringrequired
- size_bytesinteger | nullrequired
- modeintegerrequired
- dnsobjectrequired
- servers数组,元素为stringrequired
- search数组,元素为stringrequired
- options数组,元素为stringrequired
- shm_size_bytesinteger | nullrequired
- null
403
key_scope、needs_api_key、account_held(与其他地方一样);account_share_reached:在账户已占满数据盘份额的节点上以只读方式挂载快照(mode 为 snapshot),使用节点的原话(客户机从快照读取的数据会保存在那里,并计入份额)。
- reportoptionalobject
随
compose_refused返回:导入的报告,说明拒绝了什么、为什么以及要改什么。- services数组,元素为objectrequired
导入所采纳的服务,按模型中的顺序。
- appobjectrequired
导入写入的服务应用字段:其版本的构成,以及立即生效的设置。
- scaleobjectrequired
- min_instancesintegerrequired
无论有没有请求,应用在一个区域内保持运行的实例数:即下限。该区域服务该应用的节点按分摊
max_instances的方式分摊它(两个节点、下限为 2:各一个;下限为 1:一个,在最先尝试的节点上;下限为 5:三个和两个),不在线的节点由其他节点补足。节点在收到通知时就创建自己那部分,而不是等到第一个请求,也不会因为空闲而停止或删除这些实例;它们按运行中的实例计量。0(未设置时的值):没有下限。调低后,超出部分的实例从那一刻起视为空闲,并像空闲实例一样被停止和删除。最多为max_instances(如果给出),且不超过账户套餐允许应用在一个区域请求的数量(caps.app_instances.limit:5、50 和 500):超出会被拒绝,返回 403plan_cap_reached。minimum: 0 - max_instancesinteger | nullrequired
应用在一个区域内最多有多少个实例:由该区域服务该应用的节点分摊。最多为账户套餐允许应用请求的数量(
caps.app_instances.limit:免费版 5,付费版 500):超出会被拒绝,返回 403plan_cap_reached;在允许的套餐上请求的数值会保留,但受当前套餐数值的限制。null:未指定数量的应用使用套餐的数值(caps.app_instances.default:免费版 2,付费版 50),如果min_instances更大则用它。告诉节点的数值,不超过账户除其他运行中资源外还能容纳的运行量,也不少于应用当前运行的实例数。minimum: 1 - sleep_after_msinteger | nullrequired
实例在没有请求时最多等待多久就停止,单位为毫秒。在这个上限以内,节点根据应用自己的流量选择等待时间:在应用最近一段时间里两次请求之间的间隔上,比较多运行一秒空闲与停止再恢复所花的 CPU 时间,选出成本最低的等待时间;这样,请求间隔比停止成本还短的应用会一直运行,请求间隔很长的应用则在最后一个响应结束后立即停止(
0:总是立即停止)。null(未设置时的值):平台的上限,三秒。设置过 100(2026年10月28日之前的默认值)的应用,从那天起视为 null。持续停止的实例会在delete_after_ms后被其节点删除,下一个需要实例的请求会得到一个新实例;min_instances保持运行的实例既不会停止也不会删除。maximum: 600000 · minimum: 0 - sleep_hold_max_msintegerrequired
实例中的程序发起的保持,在空闲时间到期后最多还能让实例运行多久,单位为毫秒:程序连接
/run/sbx/awake,如果某个请求在响应之后还有后续工作,就在响应它之前发送+,工作完成后发送-(或关闭连接,或退出);最后一个保持解除sleep_after_ms之后,实例停止。超过这个时间,无论有什么保持,实例都会停止;如果sleep_notice_ms要求通知,会先向已连接的程序发送sleep N cap。保持期间实例在运行,并按运行计量。0:不理会保持。null:30000(默认)。maximum: 900000 · minimum: 0 - delete_after_msinteger | nullrequired
实例空闲多久后被删除,与停止使用同一个起算点:下一个需要实例的请求会得到一个新实例,即版本模板的克隆,不含被删除的实例在内存和磁盘中积累的东西(需要长久保存的数据请放在存储卷或数据库中)。一秒到一小时,一小时是平台的时间,也是上限:超出会被拒绝 (400
invalid_field),需要保持预热的实例应计入min_instances。null(未设置时的值):节点的一小时 (--app-delete-after-seconds)。修改对应用现有的实例和之后创建的实例同样有效:每个节点至少每秒按应用当前的时间检查一次每个实例。不适用于应用的键控实例,键控实例用keys.delete_after_idle_ms。maximum: 3600000 · minimum: 1000 - wake_daily_atoptionalstring | null
每天的某个 UTC 时刻 (
HH:MM),在此时唤醒应用中处于休眠状态的键控实例和有状态服务的实例,让它们完成等待唤醒才能做的工作(比如数据库维护);节点根据应用请求创建和删除的实例只会被请求唤醒。唤醒本身不算活动:唤醒后运行的东西才算,运行完毕后实例会再次休眠。此外,无论这里怎么设置,有状态服务的实例都会为其 PostgreSQL 服务器pg_cron任务的下一次运行而被唤醒。null(默认):不唤醒。数据库的wake_daily_at就是其应用的这一设置。pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$
- runtimeoptional
运行时设置 (
AppCreate.runtime)。null:没有。}以下之一:
- Runtime
- ulimits映射,值为RuntimeLimitGivenrequired
- sysctls映射,值为stringrequired
- tmpfs数组,元素为objectrequired
- pathstringrequired
- size_bytesinteger | nullrequired
- modeintegerrequired
- dnsobjectrequired
- servers数组,元素为stringrequired
- search数组,元素为stringrequired
- options数组,元素为stringrequired
- shm_size_bytesinteger | nullrequired
- null
404
volume_not_found、sandbox_not_found;snapshot_not_found(param 为 snapshot):项目中没有该 id 的、未被删除的存储卷快照。
- reportoptionalobject
随
compose_refused返回:导入的报告,说明拒绝了什么、为什么以及要改什么。- services数组,元素为objectrequired
导入所采纳的服务,按模型中的顺序。
- appobjectrequired
导入写入的服务应用字段:其版本的构成,以及立即生效的设置。
- scaleobjectrequired
- min_instancesintegerrequired
无论有没有请求,应用在一个区域内保持运行的实例数:即下限。该区域服务该应用的节点按分摊
max_instances的方式分摊它(两个节点、下限为 2:各一个;下限为 1:一个,在最先尝试的节点上;下限为 5:三个和两个),不在线的节点由其他节点补足。节点在收到通知时就创建自己那部分,而不是等到第一个请求,也不会因为空闲而停止或删除这些实例;它们按运行中的实例计量。0(未设置时的值):没有下限。调低后,超出部分的实例从那一刻起视为空闲,并像空闲实例一样被停止和删除。最多为max_instances(如果给出),且不超过账户套餐允许应用在一个区域请求的数量(caps.app_instances.limit:5、50 和 500):超出会被拒绝,返回 403plan_cap_reached。minimum: 0 - max_instancesinteger | nullrequired
应用在一个区域内最多有多少个实例:由该区域服务该应用的节点分摊。最多为账户套餐允许应用请求的数量(
caps.app_instances.limit:免费版 5,付费版 500):超出会被拒绝,返回 403plan_cap_reached;在允许的套餐上请求的数值会保留,但受当前套餐数值的限制。null:未指定数量的应用使用套餐的数值(caps.app_instances.default:免费版 2,付费版 50),如果min_instances更大则用它。告诉节点的数值,不超过账户除其他运行中资源外还能容纳的运行量,也不少于应用当前运行的实例数。minimum: 1 - sleep_after_msinteger | nullrequired
实例在没有请求时最多等待多久就停止,单位为毫秒。在这个上限以内,节点根据应用自己的流量选择等待时间:在应用最近一段时间里两次请求之间的间隔上,比较多运行一秒空闲与停止再恢复所花的 CPU 时间,选出成本最低的等待时间;这样,请求间隔比停止成本还短的应用会一直运行,请求间隔很长的应用则在最后一个响应结束后立即停止(
0:总是立即停止)。null(未设置时的值):平台的上限,三秒。设置过 100(2026年10月28日之前的默认值)的应用,从那天起视为 null。持续停止的实例会在delete_after_ms后被其节点删除,下一个需要实例的请求会得到一个新实例;min_instances保持运行的实例既不会停止也不会删除。maximum: 600000 · minimum: 0 - sleep_hold_max_msintegerrequired
实例中的程序发起的保持,在空闲时间到期后最多还能让实例运行多久,单位为毫秒:程序连接
/run/sbx/awake,如果某个请求在响应之后还有后续工作,就在响应它之前发送+,工作完成后发送-(或关闭连接,或退出);最后一个保持解除sleep_after_ms之后,实例停止。超过这个时间,无论有什么保持,实例都会停止;如果sleep_notice_ms要求通知,会先向已连接的程序发送sleep N cap。保持期间实例在运行,并按运行计量。0:不理会保持。null:30000(默认)。maximum: 900000 · minimum: 0 - delete_after_msinteger | nullrequired
实例空闲多久后被删除,与停止使用同一个起算点:下一个需要实例的请求会得到一个新实例,即版本模板的克隆,不含被删除的实例在内存和磁盘中积累的东西(需要长久保存的数据请放在存储卷或数据库中)。一秒到一小时,一小时是平台的时间,也是上限:超出会被拒绝 (400
invalid_field),需要保持预热的实例应计入min_instances。null(未设置时的值):节点的一小时 (--app-delete-after-seconds)。修改对应用现有的实例和之后创建的实例同样有效:每个节点至少每秒按应用当前的时间检查一次每个实例。不适用于应用的键控实例,键控实例用keys.delete_after_idle_ms。maximum: 3600000 · minimum: 1000 - wake_daily_atoptionalstring | null
每天的某个 UTC 时刻 (
HH:MM),在此时唤醒应用中处于休眠状态的键控实例和有状态服务的实例,让它们完成等待唤醒才能做的工作(比如数据库维护);节点根据应用请求创建和删除的实例只会被请求唤醒。唤醒本身不算活动:唤醒后运行的东西才算,运行完毕后实例会再次休眠。此外,无论这里怎么设置,有状态服务的实例都会为其 PostgreSQL 服务器pg_cron任务的下一次运行而被唤醒。null(默认):不唤醒。数据库的wake_daily_at就是其应用的这一设置。pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$
- runtimeoptional
运行时设置 (
AppCreate.runtime)。null:没有。}以下之一:
- Runtime
- ulimits映射,值为RuntimeLimitGivenrequired
- sysctls映射,值为stringrequired
- tmpfs数组,元素为objectrequired
- pathstringrequired
- size_bytesinteger | nullrequired
- modeintegerrequired
- dnsobjectrequired
- servers数组,元素为stringrequired
- search数组,元素为stringrequired
- options数组,元素为stringrequired
- shm_size_bytesinteger | nullrequired
- null
409
volume_in_use:另一个沙箱以读写方式挂载着它(存储卷同一时间只属于一个沙箱;以只读方式挂载它的快照则不限沙箱数量),或者本沙箱已经挂载了它;too_many_drives:沙箱已有 8 个;too_many_volumes:其虚拟机的空余磁盘少于此数(从早于八个磁盘时期的模板或快照创建的沙箱,在从磁盘重新启动之前都是如此);key_drive:它属于某个键控实例;mount_path_taken:path 上已挂载了别的东西;detached_mount_in_use:沙箱虚拟机上每个没有存储卷的空余磁盘,仍被一个文件系统占着:那是之前在进程使用期间用 ?force=true 从沙箱强制卸下的存储卷,沙箱中仍有进程打开着它(进程放开它或沙箱重启后,磁盘就可以重新使用);not_on_one_machine:其节点与沙箱的节点不在同一区域,或者复制到不同的对象存储;对于快照(mode 为 snapshot,param 为 snapshot),沙箱的节点不在读取该快照的区域(即创建快照时其存储卷所在的区域,无论存储卷是否已被删除);not_copied、store_unfenced:沙箱的节点不向对象存储复制任何东西,或者复制到的对象存储不经手任何迁移,而存储卷在另一个节点上;volume_restoring:它仍在从备份创建;sandbox_failed:沙箱已失败。managed_by_database:该存储卷属于某个数据库 (managed_by),只能通过 /v1/databases 修改。
- reportoptionalobject
随
compose_refused返回:导入的报告,说明拒绝了什么、为什么以及要改什么。- services数组,元素为objectrequired
导入所采纳的服务,按模型中的顺序。
- appobjectrequired
导入写入的服务应用字段:其版本的构成,以及立即生效的设置。
- scaleobjectrequired
- min_instancesintegerrequired
无论有没有请求,应用在一个区域内保持运行的实例数:即下限。该区域服务该应用的节点按分摊
max_instances的方式分摊它(两个节点、下限为 2:各一个;下限为 1:一个,在最先尝试的节点上;下限为 5:三个和两个),不在线的节点由其他节点补足。节点在收到通知时就创建自己那部分,而不是等到第一个请求,也不会因为空闲而停止或删除这些实例;它们按运行中的实例计量。0(未设置时的值):没有下限。调低后,超出部分的实例从那一刻起视为空闲,并像空闲实例一样被停止和删除。最多为max_instances(如果给出),且不超过账户套餐允许应用在一个区域请求的数量(caps.app_instances.limit:5、50 和 500):超出会被拒绝,返回 403plan_cap_reached。minimum: 0 - max_instancesinteger | nullrequired
应用在一个区域内最多有多少个实例:由该区域服务该应用的节点分摊。最多为账户套餐允许应用请求的数量(
caps.app_instances.limit:免费版 5,付费版 500):超出会被拒绝,返回 403plan_cap_reached;在允许的套餐上请求的数值会保留,但受当前套餐数值的限制。null:未指定数量的应用使用套餐的数值(caps.app_instances.default:免费版 2,付费版 50),如果min_instances更大则用它。告诉节点的数值,不超过账户除其他运行中资源外还能容纳的运行量,也不少于应用当前运行的实例数。minimum: 1 - sleep_after_msinteger | nullrequired
实例在没有请求时最多等待多久就停止,单位为毫秒。在这个上限以内,节点根据应用自己的流量选择等待时间:在应用最近一段时间里两次请求之间的间隔上,比较多运行一秒空闲与停止再恢复所花的 CPU 时间,选出成本最低的等待时间;这样,请求间隔比停止成本还短的应用会一直运行,请求间隔很长的应用则在最后一个响应结束后立即停止(
0:总是立即停止)。null(未设置时的值):平台的上限,三秒。设置过 100(2026年10月28日之前的默认值)的应用,从那天起视为 null。持续停止的实例会在delete_after_ms后被其节点删除,下一个需要实例的请求会得到一个新实例;min_instances保持运行的实例既不会停止也不会删除。maximum: 600000 · minimum: 0 - sleep_hold_max_msintegerrequired
实例中的程序发起的保持,在空闲时间到期后最多还能让实例运行多久,单位为毫秒:程序连接
/run/sbx/awake,如果某个请求在响应之后还有后续工作,就在响应它之前发送+,工作完成后发送-(或关闭连接,或退出);最后一个保持解除sleep_after_ms之后,实例停止。超过这个时间,无论有什么保持,实例都会停止;如果sleep_notice_ms要求通知,会先向已连接的程序发送sleep N cap。保持期间实例在运行,并按运行计量。0:不理会保持。null:30000(默认)。maximum: 900000 · minimum: 0 - delete_after_msinteger | nullrequired
实例空闲多久后被删除,与停止使用同一个起算点:下一个需要实例的请求会得到一个新实例,即版本模板的克隆,不含被删除的实例在内存和磁盘中积累的东西(需要长久保存的数据请放在存储卷或数据库中)。一秒到一小时,一小时是平台的时间,也是上限:超出会被拒绝 (400
invalid_field),需要保持预热的实例应计入min_instances。null(未设置时的值):节点的一小时 (--app-delete-after-seconds)。修改对应用现有的实例和之后创建的实例同样有效:每个节点至少每秒按应用当前的时间检查一次每个实例。不适用于应用的键控实例,键控实例用keys.delete_after_idle_ms。maximum: 3600000 · minimum: 1000 - wake_daily_atoptionalstring | null
每天的某个 UTC 时刻 (
HH:MM),在此时唤醒应用中处于休眠状态的键控实例和有状态服务的实例,让它们完成等待唤醒才能做的工作(比如数据库维护);节点根据应用请求创建和删除的实例只会被请求唤醒。唤醒本身不算活动:唤醒后运行的东西才算,运行完毕后实例会再次休眠。此外,无论这里怎么设置,有状态服务的实例都会为其 PostgreSQL 服务器pg_cron任务的下一次运行而被唤醒。null(默认):不唤醒。数据库的wake_daily_at就是其应用的这一设置。pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$
- runtimeoptional
运行时设置 (
AppCreate.runtime)。null:没有。}以下之一:
- Runtime
- ulimits映射,值为RuntimeLimitGivenrequired
- sysctls映射,值为stringrequired
- tmpfs数组,元素为objectrequired
- pathstringrequired
- size_bytesinteger | nullrequired
- modeintegerrequired
- dnsobjectrequired
- servers数组,元素为stringrequired
- search数组,元素为stringrequired
- options数组,元素为stringrequired
- shm_size_bytesinteger | nullrequired
- null
503
node_unavailable:沙箱所在的节点或存储卷所在的节点连不上(如果存储卷所在的节点没有响应,会在该节点的租约到期后把存储卷带过来);copy_behind:对象存储还没有保存存储卷当前的状态:稍后再请求一次;drive_not_brought:其节点没有释放它,或者沙箱所在的节点无法取得它(错误信息会说明原因);not_served_here:沙箱所在的节点不保存存储卷;unavailable:存储卷正被另一个调用带往另一个节点:稍后再请求一次。
- reportoptionalobject
随
compose_refused返回:导入的报告,说明拒绝了什么、为什么以及要改什么。- services数组,元素为objectrequired
导入所采纳的服务,按模型中的顺序。
- appobjectrequired
导入写入的服务应用字段:其版本的构成,以及立即生效的设置。
- scaleobjectrequired
- min_instancesintegerrequired
无论有没有请求,应用在一个区域内保持运行的实例数:即下限。该区域服务该应用的节点按分摊
max_instances的方式分摊它(两个节点、下限为 2:各一个;下限为 1:一个,在最先尝试的节点上;下限为 5:三个和两个),不在线的节点由其他节点补足。节点在收到通知时就创建自己那部分,而不是等到第一个请求,也不会因为空闲而停止或删除这些实例;它们按运行中的实例计量。0(未设置时的值):没有下限。调低后,超出部分的实例从那一刻起视为空闲,并像空闲实例一样被停止和删除。最多为max_instances(如果给出),且不超过账户套餐允许应用在一个区域请求的数量(caps.app_instances.limit:5、50 和 500):超出会被拒绝,返回 403plan_cap_reached。minimum: 0 - max_instancesinteger | nullrequired
应用在一个区域内最多有多少个实例:由该区域服务该应用的节点分摊。最多为账户套餐允许应用请求的数量(
caps.app_instances.limit:免费版 5,付费版 500):超出会被拒绝,返回 403plan_cap_reached;在允许的套餐上请求的数值会保留,但受当前套餐数值的限制。null:未指定数量的应用使用套餐的数值(caps.app_instances.default:免费版 2,付费版 50),如果min_instances更大则用它。告诉节点的数值,不超过账户除其他运行中资源外还能容纳的运行量,也不少于应用当前运行的实例数。minimum: 1 - sleep_after_msinteger | nullrequired
实例在没有请求时最多等待多久就停止,单位为毫秒。在这个上限以内,节点根据应用自己的流量选择等待时间:在应用最近一段时间里两次请求之间的间隔上,比较多运行一秒空闲与停止再恢复所花的 CPU 时间,选出成本最低的等待时间;这样,请求间隔比停止成本还短的应用会一直运行,请求间隔很长的应用则在最后一个响应结束后立即停止(
0:总是立即停止)。null(未设置时的值):平台的上限,三秒。设置过 100(2026年10月28日之前的默认值)的应用,从那天起视为 null。持续停止的实例会在delete_after_ms后被其节点删除,下一个需要实例的请求会得到一个新实例;min_instances保持运行的实例既不会停止也不会删除。maximum: 600000 · minimum: 0 - sleep_hold_max_msintegerrequired
实例中的程序发起的保持,在空闲时间到期后最多还能让实例运行多久,单位为毫秒:程序连接
/run/sbx/awake,如果某个请求在响应之后还有后续工作,就在响应它之前发送+,工作完成后发送-(或关闭连接,或退出);最后一个保持解除sleep_after_ms之后,实例停止。超过这个时间,无论有什么保持,实例都会停止;如果sleep_notice_ms要求通知,会先向已连接的程序发送sleep N cap。保持期间实例在运行,并按运行计量。0:不理会保持。null:30000(默认)。maximum: 900000 · minimum: 0 - delete_after_msinteger | nullrequired
实例空闲多久后被删除,与停止使用同一个起算点:下一个需要实例的请求会得到一个新实例,即版本模板的克隆,不含被删除的实例在内存和磁盘中积累的东西(需要长久保存的数据请放在存储卷或数据库中)。一秒到一小时,一小时是平台的时间,也是上限:超出会被拒绝 (400
invalid_field),需要保持预热的实例应计入min_instances。null(未设置时的值):节点的一小时 (--app-delete-after-seconds)。修改对应用现有的实例和之后创建的实例同样有效:每个节点至少每秒按应用当前的时间检查一次每个实例。不适用于应用的键控实例,键控实例用keys.delete_after_idle_ms。maximum: 3600000 · minimum: 1000 - wake_daily_atoptionalstring | null
每天的某个 UTC 时刻 (
HH:MM),在此时唤醒应用中处于休眠状态的键控实例和有状态服务的实例,让它们完成等待唤醒才能做的工作(比如数据库维护);节点根据应用请求创建和删除的实例只会被请求唤醒。唤醒本身不算活动:唤醒后运行的东西才算,运行完毕后实例会再次休眠。此外,无论这里怎么设置,有状态服务的实例都会为其 PostgreSQL 服务器pg_cron任务的下一次运行而被唤醒。null(默认):不唤醒。数据库的wake_daily_at就是其应用的这一设置。pattern: ^([01][0-9]|2[0-3]):[0-5][0-9]$
- runtimeoptional
运行时设置 (
AppCreate.runtime)。null:没有。}以下之一:
- Runtime
- ulimits映射,值为RuntimeLimitGivenrequired
- sysctls映射,值为stringrequired
- tmpfs数组,元素为objectrequired
- pathstringrequired
- size_bytesinteger | nullrequired
- modeintegerrequired
- dnsobjectrequired
- servers数组,元素为stringrequired
- search数组,元素为stringrequired
- options数组,元素为stringrequired
- shm_size_bytesinteger | nullrequired
- null