diff --git a/tutorials/snapshot-instances-jobs/index.mdx b/tutorials/snapshot-instances-jobs/index.mdx
index 66cb93a38b..d87a940891 100644
--- a/tutorials/snapshot-instances-jobs/index.mdx
+++ b/tutorials/snapshot-instances-jobs/index.mdx
@@ -1,11 +1,11 @@
---
meta:
- title: Create snapshots of an Instance with Serverless Jobs
- description: This step-by-step tutorial will help you automate the creation of snapshots of your Instance using Serverless Jobs
+ title: Create snapshots of an Instance with Serverless Jobs and the Scaleway CLI
+ description: This step-by-step tutorial will help you automate the creation of snapshots of your Instance using Serverless Jobs and the Scaleway CLI
content:
- h1: Create snapshots of an Instance with Serverless Jobs
- paragraph: This step-by-step tutorial will help you automate the creation of snapshots of your Instance using Serverless Jobs
-tags: serverless jobs instance snapshot backup image disk storage
+ h1: Create snapshots of an Instance with Serverless Jobs and the Scaleway CLI
+ paragraph: This step-by-step tutorial will help you automate the creation of snapshots of your Instance using Serverless Jobs and the Scaleway CLI
+tags: serverless jobs instance snapshot backup image disk storage cli
categories:
- instances
- jobs
@@ -13,222 +13,62 @@ dates:
validation: 2025-12-03
posted: 2024-06-19
---
-
[Scaleway Serverless Jobs](/serverless-jobs/quickstart/) allows you to create and automate recurring tasks. This tutorial will guide you through the process of creating snapshots of a [Scaleway Instance](/instances/quickstart/) on a recurring schedule using a Serverless Job.
-Serverless Jobs are perfectly adapted for these autonomous tasks, as we do not need autoscaling or exposure via a web server. Refer to the [differences between jobs, containers and functions](/serverless-jobs/reference-content/difference-jobs-functions-containers/) for more information.
+Serverless Jobs are perfectly adapted for these autonomous tasks, as we do not need autoscaling or exposure via a web server. Refer to the [documentation on differences between jobs, containers, and functions](/serverless-jobs/reference-content/difference-jobs-functions-containers/) for more information.
-- A Scaleway account logged into the [console](https://console.scaleway.com)
-- [Owner](/iam/concepts/#owner) status or [IAM permissions](/iam/concepts/#permission) allowing you to perform actions in the intended Organization
-- Created a [Container Registry namespace](/container-registry/how-to/create-namespace/).
-- Created an [Instance](/instances/how-to/create-an-instance/)
-- Installed and started the [Docker daemon](https://docs.docker.com/engine/install/) to build the image.
-
-## Creating the snapshot generator files
-
-
-You can also download the work files by cloning our [Scaleway Serverless examples repository](https://github.com/scaleway/serverless-examples/tree/main/jobs/instances-snapshot).
-
-
-1. Create a file named `main.go`, and add the code below to it:
-
- ```go
- package main
-
- import (
- "fmt"
- "os"
- "time"
-
- "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
- "github.com/scaleway/scaleway-sdk-go/scw"
- )
-
- const (
- envOrgID = "SCW_DEFAULT_ORGANIZATION_ID"
- envAccessKey = "SCW_ACCESS_KEY"
- envSecretKey = "SCW_SECRET_KEY"
- envInstanceID = "INSTANCE_ID"
- envInstanceZone = "INSTANCE_ZONE"
- )
-
- func main() {
- fmt.Println("creating snapshot of instance...")
-
- // Create a Scaleway client with credentials from environment variables.
- client, err := scw.NewClient(
- // Get your organization ID at https://console.scaleway.com/organization/settings
- scw.WithDefaultOrganizationID(os.Getenv(envOrgID)),
-
- // Get your credentials at https://console.scaleway.com/iam/api-keys
- scw.WithAuth(os.Getenv(envAccessKey), os.Getenv(envSecretKey)),
-
- // Get more about our availability
- // zones at https://www.scaleway.com/en/docs/account/reference-content/products-availability/
- scw.WithDefaultRegion(scw.RegionFrPar),
- )
- if err != nil {
- panic(err)
- }
-
- // Create SDK objects for Scaleway Instance product
- instanceAPI := instance.NewAPI(client)
-
- if err := createSnapshots(instanceAPI); err != nil {
- panic(err)
- }
- }
-
- func createSnapshots(instanceAPI *instance.API) error {
- gotInstance, err := instanceAPI.GetServer(&instance.GetServerRequest{
- ServerID: os.Getenv("INSTANCE_ID"),
- Zone: scw.Zone(os.Getenv("INSTANCE_ZONE")),
- })
- if err != nil {
- 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)),
- })
- if err != nil {
- return fmt.Errorf("error while creating snapshot %w", err)
- }
-
- fmt.Println("created snapshot ", snapshotResp.Snapshot.ID)
- }
-
- return nil
- }
-
- func init() {
- mandatoryVariables := [...]string{envOrgID, envAccessKey, envSecretKey, envInstanceID, envInstanceZone}
-
- for idx := range mandatoryVariables {
- if os.Getenv(mandatoryVariables[idx]) == "" {
- panic("missing environment variable " + mandatoryVariables[idx])
- }
- }
- }
-
- ```
-
-2. Create a file called `go.mod`, and add the code below to it:
-
- ```go
- module github.com/scaleway/serverless-examples/jobs/instances-snapshot
-
- go 1.23
+- A Scaleway account logged into the [console](https://console.scaleway.com).
+- [Owner](/iam/concepts/#owner) status or [IAM permissions](/iam/concepts/#permission) allowing you to perform actions in the intended Organization.
+- Created an [Instance](/instances/how-to/create-an-instance/).
- require github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30
-
- require gopkg.in/yaml.v2 v2.4.0 // indirect
- ```
-
-3. Run the following command to download the required dependencies:
-
- ```go
- go get
- ```
-
-## Building and pushing the image to Container Registry
-
-Serverless Jobs rely on containers to run in the cloud and therefore require a [container image](/serverless-jobs/concepts/#container-image) hosted in the cloud using [Scaleway Container Registry](/container-registry/).
-
-1. Create a `Dockerfile`, and add the following code to it:
-
- ```dockerfile
- # Using apline/golang image
- FROM golang:1.23-alpine
-
- # Set destination for COPY
- WORKDIR /app
-
- # Copy required files
- COPY go.mod ./
- COPY go.sum ./
- COPY *.go ./
-
- # Build the executable
- RUN go build -o /jobs-snapshot
-
- # Run the executable
- CMD [ "/jobs-snapshot" ]
- ```
-
-2. Run the following command in a terminal to connect to your Container Registry namespace. Do not forget to edit the command with your namespace name.
-
- ```shell
- docker login rg.fr-par.scw.cloud/your-namespace-name -u nologin --password-stdin <<< "$SCW_SECRET_KEY"
- ```
-
-3. Run the following command to build the container image locally:
-
- ```sh
- docker build -t rg.fr-par.scw.cloud/your-namespace-name/jobs-snapshot:v1 .
-
- ## TIP: for Apple Silicon or other ARM processors, please use the following command as Serverless Jobs supports amd64 architecture
- # docker build --platform linux/amd64 -t rg.fr-par.scw.cloud/jobs-snapshot/jobs-snapshot:v1 .
- ```
-
-4. Run the following command to push the container image to the registry:
-
- ```sh
- docker push rg.fr-par.scw.cloud/your-namespace-name/jobs-snapshot:v1
- ```
-
-Your image and its tag now appear in the [Container Registry in the Scaleway console](https://console.scaleway.com/registry/namespaces).
-
-## Creating the Job Definition
+## Creating the job definition
1. In the [Scaleway console](https://console.scaleway.com), click **Jobs** in the **Serverless** section of the side menu. The jobs page displays.
2. Click **Create job**. The job creation wizard displays.
-3. Select the **Scaleway** Container Registry, then select your Container Registry namespace from the drop-down list, and the container image and tag.
+3. For **Container Image**, select **External**, and in **Image URL**, set: `scaleway/cli:latest`.
4. Enter a name or use the automatically generated one.
5. Select the region in which your job will be created.
-6. Keep the default **resources** values, as this job requires little compute capabilities.
+6. Keep the default **resources** values, as this job requires little compute capability.
-7. Set the **cron schedule** to `0 2 * * *` and select the relevant time zone to run the job every day at 2:00 a.m. Refer to the [cron schedules documentation](/serverless-jobs/reference-content/cron-schedules/) for more information.
+7. Set **cron schedule** to `0 2 * * *` and select the relevant time zone to run the job every day at 2:00 a.m. Refer to the [cron schedules documentation](/serverless-jobs/reference-content/cron-schedules/) for more information.
8. Define the following environment variables:
- - `INSTANCE_ID`: the ID of the Instance you want to snapshot
- - `INSTANCE_ZONE`: the [Availabilitiy Zone](/instances/concepts/#availability-zone) of your Instance (e.g. `fr-par-2`)
- - `SCW_ACCESS_KEY`: your API access key
- - `SCW_SECRET_KEY`: your API secret key
- - `SCW_DEFAULT_ORGANIZATION_ID`: your Organization ID
+ - `SCW_ACCESS_KEY`: your API access key.
+ - `SCW_SECRET_KEY`: your API secret key.
+ - `SCW_DEFAULT_PROJECT_ID`: your Project ID.
+ - `SCW_DEFAULT_ORGANIZATION_ID`: your Organization ID.
+ - `SCW_DEFAULT_REGION`: concerned region.
+
+
+ We recommend using Secret Manager to store the `SCW_ACCESS_KEY` and `SCW_SECRET_KEY`.
+
+
+For more details about variables used by `cli`, refer to the [CLI config documentation](https://github.com/scaleway/scaleway-cli/blob/master/docs/commands/config.md).
+
+9. In the **Execution** tab, define the desired command: `/scw block snapshot create volume-id=11111111-1111-1111-1111-111111111111` (replace the ID with your desired volume ID).
-9. Click **Create job**.
+10. Click **Create job**.
## Running the job
-From the **Overview** tab of the Serverless job you just created, click, **Actions**, then select **Run job** from the contextual menu.
+From the **Overview** tab of the Serverless job you just created, click **Actions**, then select **Run job** from the contextual menu.
The execution appears in the **Job runs** section. You can access the logs of your job by clicking next to the job run ID, and selecting **See on Cockpit**.
## Possible improvements
This tutorial is a lightweight example of how to create recurring snapshots of an Instance. You can go further by:
-- Using it to manage all your Instances snapshots
-- Create backups of your storage disks
-- Set up an alerting system in case of unexpected behavior
+- Using it to manage all your Instances' snapshots
+- Creating backups of your storage disks
+- Setting up an alerting system in case of unexpected behavior
+- Explore [scaleway/serverless-examples repository](https://github.com/scaleway/serverless-examples) for advanced automation examples
## Additional resources