跳转到主要内容
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
Snapshot 有三种作用域:按应用、按数据库和账户级。

Snapshot 结构体

列表方法返回 []squarecloud.Snapshot
字段类型说明
NamestringSnapshot 对象名称
Sizeint大小(字节)
Modifiedstring最后修改日期
Keystring用于构建下载 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 速率限制错误不同。