快照
POST /v1/sandboxes/{id}/snapshots (glac sandboxes snapshots create web --name before-upgrade) 在沙箱继续运行的同时,保存它在某一时刻的内存、进程和磁盘。快照有一个 name(replace 会从当前用着这个名称的快照那里拿走名称),还可以有 expires_at。
| 调用 | 作用 |
|---|---|
POST /v1/sandboxes 带上 snapshot |
一个新沙箱,从创建快照的那一刻继续运行,进程仍在运行 (glac sandboxes create --snapshot before-upgrade)。 |
POST /v1/sandboxes/{id}/restore |
原地回到某个快照:id、名称和链接都不变。沙箱回退之前的状态会保存为另一个快照,在响应中给出名称,所以回退可以撤销 (glac sandboxes restore web before-upgrade)。 |
GET /v1/snapshots, GET, DELETE /v1/snapshots/{id} |
项目的快照;查看一个;删除一个。从它创建的沙箱继续运行。 |
PATCH /v1/snapshots/{id} {name?, expires_at?} |
换一个名称(null:不要名称),或换一个自行删除的时间(null:永不删除):glac sandboxes snapshots rename before-upgrade old-state。 |
快照创建后会被复制到所在区域的对象存储中。replicated 说明何时复制完成:从那时起,区域中的任何机器都能从它创建沙箱。在此之前,只有创建它的那台机器可以,需要其他机器的调用会被拒绝(409 snapshot_not_replicated,并说明复制进行到哪里)。
沙箱以读写方式持有的云盘会以版本的形式包含在它的快照中,不复制任何数据。从这个快照创建的沙箱会在相同路径上得到每个云盘的一个分叉,内容是云盘当时的内容;云盘本身仍属于第一个沙箱。参见沙箱的快照与它的云盘。
snap = sbx.snapshot(name="before-upgrade")
sbx.run("rm -rf /srv/*") # something that goes wrong
sbx.restore(snap) # as it was before
other = glac.sandboxes.create(snapshot=snap) # another sandbox from the same moment分叉
POST /v1/sandboxes/{id}/fork 带上 count(1 到 64),创建这么多个副本,每个都是一台独立的机器,都带着原沙箱的内存、进程和磁盘从这一刻继续运行。要么全部创建,要么一个都不创建。分叉会唤醒被复制的沙箱。
glac sandboxes fork web --count 3 # prints three idscopies = sbx.fork(3)
print([c.run("python3 -c 'import random; print(random.random())'").stdout for c in copies])
for c in copies:
c.delete()分叉计入创建的沙箱数(每分钟,以及项目每小时)和运行中的沙箱数:参见限制。
模板
模板是一个启动过一次并被保存下来的镜像:包括它的内存、设备和磁盘。沙箱都是它的副本,所以模板启动的程序在每个沙箱中都已经在运行,程序用的内存在沙箱改动之前都是共享的。每个镜像针对每种规格、每种启动命令和就绪检查,以及启动命令的每种环境,各有一个模板。模板会自动为你创建,不收费。
费用
快照按它自己的字节计费(它自己的内存页、设备状态和磁盘层,不包括它与模板共享的部分),按 GB·月计,每 GB·月 $0.02,保留多久就计多久。免费版 15 GB 的存储额度和付费版的 20 GB·月 都包括快照,与休眠沙箱和云盘共用。参见价格与套餐。