Arsitektur
Diagram berikut menunjukkan arsitektur tingkat tinggi pipeline ekstrak, muat, dan ubah (ELT) serverless menggunakan Workflows.
Dalam diagram sebelumnya, pertimbangkan platform retail yang secara berkala mengumpulkan peristiwa penjualan sebagai file dari berbagai toko, lalu menulis file tersebut ke bucket Cloud Storage. Peristiwa ini digunakan untuk memberikan metrik bisnis dengan mengimpor dan memproses di BigQuery. Arsitektur ini menyediakan sistem orkestrasi serverless dan andal untuk mengimpor file ke BigQuery, dan dibagi menjadi dua modul berikut:
- Daftar file: Mempertahankan daftar file yang belum diproses dan ditambahkan ke
bucket Cloud Storage dalam koleksi Firestore.
Modul ini berfungsi melalui Cloud Run Function yang dipicu oleh
peristiwa penyimpanan
Object Finalize
yang dibuat saat file baru ditambahkan ke
bucket Cloud Storage. Nama file ditambahkan ke array
filesdari koleksi bernamanewdi Firestore. Alur kerja: Menjalankan alur kerja terjadwal. Cloud Scheduler memicu alur kerja yang menjalankan serangkaian langkah sesuai dengan sintaksis berbasis YAML untuk mengatur pemuatan, lalu mengubah data di BigQuery dengan memanggil Cloud Run Functions. Langkah-langkah dalam alur kerja memanggil Cloud Run Functions untuk menjalankan tugas berikut:
- Membuat dan memulai tugas pemuatan BigQuery.
- Melakukan polling status tugas pemuatan.
- Membuat dan memulai tugas kueri transformasi.
- Melakukan polling status tugas transformasi.
Penggunaan transaksi untuk mempertahankan daftar file baru di Firestore membantu memastikan tidak ada file yang terlewat saat alur kerja mengimpornya ke BigQuery. Jalankan alur kerja secara terpisah dan buat idempotent dengan menyimpan metadata dan status tugas di Firestore.
Tujuan
- Membuat database Firestore.
- Menyiapkan pemicu Cloud Run Function untuk melacak file yang ditambahkan ke bucket Cloud Storage di Firestore.
- Men-deploy Cloud Run Functions untuk menjalankan dan memantau tugas BigQuery.
- Men-deploy dan menjalankan alur kerja untuk mengotomatiskan proses.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih sebagai berikut Google Cloud:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.
Sebelum memulai
-
Di Google Cloud konsol, pada halaman pemilih project, pilih atau buat Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Pastikan penagihan diaktifkan untuk Google Cloud project Anda.
-
Aktifkan Cloud Build, Cloud Run Functions, Identity and Access Management, Resource Manager, dan Workflows API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran. Buka halaman Welcome dan catat Project ID untuk digunakan pada langkah berikutnya.
Di Google Cloud konsol, aktifkan Cloud Shell.
Menyiapkan lingkungan Anda
Untuk menyiapkan lingkungan Anda, buat database Firestore, clone contoh kode dari repo GitHub, buat resource menggunakan Terraform, edit file YAML Workflows, dan instal persyaratan untuk generator file.
Untuk membuat database Firestore, lakukan hal berikut:
Di Google Cloud konsol, buka halaman Firestore.
Klik Select native mode.
Di menu Select a location, pilih region tempat Anda ingin menghosting database Firestore. Sebaiknya pilih region yang dekat dengan lokasi fisik Anda.
Klik Create database.
Pada Cloud Shell, clone repositori sumber:
cd $HOME && git clone https://github.com/GoogleCloudPlatform/workflows-demos cd workflows-demos/workflows-bigquery-loadDi Cloud Shell, buat resource berikut menggunakan Terraform:
terraform init terraform apply \ -var project_id=PROJECT_ID \ -var region=REGION \ -var zone=ZONE \ --auto-approveGanti kode berikut:
PROJECT_ID: ID proyek Google Cloud AndaREGION: lokasi geografis Google Cloud tertentu untuk menghosting resource Anda—misalnya,us-central1ZONE: lokasi dalam region untuk menghosting resource Anda—misalnya,us-central1-b
Anda akan melihat pesan yang mirip dengan berikut ini:
Apply complete! Resources: 7 added, 0 changed, 1 destroyed.Terraform dapat membantu Anda membuat, mengubah, dan mengupgrade infrastruktur dalam skala besar secara aman dan terprediksi. Resource berikut dibuat di project Anda:
- Akun layanan dengan hak istimewa yang diperlukan untuk memastikan akses yang aman ke resource Anda.
- Set data BigQuery bernama
serverless_elt_datasetdan tabel bernamaword_countuntuk memuat file masuk. - Bucket Cloud Storage bernama
${project_id}-ordersbucketuntuk file input staging. - Lima Cloud Run Functions berikut:
file_add_handlermenambahkan nama file yang ditambahkan ke bucket Cloud Storage ke koleksi Firestore.create_jobmembuat tugas pemuatan BigQuery baru dan mengaitkan file dalam koleksi Firebase dengan tugas tersebut.create_querymembuat tugas kueri BigQuery baru.poll_bigquery_jobmendapatkan status tugas BigQuery.run_bigquery_jobmemulai tugas BigQuery.
Dapatkan URL untuk Cloud Run Functions
create_job,create_query,poll_job, danrun_bigquery_jobyang Anda deploy pada langkah sebelumnya.gcloud functions describe create_job | grep url gcloud functions describe poll_bigquery_job | grep url gcloud functions describe run_bigquery_job | grep url gcloud functions describe create_query | grep url
Outputnya mirip dengan hal berikut ini:
url: https://REGION-PROJECT_ID.cloudfunctions.net/create_job url: https://REGION-PROJECT_ID.cloudfunctions.net/poll_bigquery_job url: https://REGION-PROJECT_ID.cloudfunctions.net/run_bigquery_job url: https://REGION-PROJECT_ID.cloudfunctions.net/create_query
Catat URL ini karena diperlukan saat Anda men-deploy alur kerja.
Membuat dan men-deploy alur kerja
Di Cloud Shell, buka file sumber untuk alur kerja,
workflow.yaml:Ganti kode berikut:
CREATE_JOB_URL: URL fungsi untuk membuat tugas baruPOLL_BIGQUERY_JOB_URL: URL fungsi untuk melakukan polling status tugas yang sedang berjalanRUN_BIGQUERY_JOB_URL: URL fungsi untuk memulai tugas pemuatan BigQueryCREATE_QUERY_URL: URL fungsi untuk memulai tugas kueri BigQueryBQ_REGION: region BigQuery tempat data disimpan—misalnya,USBQ_DATASET_TABLE_NAME: nama tabel set data BigQuery dalam formatPROJECT_ID.serverless_elt_dataset.word_count
Deploy file
workflow:gcloud workflows deploy WORKFLOW_NAME \ --location=WORKFLOW_REGION \ --description='WORKFLOW_DESCRIPTION' \ --service-account=workflow-runner@PROJECT_ID.iam.gserviceaccount.com \ --source=workflow.yamlGanti kode berikut:
WORKFLOW_NAME: nama unik alur kerjaWORKFLOW_REGION: region tempat alur kerja di-deploy—misalnya,us-central1WORKFLOW_DESCRIPTION: deskripsi alur kerja
Buat lingkungan virtual Python 3 dan instal persyaratan untuk generator file:
sudo apt-get install -y python3-venv python3 -m venv env . env/bin/activate cd generator pip install -r requirements.txt
Membuat file untuk diimpor
Skrip Python gen.py membuat konten acak dalam
format Avro. Skemanya sama dengan tabel word_count BigQuery. File Avro ini disalin ke bucket Cloud Storage yang ditentukan.
Di Cloud Shell, buat file:
python gen.py -p PROJECT_ID \
-o PROJECT_ID-ordersbucket \
-n RECORDS_PER_FILE \
-f NUM_FILES \
-x FILE_PREFIX
Ganti kode berikut:
RECORDS_PER_FILE: jumlah rekaman dalam satu fileNUM_FILES: jumlah total file yang akan diuploadFILE_PREFIX: awalan untuk nama file yang dibuat
Melihat entri file di Firestore
Saat file disalin ke Cloud Storage, Cloud Run Function handle_new_file akan dipicu. Fungsi ini menambahkan daftar file ke array daftar file dalam dokumen new di koleksi jobs Firestore.
Untuk melihat daftar file, di Google Cloud konsol, buka halaman Firestore Data.
Memicu alur kerja
Workflows menautkan serangkaian tugas serverless dari Google Cloud dan layanan API. Setiap langkah dalam alur kerja ini berjalan sebagai Cloud Run Functions dan statusnya disimpan di Firestore. Semua panggilan ke Cloud Run Functions diautentikasi menggunakan akun layanan alur kerja.
Di Cloud Shell, jalankan alur kerja:
gcloud workflows execute WORKFLOW_NAME
Diagram berikut menunjukkan langkah-langkah yang digunakan dalam alur kerja:
Alur kerja dibagi menjadi dua bagian: alur kerja utama dan sub-alur kerja. Alur kerja utama menangani pembuatan tugas dan eksekusi bersyarat, sedangkan sub alur kerja menjalankan tugas BigQuery. Alur kerja melakukan operasi berikut:
- Cloud Run Function
create_jobmembuat objek tugas baru, mendapatkan daftar file yang ditambahkan ke Cloud Storage dari dokumen Firestore, dan mengaitkan file dengan tugas pemuatan. Jika tidak ada file yang akan dimuat, fungsi ini tidak akan membuat tugas baru. - Cloud Run Function
create_querymengambil kueri yang perlu dijalankan bersama dengan region BigQuery tempat kueri harus dijalankan. Fungsi ini membuat tugas di Firestore dan menampilkan ID tugas. - Cloud Run Function
run_bigquery_jobmendapatkan ID tugas yang perlu dijalankan, lalu memanggil BigQuery API untuk mengirimkan tugas. - Daripada menunggu tugas selesai di Cloud Run Function, Anda dapat melakukan polling status tugas secara berkala.
Melihat status tugas
Anda dapat melihat daftar file dan status tugas.
Di Google Cloud konsol, buka halaman Data Firestore.
ID unik (UUID) dibuat untuk setiap tugas. Untuk melihat
job_typedanstatus, klik ID tugas. Setiap tugas mungkin memiliki salah satu jenis dan status berikut:job_type: Jenis tugas yang dijalankan oleh alur kerja dengan salah satu nilai berikut:- 0: Memuat data ke BigQuery.
- 1: Menjalankan kueri di BigQuery.
status: Status tugas saat ini dengan salah satu nilai berikut:- 0: Tugas telah dibuat, tetapi belum dimulai.
- 1: Tugas sedang berjalan.
- 2: Tugas berhasil menyelesaikan eksekusinya.
- 3: Terjadi error dan tugas tidak berhasil diselesaikan.
Objek tugas juga berisi atribut metadata seperti region set data BigQuery, nama tabel BigQuery, dan jika merupakan tugas kueri, string kueri yang sedang dijalankan.
Melihat data di BigQuery
Untuk mengonfirmasi bahwa tugas ELT berhasil, pastikan data muncul di tabel.
Di Google Cloud konsol, buka halaman BigQuery Editor.
Klik tabel
serverless_elt_dataset.word_count.Klik tab Preview.
Menjadwalkan alur kerja
Untuk menjalankan alur kerja secara berkala sesuai jadwal, Anda dapat menggunakan Cloud Scheduler.
Pembersihan
Cara termudah untuk meniadakan tagihan adalah dengan menghapus Google Cloud project yang Anda buat untuk tutorial ini. Atau, Anda dapat menghapus resource satu per satu.Menghapus resource satu per satu
Di Cloud Shell, hapus semua resource yang dibuat menggunakan Terraform:
cd $HOME/bigquery-workflows-load terraform destroy \ -var project_id=PROJECT_ID \ -var region=REGION \ -var zone=ZONE \ --auto-approve
Di Google Cloud konsol, buka halaman Data Firestore.
Di samping Jobs, klik Menu, lalu pilih Delete.
Menghapus project
- Di Google Cloud konsol, buka halaman Manage resources.
- Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah berikutnya
- Untuk mempelajari BigQuery lebih lanjut, lihat dokumentasi BigQuery.
- Pelajari cara me mbuat pipeline machine learning kustom serverless.
- Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.