This page describes how to schedule backups for Cassandra in Cloud Storage.
In this method, backups are stored in the specified Cloud Storage bucket.
To schedule Cassandra backups, perform the following steps:
Run the following create-service-account
command to create a Google Cloud service account (SA) with the standard
roles/storage.objectAdmin role.
This SA role allows you to write backup data
to Cloud Storage. Execute the following command in the
hybrid-base-directory/hybrid-files directory:
This command creates a single service account named
apigee-non-prod for use in non-production environments and
places the downloaded key file in the ./service-accounts
directory.
For more information about Google Cloud service accounts, see
Creating
and managing service accounts.
The create-service-account command saves a JSON file containing the
service account private key. The file is saved in the same directory
where the command executes. You will need the path to this file
in the following steps.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-29 UTC."],[[["\u003cp\u003eThis document explains how to schedule Cassandra backups to Cloud Storage for Apigee hybrid deployments, which will involve creating a service account and Cloud storage bucket.\u003c/p\u003e\n"],["\u003cp\u003eTo enable backups, you must set \u003ccode\u003ebackup:enabled\u003c/code\u003e to \u003ccode\u003etrue\u003c/code\u003e in your \u003ccode\u003eoverrides.yaml\u003c/code\u003e file and define the service account path, Cloud Storage bucket, backup schedule, and cloud provider.\u003c/p\u003e\n"],["\u003cp\u003eYou must create a Google Cloud service account with the \u003ccode\u003eroles/storage.objectAdmin\u003c/code\u003e role to allow writing backup data to Cloud Storage using the \u003ccode\u003ecreate-service-account\u003c/code\u003e command.\u003c/p\u003e\n"],["\u003cp\u003eAfter configuring the backup settings in \u003ccode\u003eoverrides.yaml\u003c/code\u003e, apply the changes to your cluster using the \u003ccode\u003eapigeectl apply --datastore\u003c/code\u003e command.\u003c/p\u003e\n"],["\u003cp\u003eThe specified backup configuration will cause a rolling restart of the Cassandra pods, and the backup schedule should be set to avoid starting shortly after applying the backup configuration to prevent initial backup failure.\u003c/p\u003e\n"]]],[],null,["# Scheduling backups in Cloud Storage\n\n| You are currently viewing version 1.6 of the Apigee hybrid documentation. **This version is end of life.** You should upgrade to a newer version. For more information, see [Supported versions](/apigee/docs/hybrid/supported-platforms#supported-versions).\n\nThis page describes how to schedule backups for Cassandra in Cloud Storage.\nIn this method, backups are stored in the specified Cloud Storage bucket.\n| **Note:** After applying the backup configuration on the existing cluster, the Cassandra pods will restart one after another (rolling restart) from last to first.\n\nTo schedule Cassandra backups, perform the following steps:\n\n1. Run the following `create-service-account` command to create a Google Cloud service account (SA) with the standard [`roles/storage.objectAdmin`](https://cloud.google.com/storage/docs/access-control/iam-roles) role. This SA role allows you to write backup data to Cloud Storage. Execute the following command in the \u003cvar translate=\"no\"\u003ehybrid-base-directory\u003c/var\u003e`/hybrid-files` directory: \n\n ```\n ./tools/create-service-account --env non-prod --dir ./service-accounts\n ```\n This command creates a single service account named `apigee-non-prod` for use in non-production environments and places the downloaded key file in the `./service-accounts` directory. **Note:** If you prefer to create all the individual service accounts for a production environment, use the following command: \n |\n | ```\n | ./tools/create-service-account --env prod --dir ./service-accounts\n | ```\n For more information about Google Cloud service accounts, see [Creating\n and managing service accounts](https://cloud.google.com/iam/docs/creating-managing-service-accounts).\n2. The `create-service-account` command saves a JSON file containing the service account private key. The file is saved in the same directory where the command executes. You will need the path to this file in the following steps.\n3. [Create a Cloud Storage bucket](https://cloud.google.com/storage/docs/creating-buckets). Specify a reasonable data [retention policy](https://cloud.google.com/storage/docs/bucket-lock#retention-policy) for the bucket. Apigee recommends a data retention policy of 15 days.\n4. Open your `overrides.yaml` file.\n5. Add the following `cassandra.backup` properties to enable backup. Do not remove any of the properties that are already configured.\n\n ### Parameters\n\n ```scdoc\n cassandra:\n ...\n\n backup:\n enabled: true\n serviceAccountPath: SA_JSON_FILE_PATH\n dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH\n schedule: BACKUP_SCHEDULE_CODE\n cloudProvider: \"GCP\" # For remote server backup set this to HYBRID (all caps)\n\n ...\n \n ```\n\n ### Example\n\n ```carbon\n ...\n\n cassandra:\n storage:\n type: gcepd\n capacity: 50Gi\n gcepd:\n replicationType: regional-pd\n auth:\n default:\n password: \"abc123\"\n admin:\n password: \"abc234\"\n ddl:\n password: \"abc345\"\n dml:\n password: \"abc456\"\n nodeSelector:\n key: cloud.google.com/gke-nodepool\n value: apigee-data\n backup:\n enabled: true\n serviceAccountPath: \"/Users/myhome/.ssh/my-cassandra-backup-sa.json\"\n dbStorageBucket: \"gs://myname-cassandra-backup\"\n schedule: \"45 23 * * 6\"\n cloudProvider: \"GCP\"\n \n\n\n ... \n ```\nWhere:\n\n6. Apply the configuration changes to the new cluster. For example: \n\n ```\n $APIGEECTL_HOME/apigeectl apply --datastore -f YOUR_OVERRIDES_FILE\n ```\n\n\n Where \u003cvar translate=\"no\"\u003eYOUR_OVERRIDES_FILE\u003c/var\u003e is the path to the overrides file you just edited.\n7. Verify the backup job. For example: \n\n ```\n kubectl get cronjob -n apigee\n ``` \n\n ```component-pascal\n NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE\n apigee-cassandra-backup 33 * * * * False 0 \u003cnone\u003e 94s\n ```"]]