From e24098091eb3b87fae06e016296cc29dc84d13fa Mon Sep 17 00:00:00 2001 From: Thomas Tacquet Date: Thu, 12 Jun 2025 17:07:41 +0200 Subject: [PATCH 1/2] fix(snapshot-instances): use block api --- jobs/instances-snapshot/go.mod | 4 ++-- jobs/instances-snapshot/go.sum | 8 ++++---- jobs/instances-snapshot/main.go | 27 +++++++++++---------------- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/jobs/instances-snapshot/go.mod b/jobs/instances-snapshot/go.mod index abf8d80..a00eab1 100644 --- a/jobs/instances-snapshot/go.mod +++ b/jobs/instances-snapshot/go.mod @@ -2,11 +2,11 @@ module github.com/scaleway/serverless-examples/jobs/instances-snapshot go 1.24 -require github.com/scaleway/scaleway-sdk-go v1.0.0-beta.32 +require github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33 require ( github.com/kr/pretty v0.3.1 // indirect - github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/jobs/instances-snapshot/go.sum b/jobs/instances-snapshot/go.sum index cb7aa1d..43e00dc 100644 --- a/jobs/instances-snapshot/go.sum +++ b/jobs/instances-snapshot/go.sum @@ -10,10 +10,10 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.32 h1:4+LP7qmsLSGbmc66m1s5dKRMBwztRppfxFKlYqYte/c= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.32/go.mod h1:kzh+BSAvpoyHHdHBCDhmSWtBc1NbLMZ2lWHqnBoxFks= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33 h1:KhF0WejiUTDbL5X55nXowP7zNopwpowa6qaMAWyIE+0= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33/go.mod h1:792k1RTU+5JeMXm35/e2Wgp71qPH/DmDoZrRc+EFZDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/jobs/instances-snapshot/main.go b/jobs/instances-snapshot/main.go index 289f76e..e9b4bbb 100644 --- a/jobs/instances-snapshot/main.go +++ b/jobs/instances-snapshot/main.go @@ -3,8 +3,8 @@ package main import ( "fmt" "os" - "time" + "github.com/scaleway/scaleway-sdk-go/api/block/v1" "github.com/scaleway/scaleway-sdk-go/api/instance/v1" "github.com/scaleway/scaleway-sdk-go/scw" ) @@ -13,6 +13,7 @@ const ( envOrgID = "SCW_DEFAULT_ORGANIZATION_ID" envAccessKey = "SCW_ACCESS_KEY" envSecretKey = "SCW_SECRET_KEY" + envProjectID = "SCW_DEFAULT_PROJECT_ID" envInstanceID = "INSTANCE_ID" envInstanceZone = "INSTANCE_ZONE" ) @@ -39,12 +40,14 @@ func main() { // Create SDK objects for Scaleway Instance product instanceAPI := instance.NewAPI(client) - if err := createSnapshots(instanceAPI); err != nil { + blockAPI := block.NewAPI(client) + + if err := createSnapshots(instanceAPI, blockAPI); err != nil { panic(err) } } -func createSnapshots(instanceAPI *instance.API) error { +func createSnapshots(instanceAPI *instance.API, blockAPI *block.API) error { gotInstance, err := instanceAPI.GetServer(&instance.GetServerRequest{ ServerID: os.Getenv("INSTANCE_ID"), Zone: scw.Zone(os.Getenv("INSTANCE_ZONE")), @@ -53,25 +56,17 @@ func createSnapshots(instanceAPI *instance.API) error { return fmt.Errorf("error while getting instance %w", err) } - now := time.Now().Format(time.DateOnly) - for _, volume := range gotInstance.Server.Volumes { - snapshotName := fmt.Sprintf("snap-vol-%s-%s-%s", - volume.VolumeType.String(), - now, - os.Getenv(envInstanceZone)) - - snapshotResp, err := instanceAPI.CreateSnapshot(&instance.CreateSnapshotRequest{ - Name: snapshotName, - VolumeID: &volume.ID, - VolumeType: instance.SnapshotVolumeType(volume.VolumeType), - Zone: scw.Zone(os.Getenv(envInstanceZone)), + snapshotResp, err := blockAPI.CreateSnapshot(&block.CreateSnapshotRequest{ + Zone: scw.Zone(os.Getenv(envInstanceZone)), + VolumeID: volume.ID, + ProjectID: os.Getenv(envProjectID), }) if err != nil { return fmt.Errorf("error while creating snapshot %w", err) } - fmt.Println("created snapshot ", snapshotResp.Snapshot.ID) + fmt.Println("created snapshot ", snapshotResp.ID) } return nil From e21122a285e67be09eee1f4c75e9a3fb01dafb81 Mon Sep 17 00:00:00 2001 From: Thomas Tacquet Date: Thu, 12 Jun 2025 17:09:43 +0200 Subject: [PATCH 2/2] update readme --- jobs/instances-snapshot/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/jobs/instances-snapshot/README.md b/jobs/instances-snapshot/README.md index ab426a9..6f20a25 100644 --- a/jobs/instances-snapshot/README.md +++ b/jobs/instances-snapshot/README.md @@ -55,6 +55,7 @@ On Scaleway Console on the following link you can create a new Job Definition: h - `SCW_ACCESS_KEY`: your access key - `SCW_SECRET_KEY`: your secret key - `SCW_DEFAULT_ORGANIZATION_ID`: your organzation ID +- `SCW_DEFAULT_PROJECT_ID`: your project ID * Then click "create job"