Skip to main content
Snapshot 是应用或数据库存储的备份。应用和数据库共享相同的三个方法:
  • client.apps.snapshots:list(app_id)、create(app_id)、restore(app_id, name, version_id)
  • client.databases.snapshots:list(database_id)、create(database_id)、restore(database_id, name, version_id)
每天可以创建多少个 snapshot 取决于你的套餐(参见限制)。 示例使用创建客户端中的 client。app_id 是你的某个应用的 ID:client.account.me() 会列出它们。

列出 snapshot

创建 snapshot

create() 会等待 snapshot 完成(至少 120 秒后才会超时)。较大的 snapshot 可能无法及时完成:此时 API 返回 202,SDK 返回 {'pending': True}。snapshot 会继续生成,并自行出现在 list() 中,通常在 2 分钟以内。否则,它返回 {'pending': False, 'url': ..., 'key': ...}。
切勿通过再次调用 create() 来检查待处理的 snapshot:这会启动一个新的 snapshot,并计入套餐的每日 snapshot 配额。请改为轮询 list()。

恢复 snapshot

restore(id, name, version_id) 接受已列出的 snapshot 的 name 和 version_id。

下载 snapshot

client.download_snapshot(url, dest) 从 snapshot 已签名的 url(来自 list() 或 create())以流的方式将 snapshot 文件写入磁盘,并返回写入的路径。它不会调用 API:API 密钥绝不会被发送到存储主机。内存中不会缓冲任何内容。
  • dest 是一个文件路径,或一个目录(此时保留远程文件名)。以 / 结尾的路径会被创建为目录。
  • 数据会先写入一个 .part 文件,完成后再重命名,因此下载失败绝不会覆盖之前的文件。
  • 整个下载过程没有超时:timeout 限制的是每次读取。
使用 AsyncSquareCloud 时,写法为 await client.download_snapshot(url, dest)。 过期或无效的 URL 会抛出 SquareCloudAPIError,带有存储主机的 HTTP 状态和 UNKNOWN_ERROR。无法写入的目标会抛出 OSError。

账户 snapshot

client.account.snapshots(scope=None) 列出账户的所有 snapshot,也可以只列出 "applications" 或 "databases"(仅限关键字参数)。它需要有效的套餐,并与网络 endpoint 共享速率限制(429 RATE_LIMITED)。

限制

  • create() 限制为每 180 秒调用一次,并受取决于套餐的每日配额限制:超出配额会返回 429 DAILY_SNAPSHOTS_LIMIT_REACHED。
  • 恢复进行期间,删除应用或启动数据库会返回 403 RESTORE_IN_PROGRESS。

后续步骤

数据库

创建和管理数据库。

Snapshot API 参考

这些方法背后的 REST 端点。

用 CLI 管理 snapshot

在终端中完成同样的操作。