client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()
api := rest.New(client)
snapshot には 3 つのスコープがあります: アプリケーション単位、データベース単位、アカウント全体です。
Snapshot 構造体
一覧取得メソッドは []squarecloud.Snapshot を返します:
| Field | Type | Description |
|---|
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) // 署名付きダウンロード 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 一覧取得には、アクティブな有料プランが必要です。また、各プランには 1 日あたりの snapshot クォータ があります — 使い切ると、作成は DAILY_SNAPSHOTS_LIMIT_REACHED コードで失敗します。これは汎用の KEEP_CALM レートリミットエラーとは別物です。