Neste tutorial, mostramos como programar backups para instâncias do Filestore usando o Cloud Scheduler e as funções do Cloud Run.
Objetivos
- Crie uma conta de serviço do cliente para o Cloud Scheduler com as credenciais necessárias para invocar uma função do Cloud Run.
- Crie uma conta de serviço do cliente para funções do Cloud Run com as credenciais para chamar o endpoint do Filestore.
- Crie uma função das funções do Cloud Run que cria um backup de uma instância do Filestore.
- Criar uma função das funções do Cloud Run que exclui um backup de uma instância do Filestore.
- Crie um job do Cloud Scheduler que execute qualquer uma das funções em intervalos regulares.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do 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 gerar uma estimativa de custo baseada na sua projeção de uso, utilize a calculadora de preços.
Antes de começar
- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init - Se você não tem uma instância do Filestore no seu projeto, primeiro é necessário criar uma.
Se ainda não tiver feito isso, no console do Google Cloud , clique em Ativar o Cloud Shell.
Crie uma conta de serviço de cliente em que o Cloud Scheduler seja executado para invocar uma função do Cloud Run functions. Neste exemplo, use o comando
iam service-accounts createpara nomear a contaschedulerunnere definir o nome de exibição como "Conta de serviço para FS Backups-Scheduler":gcloud iam service-accounts create schedulerunner \ --display-name="Service Account for FS Backups-Scheduler"Crie uma conta de serviço de cliente em que as funções do Cloud Run sejam executadas para chamar o endpoint do Filestore. Neste exemplo, chamamos a conta
backupagente definimos o nome de exibição como "Conta de serviço para FS Backups-GCF":gcloud iam service-accounts create backupagent \ --display-name="Service Account for FS Backups-GCF"Verifique se a conta de serviço foi criada executando o comando
iam service-accounts list:gcloud iam service-accounts listO comando retorna algo assim:
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 FalseGoogle Cloud ID do projeto e projeto:
export PROJECT_ID=`gcloud config get-value core/project` export PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format="value(projectNumber)"`O agente de serviço do Cloud Scheduler e as contas de serviço do cliente para o Cloud Scheduler e as funções do 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.comSua instância do Filestore:
export SOURCE_INSTANCE_LOCATION=fs-location export SOURCE_INSTANCE_NAME=instance-id export SHARE_NAME=file-share-nameSubstitua:
- fs-location com a zona ou região em que a instância de origem do Filestore está localizada.
- instance-id é o ID de instância da instância de origem do Filestore.
- file-share-name é o nome que você especifica para o compartilhamento de arquivos NFS que é exibido pela instância.
Configure variáveis de ambiente para o backup do Filestore:
export BACKUP_REGION=backup-regionSubstitua backup-region pelo armazenamento de dados em que você quer armazenar o backup.
No console Google Cloud , acesse a página de funções do Cloud Run.
Clique em Escrever uma função e configure a função da seguinte maneira:
- Configurar:
- Nome do serviço: para este exemplo, nomeamos a função
fsbackup. - Região: neste exemplo, selecione
us-central1. - Ambiente de execução: selecione qualquer ambiente de execução do Python 3 compatível totalmente compatível com as funções do Cloud Run no menu.
- Nome do serviço: para este exemplo, nomeamos a função
- Gatilho:
- Não é necessário definir um gatilho para este exemplo.
- Autenticação: selecione
Require authentication. - Entrada: selecione
All. - Contêineres, volumes, rede, segurança
- Acesse a guia Segurança e selecione
Service Account for FS Backups-GCF(backupagent@$PROJECT_ID.iam.gserviceaccount.com) no menu.
- Acesse a guia Segurança e selecione
- Configurar:
Clique em Criar e continue a configuração da seguinte maneira:
- Ponto de entrada da função: insira
create_backup. Adicione as seguintes dependências ao arquivo
requirements.txt:functions-framework==3.* google-auth==2.29.0 requests==2.31.0Dependendo do caso de uso, talvez seja necessário especificar outras dependências com os números de versão correspondentes. Para mais informações, consulte Pacotes pré-instalados.
Copie o exemplo de código Python a seguir no arquivo
main.pyusando o editor in-line:Criar backup
Esta exemplo de código cria um backup chamado
mybackup-anexado ao horário de criação.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 functions_framework 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") @functions_framework.http 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!"Substitua:
- project-id com o ID do projeto Google Cloud da instância de origem do Filestore.
- fs-location é a zona ou região da instância de origem do Filestore.
- instance-id com o nome da instância de origem do Filestore.
- file-share-name pelo nome do compartilhamento de arquivos.
- backup-region pela região para armazenar o backup.
Clique em Testar.
Uma nova sessão de guia é aberta no Cloud Shell. Nele, a seguinte mensagem será retornada se a operação for bem-sucedida:
Backup creation has begun!Clique em Salvar e reimplantar e aguarde a conclusão da implantação.
Volte para a guia anterior do Cloud Shell.
Excluir um backup
Esta exemplo de código exclui os backups anteriores a um período predefinido.
Só é possível excluir um backup por instância de origem por vez. Para mais informações, consulte Backups.
Configure essa função da mesma forma que a função usada para criar um backup, usando as seguintes modificações:
- Nome da função:
deletefsbackup. - Ponto de entrada:
delete_backup.
PROJECT_ID = 'project-id' BACKUP_REGION = 'region' BACKUP_RETENTION_TIME_HRS = hours import functions_framework 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 @functions_framework.http 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."Substitua:
- project-id com o Google Cloud ID do projeto do backup.
- region pela região em que o backup está armazenado. O backup, o job do agendador e a função precisam estar no mesmo local.
- hours pelo número de horas para manter os backups. Por
exemplo, se você quiser reter backups por 10 dias, digite
240.
- Ponto de entrada da função: insira
Adicione o agente de serviço do Cloud Scheduler à política do IAM da conta de serviço do cliente do Cloud Scheduler com o papel
roles/cloudscheduler.serviceAgent. Isso permite que o agente de serviço use uma identidade temporária da conta de serviço do cliente para invocar a função que cria um backup. Execute o 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.serviceAgentAtribua o papel
roles/file.editorà conta de serviço do cliente das funções do Cloud Run para que ela faça chamadas ao endpoint do Filestore. Execute o comandoprojects add-iam-policy-binding:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$GCF_CLIENT_SA \ --role=roles/file.editorConceda à conta de serviço do cliente do Cloud Scheduler o papel de
roles/run.invokerpara a função que você quer usar. Execute o comandorun services add-iam-policy-binding:Criar backup
gcloud run services add-iam-policy-binding fsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invoker \ --region=us-central1Agora, apenas a conta de serviço do cliente do Cloud Scheduler pode invocar
fsbackup.Excluir um backup
gcloud run services add-iam-policy-binding deletefsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invokerAgora, apenas a conta de serviço do cliente do Cloud Scheduler pode invocar
deletefsbackup.No nosso exemplo para este tutorial, se você quiser programar um backup todos os dias da semana às 22h, use o comando
scheduler jobs create http:gcloud scheduler jobs create http fsbackupschedule \ --schedule "0 22 * * 1-5" \ --http-method=GET \ --uri=https://fsbackup-$PROJECT_NUMBER.us-central1.run.app \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --location=us-central1A flag
--scheduleé onde você especifica a frequência com que o job é executado usando a formatação unix-cron. Para detalhes, consulte Como configurar programações de cron job.É possível criar no máximo seis backups por instância por hora.
Inicie o job do Cloud Scheduler criado na etapa anterior. No nosso exemplo, use o comando
scheduler jobs runspara executar imediatamente:gcloud scheduler jobs run fsbackupscheduleO job
fsbackupscheduleinvoca a funçãofsbackupimediatamente após a execução do comando e, em seguida, invoca-a novamente todos os dias úteis às 22h até que o job seja pausado.Verifique os registros da função
fsbackuppara ver se ela é executada corretamente e retorna umstatus 200.Para ver seus registros no console do Google Cloud , use o Explorador de registros:
-
No console Google Cloud , acesse a página Análise de registros.
Acessar a Análise de registros
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Geração de registros.
Os registros mais recentes são exibidos no painel Resultados da consulta.
-
Verifique o status dos seus backups atuais usando o comando
backups list:gcloud filestore backups listO comando retorna algo semelhante a:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READYNo nosso exemplo para este tutorial, se você quiser programar uma operação para excluir um backup todos os dias da semana às 22h, use o 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/deletefsbackupA flag
--scheduleé onde você especifica a frequência com que o job é executado usando a formatação unix-cron. Para detalhes, consulte Como configurar programações de cron job.As operações de backup
deleteassociadas à mesma instância de origem precisam ocorrer uma de cada vez. Para mais informações, consulte Backups.Inicie o job do Cloud Scheduler criado na etapa anterior. No nosso exemplo, usamos o comando
scheduler jobs runspara executá-lo imediatamente:gcloud scheduler jobs run deletefsbackupscheduleO job
deletefsbackupscheduleinvoca a funçãodeletefsbackupimediatamente após a execução do comando e, em seguida, invoca-a novamente todos os dias da semana às 22h até que o job seja pausado.Verifique os registros da função
deletefsbackuppara ver se ela é executada corretamente e retorna umstatus 200.Para ver seus registros no console do Google Cloud , use o Explorador de registros:
-
No console Google Cloud , acesse a página Análise de registros.
Acessar a Análise de registros
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Geração de registros.
Os registros mais recentes são exibidos no painel Resultados da consulta.
-
Verifique o status dos seus backups atuais usando o comando
backups list:gcloud filestore backups listO comando retorna algo semelhante a:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY- 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.
- Saiba mais sobre os snapshots do Filestore.
- Saiba mais sobre os backups do Filestore.
- Saiba como programar snapshots do Filestore Enterprise.
Criar contas de serviço do cliente para o Cloud Scheduler e as funções do Cloud Run
Configurar variáveis de ambiente
Configure as seguintes variáveis no seu ambiente local:
Criar uma função que cria um backup
Atribuir papéis do IAM às contas de serviço do cliente
Criar um job do Cloud Scheduler que aciona a função em uma programação especificada
Criar backup
Excluir um backup
Alertas de baixa cota para backups
Se a implementação de agendamento de backups corre o risco de ficar sem cota de backups, recomendamos que você configure alertas de cota de backups baixos. Assim, você receberá uma notificação quando a cota de backups estiver baixa.
Limpar
Depois de concluir o tutorial, você pode limpar os recursos que criou para que eles parem de usar a cota e gerar cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto: