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 an ECS backup plan (Go SDK)
Copy page
Download PDF
Create an ECS backup plan (Go SDK)
This article presents sample code for creating an ECS backup plan using the Go SDK.​
Sample code​
You can use the sample code below to create an ECS backup source, then create a backup task for it. After the backup task completes, delete the recovery point and backup source to release resources.​
​
package main​
​
import (​
"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"​
)​
​
func deleteRecoveryPoint(client *cbr.CBR, recoveryPointId string) {​
deleteRecoveryPointInput := &cbr.DeleteRecoveryPointInput{​
RecoveryPointId: &recoveryPointId,​
}​
_, err := client.DeleteRecoveryPoint(deleteRecoveryPointInput)​
if err != nil {​
panic(err)​
}​
​
// Wait for the backup point deletion to complete​
for {​
describeRecoveryPointInput := &cbr.DescribeRecoveryPointsInput{​
Filters: &cbr.FiltersForDescribeRecoveryPointsInput{​
RecoveryPointId: &recoveryPointId,​
},​
}​
describeRecoveryPointOutput, err := client.DescribeRecoveryPoints(describeRecoveryPointInput)​
if err != nil {​
panic(err)​
}​
if len(describeRecoveryPointOutput.RecoveryPoints) == 0 {​
break​
}​
fmt.Printf("Recovery point status:%s\n", *describeRecoveryPointOutput.RecoveryPoints[0].Status)​
time.Sleep(5 * time.Second)​
}​
​
fmt.Printf("Recovery point deleted, recovery point id:%s", recoveryPointId)​
}​
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 = "cn-beijing"​
ecsInstanceId := "your ecs instance id"​
ecsInstanceName := "your ecs instance name"​
recoveryPointName := "manualbackup_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)​
​
// Create a backup source​
createBackupSourceInput := &cbr.CreateBackupResourceInput{​
InstanceId: volcengine.String(ecsInstanceId),​
InstanceName: volcengine.String(ecsInstanceName),​
ResourceType: volcengine.String("ECS"),​
}​
createBackupResourceOutput, err := client.CreateBackupResource(createBackupSourceInput)​
if err != nil {​
panic(err)​
}​
resourceId := createBackupResourceOutput.ResourceId​
defer func() {​
// Delete the backup source​
deleteBackupResourceInput := &cbr.DeleteBackupResourceInput{​
ResourceId: resourceId,​
}​
_, err := client.DeleteBackupResource(deleteBackupResourceInput)​
if err != nil {​
panic(err)​
}​
fmt.Printf("Backup resource deleted, resource id:%s", *resourceId)​
}()​
​
fmt.Printf("Backup resource created, resource id:%s", *resourceId)​
​
// Manually create a backup task for the backup source​
createBackupJobInput := &cbr.CreateBackupJobInput{​
ResourceId: resourceId,​
RecoveryPointName: volcengine.String(recoveryPointName),​
BackupType: volcengine.String("FULL"),​
RetentionDay: volcengine.Int32(1),​
Metadata: volcengine.String("{\"AutoBackupAllAttachedVolumes\":true}"), // Back up all volumes on the ECS instance​
}​
createBackupJobOutput, err := client.CreateBackupJob(createBackupJobInput)​
if err != nil {​
panic(err)​
}​
​
recoveryPointId := createBackupJobOutput.RecoveryPointId​
​
defer func() {​
// Delete backup task (recovery point)​
deleteRecoveryPoint(client, *recoveryPointId)​
}()​
​
// Polling to check the status of backup tasks (recovery points), with the total loop time not exceeding 10 minutes​
for i := 0; i < 120; i++ {​
describeBackupJobInput := &cbr.DescribeRecoveryPointsInput{​
Filters: &cbr.FiltersForDescribeRecoveryPointsInput{​
RecoveryPointId: recoveryPointId,​
},​
}​
describeBackupJobOutput, err := client.DescribeRecoveryPoints(describeBackupJobInput)​
if err != nil {​
panic(err)​
}​
if *describeBackupJobOutput.RecoveryPoints[0].Status == "AVAILABLE" {​
break​
}​
fmt.Printf("Recovery point status:%s\n", *describeBackupJobOutput.RecoveryPoints[0].Status)​
time.Sleep(5 * time.Second)​
}​
​
fmt.Printf("Backup completed, recovery point id:%s", *recoveryPointId)​
}​
​
​
Last updated: 2026.09.10 16:27:13