You need to enable JavaScript to run this app.
文档中心
云备份

云备份

复制全文
下载 pdf
ECS 整机
创建 ECS 整机恢复任务(Go SDK)
复制全文
下载 pdf
创建 ECS 整机恢复任务(Go SDK)
本文介绍通过 Go SDK 创建 ECS 整机恢复任务的示例代码。​
示例代码​
您可以通过以下示例代码,将一个恢复点中数据,恢复到原 ECS 实例中。​
​
package main​
​
import (​
"encoding/json"​
"fmt"​
"os"​
"time"​
​
"github.com/volcengine/volcengine-go-sdk/service/cbr"​
"github.com/volcengine/volcengine-go-sdk/volcengine"​
"github.com/volcengine/volcengine-go-sdk/volcengine/credentials"​
"github.com/volcengine/volcengine-go-sdk/volcengine/session"​
)​
​
type Snapshot struct {​
VolumeId string // 云盘 ID​
SnapshotId string // 快照 ID​
}​
​
// ECS 备份任务元数据​
type EcsRecoveryPointMeta struct {​
SnapshotList []Snapshot // 快照列表​
SnapshotGroupId string // 快照一致性组​
}​
​
type EcsRestoreConfiguration struct {​
SnapshotIdList []string​
SnapshotGroupId string​
AutoStartUpAfterRecovery bool​
RestoreToNewInstance bool​
}​
​
func main() {​
var (​
ak string​
sk string​
region string​
config *volcengine.Config​
sess *session.Session​
client *cbr.CBR​
err error​
)​
ak = os.Getenv("VOLCENGINE_ACCESS_KEY_ID")​
sk = os.Getenv("VOLCENGINE_ACCESS_KEY_SECRET")​
region = "your_region"​
recoveryPointId := "your_recovery_point_id"​
restoreName := "manualrecovery_test"​
​
config = volcengine.NewConfig().​
WithCredentials(credentials.NewStaticCredentials(ak, sk, "")).​
WithRegion(region)​
​
sess, err = session.NewSession(config)​
if err != nil {​
panic(err)​
}​
​
client = cbr.New(sess)​
​
// 获取 RecoveryPoint 详情​
describeRecoveryPointInput := &cbr.DescribeRecoveryPointsInput{​
Filters: &cbr.FiltersForDescribeRecoveryPointsInput{​
RecoveryPointId: volcengine.String(recoveryPointId),​
},​
}​
describeRecoveryPointOutput, err := client.DescribeRecoveryPoints(describeRecoveryPointInput)​
if err != nil {​
panic(err)​
}​
if len(describeRecoveryPointOutput.RecoveryPoints) == 0 {​
panic("recovery point not found")​
}​
recoveryPoint := describeRecoveryPointOutput.RecoveryPoints[0]​
extraMetadata := recoveryPoint.ExtraMetadata​
meta := &EcsRecoveryPointMeta{}​
err = json.Unmarshal([]byte(*extraMetadata), meta)​
if err != nil {​
panic(err)​
}​
if len(meta.SnapshotList) == 0 {​
panic("snapshot not found")​
}​
​
// 创建一个恢复任务​
restoreConfiguration := &EcsRestoreConfiguration{​
SnapshotIdList: []string{},​
SnapshotGroupId: meta.SnapshotGroupId,​
AutoStartUpAfterRecovery: true,​
RestoreToNewInstance: false,​
}​
restoreConfigurationStr, err := json.Marshal(restoreConfiguration)​
if err != nil {​
panic(err)​
}​
createRestoreJobInput := &cbr.CreateRestoreJobInput{​
Name: volcengine.String(restoreName),​
RecoveryPointId: volcengine.String(recoveryPointId),​
ExtraRestoreConfiguration: volcengine.String(string(restoreConfigurationStr)),​
}​
createRestoreJobOutput, err := client.CreateRestoreJob(createRestoreJobInput)​
if err != nil {​
panic(err)​
}​
jobId := *createRestoreJobOutput.JobId​
fmt.Printf("restore job created, job id:%s\n", jobId)​
​
// 等待恢复任务完成​
for {​
describeRestoreJobInput := &cbr.DescribeRestoreJobsInput{​
Filters: &cbr.FiltersForDescribeRestoreJobsInput{​
RestoreJobId: volcengine.String(jobId),​
},​
}​
describeRestoreJobOutput, err := client.DescribeRestoreJobs(describeRestoreJobInput)​
if err != nil {​
panic(err)​
}​
if len(describeRestoreJobOutput.Jobs) == 0 {​
panic("restore job not found")​
}​
job := describeRestoreJobOutput.Jobs[0]​
if *job.Status == cbr.EnumOfStatusForDescribeRestoreJobsOutputCompleted {​
fmt.Println("restore job success")​
break​
}​
if *job.Status == cbr.EnumOfStatusForDescribeRestoreJobsOutputError {​
panic("restore job failed")​
}​
fmt.Printf("restore job status:%s\n", *job.Status)​
time.Sleep(5 * time.Second)​
}​
}​
​
​
最近更新时间:2025.10.31 16:30:56
这个页面对您有帮助吗?
有用
有用
无用
无用