Este tutorial mostra como usar o Cloud Scheduler e as funções do Cloud Run para agendar cópias de segurança manuais para uma base de dados do Cloud SQL.
Este tutorial demora aproximadamente 30 minutos a concluir.
Primeiro, configura o ambiente clonando um repositório git que contém bases de dados de teste e armazenando essas bases de dados num contentor do Cloud Storage.
Em seguida, cria uma instância da base de dados do Cloud SQL para PostgreSQL e importa as bases de dados de teste do contentor do Cloud Storage para a instância.
Depois de configurar o ambiente, cria uma tarefa do Cloud Scheduler que publica uma mensagem de acionador de cópia de segurança numa data e hora agendadas num tópico do Pub/Sub. A mensagem contém informações sobre o nome da instância do Cloud SQL e o ID do projeto. A mensagem aciona uma função do Cloud Run. A função usa a API Cloud SQL Admin para iniciar uma cópia de segurança da base de dados no Cloud SQL. O diagrama seguinte ilustra este fluxo de trabalho:
Google Cloud componentes
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
- Cloud Storage: Armazena as bases de dados de teste que importa para o Cloud SQL.
- Instância do Cloud SQL: Contém a base de dados da qual fazer uma cópia de segurança.
- Cloud Scheduler: publica mensagens num tópico do Pub/Sub num horário definido.
- Pub/Sub: Contém mensagens enviadas a partir do Cloud Scheduler.
- Funções do Cloud Run: subscreve o tópico do Pub/Sub e, quando acionado, faz uma chamada API para a instância do Cloud SQL para iniciar a cópia de segurança.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
-
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.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Na Google Cloud consola, aceda à página APIs e ative as seguintes APIs:
- API Cloud SQL Admin
- API Cloud Run functions
- API do Cloud Scheduler
- API Cloud Build
- API App Engine Admin
Ao longo do resto deste tutorial, vai executar todos os comandos a partir do Cloud Shell.
Configure o seu ambiente
Para começar, clone primeiro o repositório que contém os dados de exemplo. Em seguida, configura o seu ambiente e cria funções personalizadas com as autorizações necessárias para este tutorial.
Pode fazer tudo neste tutorial no Cloud Shell.
Clone o repositório que contém os dados de amostra:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst.git
Usa os dados do repositório
training-data-analyst
para criar uma base de dados com alguns registos simulados.Configure as seguintes variáveis de ambiente:
export PROJECT_ID=`gcloud config get-value project` export DEMO="sql-backup-tutorial" export BUCKET_NAME=${USER}-PostgreSQL-$(date +%s) export SQL_INSTANCE="${DEMO}-sql" export GCF_NAME="${DEMO}-gcf" export PUBSUB_TOPIC="${DEMO}-topic" export SCHEDULER_JOB="${DEMO}-job" export SQL_ROLE="sqlBackupCreator" export STORAGE_ROLE="simpleStorageRole" export REGION="us-west2"
Crie duas funções personalizadas que tenham apenas as autorizações necessárias para este tutorial:
gcloud iam roles create ${STORAGE_ROLE} --project ${PROJECT_ID} \ --title "Simple Storage role" \ --description "Grant permissions to view and create objects in Cloud Storage" \ --permissions "storage.objects.create,storage.objects.get"
gcloud iam roles create ${SQL_ROLE} --project ${PROJECT_ID} \ --title "SQL Backup role" \ --description "Grant permissions to backup data from a Cloud SQL instance" \ --permissions "cloudsql.backupRuns.create"
Estas funções reduzem o âmbito de acesso das funções do Cloud Run e das contas de serviço do Cloud SQL, seguindo o princípio do menor privilégio.
Crie uma instância do Cloud SQL
Nesta secção, cria um contentor do Cloud Storage e uma instância do Cloud SQL para PostgreSQL. Em seguida, carrega a base de dados de teste para o contentor do Cloud Storage e importa a base de dados a partir daí para a instância do Cloud SQL.
Crie um contentor do Cloud Storage
Usa a CLI gcloud para criar um contentor do Cloud Storage.
gcloud storage buckets create gs://${BUCKET_NAME} --location=${REGION}
Crie uma instância do Cloud SQL e conceda autorizações à respetiva conta de serviço
Em seguida, crie uma instância do Cloud SQL e conceda à respetiva conta de serviço as autorizações para criar execuções de cópias de segurança.
Crie uma instância do Cloud SQL para PostgreSQL:
gcloud sql instances create ${SQL_INSTANCE} --database-version POSTGRES_13 --region ${REGION}
Esta operação demora alguns minutos a ser concluída.
Verifique se a instância do Cloud SQL está em execução:
gcloud sql instances list --filter name=${SQL_INSTANCE}
O resultado tem um aspeto semelhante ao seguinte:
NAME DATABASE_VERSION LOCATION TIER PRIMARY_ADDRESS PRIVATE_ADDRESS STATUS sql-backup-tutorial POSTGRES_13 us-west2-b db-n1-standard-1 x.x.x.x - RUNNABLE
Conceda à sua conta de serviço do Cloud SQL as autorizações para exportar dados para o Cloud Storage com a função de armazenamento simples:
export SQL_SA=(`gcloud sql instances describe ${SQL_INSTANCE} \ --project ${PROJECT_ID} \ --format "value(serviceAccountEmailAddress)"`) gcloud storage buckets add-iam-policy-binding gs://${BUCKET_NAME} \ --member=serviceAccount:${SQL_SA} \ --role=projects/${PROJECT_ID}/roles/${STORAGE_ROLE}
Preencha a instância do Cloud SQL com dados de amostra
Agora, pode carregar ficheiros para o seu contentor, bem como criar e preencher a base de dados de amostra.
Aceda ao repositório que clonou:
cd training-data-analyst/CPB100/lab3a/cloudsql
Carregue os ficheiros no diretório para o novo contentor:
gcloud storage cp * gs://${BUCKET_NAME}
Crie uma base de dados de exemplo. Na mensagem "Do you want to continue (Y/n)?" (Quer continuar [S/n]?), introduza Y (Sim) para continuar.
gcloud sql import sql ${SQL_INSTANCE} gs://${BUCKET_NAME}/table_creation.sql --project ${PROJECT_ID}
Preencha a base de dados; na mensagem "Do you want to continue (Y/n)?" (Quer continuar [S/n]?), introduza Y (Sim) para continuar.
gcloud sql import csv ${SQL_INSTANCE} gs://${BUCKET_NAME}/accommodation.csv \ --database recommendation_spark \ --table Accommodation
gcloud sql import csv ${SQL_INSTANCE} gs://${BUCKET_NAME}/rating.csv \ --database recommendation_spark \ --table Rating
Crie um tópico, uma função e uma tarefa do programador
Nesta secção, cria uma conta de serviço da IAM personalizada e associa-a à função SQL personalizada que criou em Configure o seu ambiente. Em seguida, cria um tópico do Pub/Sub e uma função do Cloud Run que subscreve o tópico e usa a API Cloud SQL Admin para iniciar uma cópia de segurança. Por último, cria uma tarefa do Cloud Scheduler para publicar uma mensagem no tópico do Pub/Sub periodicamente.
Crie uma conta de serviço para a função do Cloud Run
O primeiro passo é criar uma conta de serviço personalizada e associá-la à função SQL personalizada que criou em Configure o seu ambiente.
Crie uma conta de serviço da IAM para ser usada pela função do Cloud Run:
gcloud iam service-accounts create ${GCF_NAME} \ --display-name "Service Account for GCF and SQL Admin API"
Conceda à conta de serviço da função do Cloud Run acesso à função SQL personalizada:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${GCF_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="projects/${PROJECT_ID}/roles/${SQL_ROLE}"
Crie um tópico do Pub/Sub
O passo seguinte é criar um tópico Pub/Sub que é usado para acionar a função do Cloud Run que interage com a base de dados do Cloud SQL.
gcloud pubsub topics create ${PUBSUB_TOPIC}
Crie uma função do Cloud Run
Em seguida, crie a função do Cloud Run.
Crie um ficheiro
main.py
colando o seguinte no Cloud Shell:cat <<EOF > main.py import base64 import logging import json from datetime import datetime from httplib2 import Http from googleapiclient import discovery from googleapiclient.errors import HttpError from oauth2client.client import GoogleCredentials def main(event, context): pubsub_message = json.loads(base64.b64decode(event['data']).decode('utf-8')) credentials = GoogleCredentials.get_application_default() service = discovery.build('sqladmin', 'v1beta4', http=credentials.authorize(Http()), cache_discovery=False) try: request = service.backupRuns().insert( project=pubsub_message['project'], instance=pubsub_message['instance'] ) response = request.execute() except HttpError as err: logging.error("Could NOT run backup. Reason: {}".format(err)) else: logging.info("Backup task status: {}".format(response)) EOF
Crie um ficheiro
requirements.txt
colando o seguinte no Cloud Shell:cat <<EOF > requirements.txt google-api-python-client Oauth2client EOF
Implemente o código:
gcloud functions deploy ${GCF_NAME} \ --trigger-topic ${PUBSUB_TOPIC} \ --runtime python37 \ --entry-point main \ --service-account ${GCF_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
Crie uma tarefa do Cloud Scheduler
Por último, cria uma tarefa do Cloud Scheduler para acionar periodicamente a função de cópia de segurança de dados de hora a hora. O Cloud Scheduler usa uma instância do App Engine para a implementação.
Crie uma instância do App Engine para a tarefa do Cloud Scheduler:
gcloud app create --region=${REGION}
Crie uma tarefa do Cloud Scheduler:
gcloud scheduler jobs create pubsub ${SCHEDULER_JOB} \ --schedule "0 * * * *" \ --topic ${PUBSUB_TOPIC} \ --message-body '{"instance":'\"${SQL_INSTANCE}\"',"project":'\"${PROJECT_ID}\"'}' \ --time-zone 'America/Los_Angeles'
Teste a sua solução
O passo final é testar a sua solução. Começa por executar a tarefa do Cloud Scheduler.
Execute a tarefa do Cloud Scheduler manualmente para acionar um despejo do PostgreSQL da sua base de dados.
gcloud scheduler jobs run ${SCHEDULER_JOB}
Liste as operações realizadas na instância do PostgreSQL e verifique se existe uma operação do tipo
BACKUP_VOLUME
:gcloud sql operations list --instance ${SQL_INSTANCE} --limit 1
O resultado mostra uma tarefa de cópia de segurança concluída. Por exemplo:
NAME TYPE START END ERROR STATUS 8b031f0b-9d66-47fc-ba21-67dc20193749 BACKUP_VOLUME 2020-02-06T21:55:22.240+00:00 2020-02-06T21:55:32.614+00:00 - DONE
Limpar
Pode evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste tutorial seguindo estes passos. A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
- 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.
Se não quiser eliminar todo o projeto, elimine cada um dos recursos que criou. Para o fazer, aceda às páginas adequadas na Google Cloud consola, selecione o recurso e elimine-o.
O que se segue?
- Saiba como agendar instâncias de computação com o Cloud Scheduler.
- Saiba mais sobre as cópias de segurança do Cloud SQL.
- Explore arquiteturas de referência, diagramas e práticas recomendadas sobre Google Cloud. Consulte o nosso Centro de arquitetura na nuvem.