Tutorial ini menunjukkan cara untuk menggunakan Cloud Scheduler dan Cloud Functions untuk menjadwalkan pencadangan manual Cloud SQL database.
Tutorial ini membutuhkan waktu sekitar 30 menit untuk menyelesaikannya.
Pertama, Anda menyiapkan lingkungan dengan meng-clone repository git yang berisi database pengujian dan menyimpan database tersebut di bucket Cloud Storage.
Kemudian, Anda akan membuat instance database Cloud SQL untuk MySQL dan mengimpor database pengujian dari bucket Cloud Storage ke dalam instance.
Setelah lingkungan disiapkan, buat tugas Cloud Scheduler yang memposting pesan pemicu cadangan pada tanggal dan waktu yang dijadwalkan pada topik Pub/Sub. Pesan ini berisi informasi tentang nama instance Cloud SQL dan ID project. ID. Pesan ini memicu Cloud Function. Fungsi ini menggunakan Cloud SQL Admin API untuk memulai pencadangan database di Cloud SQL. Diagram berikut menggambarkan alur kerja ini
Komponen Google Cloud
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
- Cloud Storage: Menyimpan database pengujian yang diimpor ke Cloud SQL.
- Instance Cloud SQL: Berisi database yang akan dicadangkan.
- Cloud Scheduler: Memposting pesan ke topik Pub/Sub sesuai jadwal yang ditetapkan.
- Pub/Sub: Berisi pesan yang dikirim dari Cloud Scheduler.
- Cloud Functions: Berlangganan topik Pub/Sub dan ketika dipicu, membuat panggilan API ke instance Cloud SQL untuk memulai pencadangan.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
Di konsol Google Cloud, buka halaman APIs dan aktifkan API berikut:
- Cloud SQL Admin API
- Cloud Functions API
- Cloud Scheduler API
- Cloud Build API
- App Engine Admin API
Sepanjang sisa dari tutorial ini, Anda akan menjalankan semua perintah dari Cloud Shell.
Menyiapkan lingkungan Anda
Untuk memulai, pertama-tama Anda akan meng-clone repository yang berisi data sampel. Kemudian, Anda akan mengonfigurasi lingkungan dan membuat peran khusus yang memiliki izin yang diperlukan untuk tutorial ini.
Anda dapat melakukan semua yang ada dalam tutorial ini di Cloud Shell.
Buat clone repositori yang berisi data sampel:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst.git
Anda akan menggunakan data dari repositori
training-data-analyst
untuk membuat database dengan beberapa record tiruan.Konfigurasikan variabel lingkungan berikut:
export PROJECT_ID=`gcloud config get-value project` export DEMO="sql-backup-tutorial" export BUCKET_NAME=${USER}-MySQL-$(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"
Buat dua peran khusus yang hanya memiliki izin yang diperlukan untuk tutorial ini:
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"
Peran ini mengurangi cakupan akses Cloud Functions dan akun layanan Cloud SQL dengan mengikuti prinsip hak istimewa terendah.
Membuat instance Cloud SQL
Di bagian ini, Anda akan membuat bucket Cloud Storage dan instance Cloud SQL untuk MySQL. Kemudian, upload database pengujian ke bucket Cloud Storage dan impor database dari sana ke instance Cloud SQL.
Membuat bucket Cloud Storage
Anda dapat menggunakan gsutil
alat command line untuk membuat bucket Cloud
Storage
```sh
gsutil mb -l ${REGION} gs://${BUCKET_NAME}
```
Membuat instance Cloud SQL dan memberikan izin ke akun layanannya
Selanjutnya, Anda membuat instance Cloud SQL dan memberikan izin kepada akun layanannya untuk membuat proses pencadangan.
Membuat instance Cloud SQL untuk MySQL:
sh gcloud sql instances create ${SQL_INSTANCE} --database-version MYSQL_5_7 --region ${REGION}
Operasi ini membutuhkan waktu beberapa menit hingga selesai.
Pastikan instance Cloud SQL sedang berjalan:
gcloud sql instances list --filter name=${SQL_INSTANCE}
Outputnya terlihat mirip dengan yang berikut ini:
NAME DATABASE_VERSION LOCATION TIER PRIMARY_ADDRESS PRIVATE_ADDRESS STATUS sql-backup-tutorial MYSQL_5_7 us-west2-b db-n1-standard-1 x.x.x.x - RUNNABLE
Beri akun layanan Cloud SQL Anda izin untuk mengekspor data ke Cloud Storage dengan peran Simple Storage:
export SQL_SA=(`gcloud sql instances describe ${SQL_INSTANCE} \ --project ${PROJECT_ID} \ --format "value(serviceAccountEmailAddress)"`) gsutil iam ch serviceAccount:${SQL_SA}:projects/${PROJECT_ID}/roles/${STORAGE_ROLE} gs://${BUCKET_NAME}
Mengisi instance Cloud SQL dengan data sampel
Sekarang, Anda dapat mengupload file ke bucket dan membuat serta mengisi database sampel.
Buka repositori yang Anda clone:
cd training-data-analyst/CPB100/lab3a/cloudsql
Upload file dalam direktori ke bucket baru Anda:
gsutil cp * gs://${BUCKET_NAME}
Membuat sampel database; di jendela "Apakah Anda ingin melanjutkan (Y/t)? perintah, masukkan Y (Ya) untuk melanjutkan.
gcloud sql import sql ${SQL_INSTANCE} gs://${BUCKET_NAME}/table_creation.sql --project ${PROJECT_ID}
Mengisi database; di jendela "Apakah Anda ingin melanjutkan (Y/t)? perintah, masukkan Y (Ya) untuk melanjutkan.
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
Membuat topik, fungsi, dan tugas terjadwal
Di bagian ini, Anda akan membuat akun layanan IAM khusus dan mengikatnya ke peran SQL khusus yang Anda buat di Menyiapkan lingkungan Anda. Anda kemudian membuat topik Pub/Sub dan Cloud Function yang berlangganan topik tersebut, serta menggunakan Cloud SQL Admin API untuk memulai pencadangan. Terakhir, Anda membuat sebuah tugas Cloud Scheduler untuk memposting pesan ke topik Pub/Sub secara berkala.
Membuat akun layanan untuk Cloud Function
Langkah pertama adalah membuat akun layanan khusus dan mengikatnya ke peran SQL khusus yang Anda buat di bagian Menyiapkan lingkungan Anda.
Buat sebuah akun layanan IAM yang akan digunakan oleh Cloud Function:
gcloud iam service-accounts create ${GCF_NAME} \ --display-name "Service Account for GCF and SQL Admin API"
Beri akun layanan Cloud Function akses ke peran SQL khusus:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${GCF_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="projects/${PROJECT_ID}/roles/${SQL_ROLE}"
Membuat topik Pub/Sub
Langkah selanjutnya adalah membuat topik Pub/Sub yang digunakan untuk memicu Cloud Function yang berinteraksi dengan database Cloud SQL.
```sh
gcloud pubsub topics create ${PUBSUB_TOPIC}
```
Buat Cloud Function
Selanjutnya, Anda membuat Cloud Function.
Buat file
main.py
dengan menempelkan perintah berikut ke 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
Buat file
requirements.txt
dengan menempelkan perintah berikut ke Cloud Shell:cat <<EOF > requirements.txt google-api-python-client Oauth2client EOF
Deploy kode:
gcloud functions deploy ${GCF_NAME} \ --trigger-topic ${PUBSUB_TOPIC} \ --runtime python37 \ --entry-point main \ --service-account ${GCF_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
Buat tugas Cloud Scheduler
Terakhir, Anda membuat tugas Cloud Scheduler untuk memicu pencadangan data secara berkala setiap jam. Cloud Scheduler menggunakan instance App Engine untuk deployment.
Buat instance App Engine untuk tugas Cloud Scheduler:
gcloud app create --region=${REGION}
Membuat tugas 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'
Menguji solusi Anda
Langkah terakhir adalah menguji solusi Anda. Mulailah dengan menjalankan tugas Cloud Scheduler.
Jalankan tugas Cloud Scheduler secara manual untuk memicu dump MySQL pada database Anda.
gcloud scheduler jobs run ${SCHEDULER_JOB}
Buat daftar operasi yang dilakukan pada instance MySQL, dan verifikasi bahwa ada operasi jenis
BACKUP_VOLUME
:gcloud sql operations list --instance ${SQL_INSTANCE} --limit 1
Output menunjukkan tugas pencadangan yang telah selesai. Contoh:
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
Pembersihan
Anda dapat menghindari tagihan ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini dengan mengikuti langkah-langkah berikut. Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Jika Anda tidak ingin menghapus seluruh project, maka hapus setiap resource yang telah dibuat. Untuk melakukannya, buka halaman yang sesuai di konsol Google Cloud, pilih resource, lalu hapus.
Langkah selanjutnya
- Pelajari cara menjadwalkan instance komputasi dengan Cloud Scheduler.
- Pelajari lebih lanjut mengenai pencadangan Cloud SQL.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.