You need to enable JavaScript to run this app.
Cloud Backup and Recovery

Cloud Backup and Recovery

Copy page
Download PDF
ECS instance backup
Create ECS instance recovery task (Go SDK)
Copy page
Download PDF
Create ECS instance recovery task (Go SDK)
This section provides sample code for creating an ECS instance recovery task using the Go SDK.​
Sample code​
You can use the following sample code to restore data from a recovery point to the original ECS instance.​
​
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 // Volume ID​
SnapshotId string // Snapshot ID​
}​
​
// ECS backup task metadata​
type EcsRecoveryPointMeta struct {​
SnapshotList []Snapshot // Snapshot list​
SnapshotGroupId string // Snapshot consistency group​
}​
​
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)​
​
// Get RecoveryPoint details​
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")​
}​
​
// Create a recovery task​
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)​
​
// Wait for the recovery task to complete​
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)​
}​
}​
​
​
Last updated: 2026.09.10 16:27:13