Skip to main content
Snapshot 是应用或数据库存储的备份。应用和数据库共享相同的三个方法:
  • c.Apps.Snapshots:List(ctx, appID)、Create(ctx, appID)、Restore(ctx, appID, name, versionID)
  • c.Databases.Snapshots:List(ctx, databaseID)、Create(ctx, databaseID)、Restore(ctx, databaseID, name, versionID)
每天可以创建多少个 snapshot 取决于你的套餐(参见限制)。 下面的每个代码片段都可以在这个程序中单独运行:每次将一个片段粘贴到 main 中,然后运行 goimports(参见运行示例)。

列出 snapshot

创建 snapshot

Create 会等待 snapshot 完成(在 ctx 没有截止时间的情况下,至少 2 分钟后才会超时)。较大的 snapshot 可能无法及时完成:此时 API 返回 202,SDK 返回 Pending 为 true 的 SnapshotCreated,错误为 nil。snapshot 会继续生成,并自行出现在 List 中,通常在 2 分钟以内。
切勿通过再次调用 Create 来检查待处理的 snapshot:这会启动一个新的 snapshot,并计入套餐的每日 snapshot 配额。请改为轮询 List。

恢复 snapshot

Restore(ctx, id, name, versionID) 接受已列出的 snapshot 的 Name 和 VersionID。

下载 snapshot

c.DownloadSnapshot(ctx, url, w) 从 snapshot 已签名的 url(来自 List 或 Create)以流的方式将 snapshot 文件写入任意 io.Writer。它不会调用 API:API 密钥绝不会被发送到存储主机,且该 URL 绝不会出现在返回的错误中。它不在内存中缓冲任何内容,也没有默认截止时间(请通过 ctx 限制或取消)。在收到响应之前发生的网络错误会像任何 GET 一样被重试。
过期或无效的 URL 会返回 *APIError,带有存储主机的 HTTP 状态和 UNKNOWN_ERROR。无法解析的 URL 以及你的 io.Writer 返回的错误会作为普通错误返回。

账户 snapshot

c.Account.Snapshots(ctx, scope) 列出账户的所有 snapshot。传入 "" 表示全部,或传入 squarecloud.SnapshotScopeApplications 或 squarecloud.SnapshotScopeDatabases。它需要有效的套餐,并与网络 endpoint 共享速率限制(429 RATE_LIMITED)。

限制

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

后续步骤

数据库

创建和管理数据库。

Snapshot API 参考

这些方法背后的 REST 端点。

用 CLI 管理 snapshot

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