En este instructivo, se muestra cómo programar copias de seguridad para instancias de Filestore con Cloud Scheduler y funciones de Cloud Run.
Objetivos
- Crea una cuenta de servicio de cliente para Cloud Scheduler que tenga las credenciales necesarias para invocar una función de Cloud Run.
- Crea una cuenta de servicio de cliente para las funciones de Cloud Run que tenga las credenciales para llamar al extremo de Filestore.
- Crea una función de Cloud Run Functions que cree una copia de seguridad de una instancia de Filestore.
- Crear una función de Cloud Run Functions que borre una copia de seguridad de una instancia de Filestore
- Crea un trabajo de Cloud Scheduler que ejecute cualquiera de las funciones en intervalos regulares.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Artifact Registry API
- Cloud Build API
- Filestore API
- Cloud Functions API
- Cloud Logging API
- Pub/Sub API
- Cloud Run Admin API
- Cloud Scheduler API
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Si no tienes una instancia de Filestore en tu proyecto, primero debes crear una.
Crea cuentas de servicio de cliente para las funciones de Cloud Scheduler y Cloud Run
Si aún no lo hiciste, en la consola de Google Cloud, haz clic en Activar Cloud Shell.
Crea una cuenta de servicio de cliente que Cloud Scheduler ejecute para invocar una función de Cloud Run. Para este ejemplo, usa el comando
iam service-accounts create
para asignar el nombreschedulerunner
a la cuenta y establecer el nombre visible como “Cuenta de servicio para copias de seguridad del controlador de servicios financieros”:gcloud iam service-accounts create schedulerunner \ --display-name="Service Account for FS Backups-Scheduler"
Crea una cuenta de servicio de cliente que Cloud Run ejecute para llamar al extremo de Filestore. Para este ejemplo, asignaremos un nombre a la cuenta
backupagent
y estableceremos el nombre comercial como “Cuenta de servicio para FS Backups-GCF”:gcloud iam service-accounts create backupagent \ --display-name="Service Account for FS Backups-GCF"
Para verificar si la cuenta de servicio se creó, ejecuta el comando
iam service-accounts list
:gcloud iam service-accounts list
El comando muestra algo como lo siguiente:
NAME EMAIL DISABLED Service Account for FS Backups-GCF backupagent@$PROJECT_ID.iam.gserviceaccount.com False Service Account for FS Backups-Scheduler schedulerunner@$PROJECT_ID.iam.gserviceaccount.com False
Configura variables de entorno
Configura las siguientes variables de entorno en tu entorno local:
ID del proyecto y proyecto de Google Cloud:
export PROJECT_ID=`gcloud config get-value core/project` export PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format="value(projectNumber)"`
El agente de servicio de Cloud Scheduler y las cuentas de servicio de cliente para las funciones de Cloud Scheduler y Cloud Run:
export SCHEDULER_SA=service-$PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com export SCHEDULER_CLIENT_SA=schedulerunner@$PROJECT_ID.iam.gserviceaccount.com export GCF_CLIENT_SA=backupagent@$PROJECT_ID.iam.gserviceaccount.com
Tu instancia de Filestore:
export SOURCE_INSTANCE_LOCATION=fs-location export SOURCE_INSTANCE_NAME=instance-id export SHARE_NAME=file-share-name
Reemplaza lo siguiente:
- fs-location por la zona o región en la que se encuentra la instancia de Filestore de origen
- instance-id por el ID de la instancia de la instancia de Filestore de origen.
- file-share-name por el nombre que especificas para el recurso compartido de archivos NFS que se entrega desde la instancia.
Configura las variables de entorno para la copia de seguridad de Filestore:
export BACKUP_REGION=backup-region
Reemplaza backup-region por la región en la que deseas almacenar la copia de seguridad.
Crea una función que cree una copia de seguridad
En la consola de Google Cloud, ve a la página de funciones de Cloud Run.
Haz clic en Crear función y configúrala como se muestra a continuación:
- Conceptos básicos:
- Entorno: En este ejemplo, selecciona
2nd gen
, que es la opción predeterminada. - Nombre de la función: Para este ejemplo, se llama a la función
fsbackup
. - Región: En este ejemplo, selecciona
us-central1
.
- Entorno: En este ejemplo, selecciona
- Activador:
- Tipo de activador: Selecciona
HTTPS
en el menú. - Autenticación: Elige
Require authentication
.
- Tipo de activador: Selecciona
- Configuración del entorno de ejecución, la compilación, las conexiones y la seguridad:
- Entorno de ejecución > Cuenta de servicio del entorno de ejecución > Cuenta de servicio: Selecciona
Service Account for FS Backups-GCF
(backupagent@$PROJECT_ID.iam.gserviceaccount.com
) en el menú. - Conexiones > Configuración de entrada: Selecciona
Allow all traffic
.
- Entorno de ejecución > Cuenta de servicio del entorno de ejecución > Cuenta de servicio: Selecciona
- Conceptos básicos:
Haz clic en Siguiente y continúa con la configuración de la siguiente manera:
- Entorno de ejecución: Selecciona
Python 3.8
o una versión posterior compatible por completo con las funciones de Cloud Run en el menú. - Código fuente:
Inline editor
. - Punto de entrada: Ingresa
create_backup
. Agrega las siguientes dependencias a tu archivo
requirements.txt
:google-auth==2.29.0 requests==2.31.0
Según tu caso de uso, es posible que debas especificar otras dependencias junto con sus números de versión correspondientes. Para obtener más información, consulta Paquetes preinstalados.
Copia la siguiente muestra de código de Python en el archivo
main.py
con el editor intercalado:Crear una copia de seguridad
- Esta muestra de código crea una copia de seguridad llamada
mybackup-
anexada a la hora de creación.
PROJECT_ID = 'project-id' SOURCE_INSTANCE_LOCATION = 'fs-location' SOURCE_INSTANCE_NAME = 'instance-id' SOURCE_FILE_SHARE_NAME = 'file-share-name' BACKUP_REGION = 'backup-region' import google.auth import google.auth.transport.requests from google.auth.transport.requests import AuthorizedSession import time import requests import json credentials, project = google.auth.default() request = google.auth.transport.requests.Request() credentials.refresh(request) authed_session = AuthorizedSession(credentials) def get_backup_id(): return "mybackup-" + time.strftime("%Y%m%d-%H%M%S") def create_backup(request): trigger_run_url = "https://file.googleapis.com/v1/projects/{}/locations/{}/backups?backupId={}".format(PROJECT_ID, BACKUP_REGION, get_backup_id()) headers = { 'Content-Type': 'application/json' } post_data = { "description": "my new backup", "source_instance": "projects/{}/locations/{}/instances/{}".format(PROJECT_ID, SOURCE_INSTANCE_LOCATION, SOURCE_INSTANCE_NAME), "source_file_share": "{}".format(SOURCE_FILE_SHARE_NAME) } print("Making a request to " + trigger_run_url) r = authed_session.post(url=trigger_run_url, headers=headers, data=json.dumps(post_data)) data = r.json() print(data) if r.status_code == requests.codes.ok: print(str(r.status_code) + ": The backup is uploading in the background.") else: raise RuntimeError(data['error']) return "Backup creation has begun!"
Reemplaza lo siguiente:
- project-id por el ID del proyecto de Google Cloud de la instancia de Filestore de origen
- fs-location por la zona o región de la instancia de Filestore de origen
- instance-id por el nombre de la instancia de Filestore de origen
- file-share-name por el nombre del recurso compartido de archivos
- backup-region por la región para almacenar la copia de seguridad
Haz clic en Probar función.
Se abrirá una nueva sesión de pestaña en Cloud Shell. En él, se muestra el siguiente mensaje si se realiza correctamente:
Function is ready to test.
Haz clic en Implementar y espera a que finalice la implementación.
Regresa a la pestaña anterior de Cloud Shell.
Borrar una copia de seguridad
En esta muestra de código, se borran las copias de seguridad que son más antiguas que un período predefinido.
Solo puedes borrar una copia de seguridad por instancia de origen a la vez. Para obtener más información, consulta Copias de seguridad.
Configura esta función de la misma manera que la función que usaste para crear una copia de seguridad, con las siguientes modificaciones:
- Nombre de la función:
deletefsbackup
. - Punto de entrada:
delete_backup
.
PROJECT_ID = 'project-id' BACKUP_REGION = 'region' BACKUP_RETENTION_TIME_HRS = hours import google.auth import google.auth.transport.requests from google.auth.transport.requests import AuthorizedSession import time import requests import json credentials, project = google.auth.default() request = google.auth.transport.requests.Request() credentials.refresh(request) authed_session = AuthorizedSession(credentials) retention_seconds = BACKUP_RETENTION_TIME_HRS * 60 * 60 def delete_backup(request): now = time.time() backup_list = [] trigger_run_url = "https://file.googleapis.com/v1/projects/{}/locations/{}/backups".format(PROJECT_ID, BACKUP_REGION) r = authed_session.get(trigger_run_url) data = r.json() if not data: print("No backups to delete.") return "No backups to delete." else: backup_list.extend(data['backups']) while "nextPageToken" in data.keys(): nextPageToken = data['nextPageToken'] trigger_run_url_next = "https://file.googleapis.com/v1/projects/{}/locations/{}/backups?pageToken={}".format(PROJECT_ID, BACKUP_REGION, nextPageToken) r = authed_session.get(trigger_run_url_next) data = r.json() backup_list.extend(data['backups']) for i in backup_list: backup_time = i['createTime'] backup_time = backup_time[:-4] backup_time = float(time.mktime(time.strptime(backup_time, "%Y-%m-%dT%H:%M:%S.%f"))) i['backup_timestamp'] = backup_time sorted_backup_list = sorted(backup_list, key=lambda d: d['backup_timestamp']) oldest_backup = sorted_backup_list[0] if now - oldest_backup['backup_timestamp'] > retention_seconds: print(oldest_backup['name'] + " is older than the indicated retention time.") r = authed_session.delete("https://file.googleapis.com/v1/{}".format(oldest_backup['name'])) data = r.json() print(data) if r.status_code == requests.codes.ok: print(str(r.status_code) + ": Deleting " + oldest_backup['name'] + " in the background.") else: raise RuntimeError(data['error']) return "Backup deletion has begun!" return "All backups are within the indicated retention period."
Reemplaza lo siguiente:
- project-id por el ID del proyecto de Google Cloud de la copia de seguridad
- region por la región en la que reside la copia de seguridad La copia de seguridad, la tarea del programador y la función deben residir en la misma ubicación.
- hours por la cantidad de horas que se retendrán las copias de seguridad Por ejemplo, si deseas conservar las copias de seguridad durante 10 días, ingresa
240
.
- Esta muestra de código crea una copia de seguridad llamada
- Entorno de ejecución: Selecciona
Asigna funciones de IAM a las cuentas de servicio de cliente
Agrega el agente de servicio de Cloud Scheduler a la política de IAM de la cuenta de servicio de cliente de Cloud Scheduler con el rol de
roles/cloudscheduler.serviceAgent
. Esto permite que el agente de servicio use la identidad de la cuenta de servicio del cliente para invocar la función que crea una copia de seguridad. Ejecuta el comandoiam service-accounts add-iam-policy-binding
:gcloud iam service-accounts add-iam-policy-binding $SCHEDULER_CLIENT_SA \ --member=serviceAccount:$SCHEDULER_SA \ --role=roles/cloudscheduler.serviceAgent
Otorga a la cuenta de servicio del cliente de las funciones de Cloud Run el rol
roles/file.editor
para que pueda realizar llamadas al extremo de Filestore. Ejecuta el comandoprojects add-iam-policy-binding
:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$GCF_CLIENT_SA \ --role=roles/file.editor
Otorga a la cuenta de servicio del cliente de Cloud Scheduler el rol de
roles/cloudfunctions.invoker
para la función que deseas usar. Ejecuta el siguiente comandofunctions add-iam-policy-binding
:Crear una copia de seguridad
gcloud functions add-iam-policy-binding fsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/cloudfunctions.invoker
Aparece un mensaje que indica que se debe otorgar el rol
roles/run.invoker
en el servicio subyacente de Cloud Run y que puedes ejecutar el comandogcloud functions add-invoker-policy-binding
para aplicarlo. Cuando se te solicite una respuesta, ingresaY
.Ahora, solo la cuenta de servicio del cliente de Cloud Scheduler puede invocar
fsbackup
.Borrar una copia de seguridad
gcloud functions add-iam-policy-binding deletefsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/cloudfunctions.invoker
Aparece un mensaje que indica que se debe otorgar el rol
roles/run.invoker
en el servicio subyacente de Cloud Run y que puedes ejecutar el comandogcloud functions add-invoker-policy-binding
para aplicarlo. Cuando se te solicite una respuesta, ingresaY
.Ahora, solo la cuenta de servicio del cliente de Cloud Scheduler puede invocar
deletefsbackup
.
Crea un trabajo de Cloud Scheduler que active la función en un programa específico
Crear una copia de seguridad
En nuestro ejemplo de este instructivo, si quieres programar una copia de seguridad todos los días de la semana a las 10 p.m., usarías el comando
scheduler jobs create http
:gcloud scheduler jobs create http fsbackupschedule \ --schedule "0 22 * * 1-5" \ --http-method=GET \ --uri=https://us-central1-$PROJECT_ID.cloudfunctions.net/fsbackup \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --oidc-token-audience=https://us-central1-$PROJECT_ID.cloudfunctions.net/fsbackup
La marca
--schedule
es la ubicación en la que especificas la frecuencia en la que se ejecuta el trabajo con el formato unix-cron. Para obtener más información, consulta Configura programas de trabajos cron.Puedes crear un máximo de seis copias de seguridad por instancia por hora.
Inicia el trabajo de Cloud Scheduler que creaste en el paso anterior. En nuestro ejemplo, usa el comando
scheduler jobs runs
para ejecutarlo de inmediato:gcloud scheduler jobs run fsbackupschedule
El trabajo
fsbackupschedule
invoca la funciónfsbackup
de inmediato una vez que ejecutas el comando y, luego, lo invoca cada día de la semana a las 10 p.m. hasta que se detiene el trabajo.Verifica los registros de la función
fsbackup
para ver si se ejecuta de forma correcta y muestra unastatus 200
.Para ver tus registros en la consola de Google Cloud, usa el Explorador de registros:
-
En la consola de Google Cloud, ve a la página Explorador de registros.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.
Los registros más recientes se muestran en el panel Resultados de la consulta.
-
Verifica el estado de tus copias de seguridad existentes con el comando
backups list
:gcloud filestore backups list
El comando muestra algo similar a lo siguiente:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
Borrar una copia de seguridad
En nuestro ejemplo de este instructivo, si quieres programar una operación para borrar una copia de seguridad todos los días de la semana a las 10 p.m., usarías el comando
scheduler jobs create http
:gcloud scheduler jobs create http deletefsbackupschedule \ --schedule "0 22 * * 1-5" \ --http-method=GET \ --uri=https://us-central1-$PROJECT_ID.cloudfunctions.net/deletefsbackup \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --oidc-token-audience=https://us-central1-$PROJECT_ID.cloudfunctions.net/deletefsbackup
La marca
--schedule
es la ubicación en la que especificas la frecuencia en la que se ejecuta el trabajo con el formato unix-cron. Para obtener más información, consulta Configura programas de trabajos cron.Las operaciones de
delete
de copia de seguridad asociadas con la misma instancia de origen deben ocurrir una a la vez. Para obtener más información, consulta Copias de seguridad.Inicia el trabajo de Cloud Scheduler que creaste en el paso anterior. En nuestro ejemplo, usamos el comando
scheduler jobs runs
para ejecutarlo de inmediato:gcloud scheduler jobs run deletefsbackupschedule
El trabajo
deletefsbackupschedule
invoca la funcióndeletefsbackup
de inmediato una vez que ejecutas el comando y, luego, lo invoca cada día de la semana a las 10 p.m. hasta que se detiene el trabajo.Verifica los registros de la función
deletefsbackup
para ver si se ejecuta de forma correcta y muestra unastatus 200
.Para ver tus registros en la consola de Google Cloud, usa el Explorador de registros:
-
En la consola de Google Cloud, ve a la página Explorador de registros.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.
Los registros más recientes se muestran en el panel Resultados de la consulta.
-
Verifica el estado de tus copias de seguridad existentes con el comando
backups list
:gcloud filestore backups list
El comando muestra algo similar a lo siguiente:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
Alertas de cuota baja para copias de seguridad
Si tu implementación de la programación de copias de seguridad implica un riesgo de que se agote la cuota de copias de seguridad, te recomendamos que configures las alertas de cuota de copias de seguridad bajas. De esta manera, se te notificará cuando se agote la cuota de copias de seguridad.
Limpia
Una vez que completes el instructivo, puedes limpiar los recursos que creaste para que dejen de usar la cuota y generar cargos. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
¿Qué sigue?
- Obtén información sobre las instantáneas de Filestore.
- Obtén más información sobre las copias de seguridad de Filestore.
- Obtén más información para programar instantáneas de Filestore Enterprise.