client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()
api := rest.New(client)
Snapshot 有三种作用域:按应用、按数据库和账户级。
Snapshot 结构体
列表方法返回 []squarecloud.Snapshot:
| 字段 | 类型 | 说明 |
|---|
Name | string | Snapshot 对象名称 |
Size | int | 大小(字节) |
Modified | string | 最后修改日期 |
Key | string | 用于构建下载 URL 的签名查询字符串 |
应用 snapshot
snapshots, err := api.GetApplicationSnapshots("abc123def456abc123def456")
if err != nil {
panic(err)
}
for _, snap := range snapshots {
fmt.Println(snap.Name, snap.Size, snap.Modified)
}
api.CreateApplicationSnapshot(appID) 触发一个新的 snapshot,并返回一个带有签名下载 URL 的 squarecloud.SnapshotCreated。
created, err := api.CreateApplicationSnapshot("abc123def456abc123def456")
if err != nil {
panic(err)
}
fmt.Println(created.URL) // signed download URL
fmt.Println(created.Key)
api.RestoreApplicationSnapshot(appID, snapshotID, versionID) 将应用回滚到之前的 snapshot 版本。
err := api.RestoreApplicationSnapshot(
"abc123def456abc123def456",
"00000000-0000-4000-8000-000000000000",
"abc123def4567890",
)
if err != nil {
panic(err)
}
数据库 snapshot
数据库作用域与应用作用域相对应:
snapshots, err := api.GetDatabaseSnapshots("abc123def456abc123def456")
if err != nil {
panic(err)
}
created, err := api.CreateDatabaseSnapshot("abc123def456abc123def456")
if err != nil {
panic(err)
}
fmt.Println(created.URL)
err = api.RestoreDatabaseSnapshot(
"abc123def456abc123def456",
"00000000-0000-4000-8000-000000000000_mongo",
"v1",
)
if err != nil {
panic(err)
}
列出账户级 snapshot
api.UserSnapshots(scope) 返回你在所有应用或数据库中拥有的每一个 snapshot。作用域是 squarecloud.SnapshotScope* 常量之一:
appSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeApplications)
if err != nil {
panic(err)
}
dbSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeDatabases)
if err != nil {
panic(err)
}
账户级 snapshot 列表需要有效的付费套餐。每个套餐还有每日 snapshot 配额 —— 一旦用尽,创建会失败并返回 DAILY_SNAPSHOTS_LIMIT_REACHED 代码,它与通用的 KEEP_CALM 速率限制错误不同。