1. Ringkasan
Di lab ini, Anda akan mengintegrasikan database tanpa server(Spanner dan Firestore) dengan aplikasi(Go dan Node.js) yang berjalan di Cloud Run. Aplikasi Cymbal Eats mencakup beberapa layanan yang berjalan di Cloud Run. Pada langkah berikut, Anda akan mengonfigurasi layanan untuk menggunakan database relasional Cloud Spanner dan Cloud Firestore, database dokumen NoSQL. Dengan memanfaatkan produk tanpa server untuk tingkat data dan runtime aplikasi, Anda dapat memisahkan semua pengelolaan infrastruktur, dengan berfokus pada membangun aplikasi, tanpa mengkhawatirkan overhead.
2. Yang akan Anda pelajari
Di lab ini, Anda akan mempelajari cara melakukan hal-hal berikut:
- Mengintegrasikan Spanner
- Mengaktifkan Layanan Terkelola Spanner
- Mengintegrasikan ke dalam kode
- Deploy kode yang terhubung ke Spanner
- Mengintegrasikan Firestore
- Mengaktifkan Layanan yang Dikelola Firestore
- Mengintegrasikan ke dalam kode
- Men-deploy kode yang terhubung ke Firestore
3. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Lingkungan Penyiapan
- Membuat variabel project ID
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export SPANNER_INSTANCE=inventory-instance
export SPANNER_DB=inventory-db
export REGION=us-east1
export SPANNER_CONNECTION_STRING=projects/$PROJECT_ID/instances/$SPANNER_INSTANCE/databases/$SPANNER_DB
- Mengaktifkan Spanner, Cloud Run, Cloud Build, dan Artifact Registry API
gcloud services enable \
compute.googleapis.com \
spanner.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
firestore.googleapis.com \
appengine.googleapis.com \
artifactregistry.googleapis.com
- Melakukan cloning repositori
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
- Buka direktori
cd cymbal-eats/inventory-service/spanner
4. Membuat dan Mengonfigurasi instance Spanner
Spanner adalah database relasional backend layanan inventaris. Anda akan membuat instance, database, dan skema Spanner pada langkah-langkah berikut.
Membuat instance
- Membuat instance Cloud Spanner
gcloud spanner instances create $SPANNER_INSTANCE --config=regional-${REGION} \
--description="Cymbal Menu Inventory" --nodes=1
Contoh Output
Creating instance...done.
- Memverifikasi apakah instance Spanner dikonfigurasi dengan benar
gcloud spanner instances list
Contoh output
NAME: inventory-instance DISPLAY_NAME: Cymbal Menu Inventory CONFIG: regional-us-east1 NODE_COUNT: 1 PROCESSING_UNITS: 100 STATE: READY
Membuat database dan skema
Buat database baru dan gunakan bahasa definisi data (DDL) SQL standar Google untuk membuat skema database.
- Membuat file DDL
echo "CREATE TABLE InventoryHistory (ItemRowID STRING (36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, Timestamp TIMESTAMP) PRIMARY KEY(ItemRowID)" >> table.ddl
- Membuat database Spanner
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl-file=table.ddl
Contoh output
Creating database...done.
Memverifikasi status dan skema Database
- Melihat status database
gcloud spanner databases describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Contoh output
createTime: '2022-04-22T15:11:33.559300Z' databaseDialect: GOOGLE_STANDARD_SQL earliestVersionTime: '2022-04-22T15:11:33.559300Z' encryptionInfo: - encryptionType: GOOGLE_DEFAULT_ENCRYPTION name: projects/cymbal-eats-7-348013/instances/menu-inventory/databases/menu-inventory state: READY versionRetentionPeriod: 1h
- Melihat skema database
gcloud spanner databases ddl describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Contoh output
CREATE TABLE InventoryHistory ( ItemRowID STRING(36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, TimeStamp TIMESTAMP, ) PRIMARY KEY(ItemRowID);
5. Mengintegrasikan Spanner
Di bagian ini, Anda akan mempelajari cara mengintegrasikan Spanner ke dalam aplikasi. Selain itu, SQL Spanner menyediakan Library klien, driver JDBC, driver R2DBC, REST API, dan RPC API, yang memungkinkan Anda mengintegrasikan Spanner ke dalam aplikasi apa pun.
Di bagian berikutnya, Anda akan menggunakan library klien Go untuk menginstal, mengautentikasi, dan mengubah data di Spanner.
Menginstal library klien
Library klien Cloud Spanner mempermudah integrasi dengan Cloud Spanner dengan secara otomatis menggunakan Kredensial Default Aplikasi (ADC) untuk menemukan kredensial akun layanan Anda
Menyiapkan autentikasi
Library klien Google Cloud CLI dan Google Cloud otomatis mendeteksi saat keduanya berjalan di Google Cloud dan menggunakan akun layanan runtime dari revisi Cloud Run saat ini. Strategi ini disebut Kredensial Default Aplikasi dan memungkinkan portabilitas kode di berbagai lingkungan.
Namun, sebaiknya buat identitas khusus dengan menetapkan akun layanan yang dikelola pengguna untuknya, bukan akun layanan default.
- Memberikan peran Spanner Database Admin ke akun layanan
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/spanner.databaseAdmin"
Contoh output
Updated IAM policy for project [cymbal-eats-6422-3462]. [...]
Menggunakan library klien
Library klien Spanner menghilangkan kerumitan integrasi dengan Spanner dan tersedia dalam banyak bahasa pemrograman populer.
Membuat klien Spanner
Klien Spanner adalah klien untuk membaca dan menulis data ke database Cloud Spanner. Klien aman digunakan secara bersamaan, kecuali untuk metode Close-nya.
Cuplikan di bawah ini membuat klien spanner
main.go
var dataClient *spanner.Client ... dataClient, err = spanner.NewClient(ctx, databaseName)
Anda dapat menganggap Klien sebagai koneksi database: semua interaksi Anda dengan Cloud Spanner harus melalui Klien. Biasanya Anda membuat Klien saat aplikasi dimulai, lalu menggunakan kembali klien tersebut untuk membaca, menulis, dan menjalankan transaksi. Setiap klien menggunakan resource di Cloud Spanner.
Mengubah data
Ada beberapa cara untuk menyisipkan, memperbarui, dan menghapus data dari database Spanner. Di bawah ini adalah metode yang tersedia.
Di lab ini, Anda akan menggunakan mutasi untuk mengubah data di Spanner.
Mutasi di Spanner
Mutasi adalah container untuk operasi mutasi. Mutasi mewakili urutan penyisipan, pembaruan, dan penghapusan yang diterapkan Cloud Spanner secara atomik ke berbagai baris dan tabel dalam database Cloud Spanner.
main.go
m := []*spanner.Mutation{} m = append(m, spanner.Insert( "inventoryHistory", inventoryHistoryColumns, []interface{}{uuid.New().String(), element.ItemID, element.InventoryChange, time.Now()}))
Cuplikan kode menyisipkan baris baru ke dalam tabel histori inventaris.
Men-deploy dan Menguji
Setelah Spanner dikonfigurasi dan Anda telah meninjau elemen kode utama, deploy aplikasi ke Cloud Run.
Men-deploy aplikasi ke Cloud Run
Cloud Run dapat otomatis membangun, mengirim, dan men-deploy kode Anda dengan satu perintah. Dalam perintah berikut, Anda akan memanggil perintah deploy
di layanan run
, dengan meneruskan variabel yang digunakan oleh aplikasi yang berjalan seperti SPANNER_CONNECTION_STRING yang Anda buat sebelumnya.
- Klik Open Terminal
- Men-deploy layanan inventaris ke Cloud Run
gcloud run deploy inventory-service \
--source . \
--region $REGION \
--update-env-vars SPANNER_CONNECTION_STRING=$SPANNER_CONNECTION_STRING \
--allow-unauthenticated \
--project=$PROJECT_ID \
--quiet
Contoh output
Service [inventory-service] revision [inventory-service-00001-sug] has been deployed and is serving 100 percent of traffic. Service URL: https://inventory-service-ilwytgcbca-uk.a.run.app
- Menyimpan URL layanan
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
Menguji aplikasi Cloud Run
Sisipkan item
- Di cloudshell, masukkan perintah berikut.
POST_URL=$INVENTORY_SERVICE_URL/updateInventoryItem
curl -i -X POST ${POST_URL} \
--header 'Content-Type: application/json' \
--data-raw '[
{
"itemID": 1,
"inventoryChange": 5
}
]'
Contoh output
HTTP/2 200 access-control-allow-origin: * content-type: application/json x-cloud-trace-context: 10c32f0863d26521497dc26e86419f13;o=1 date: Fri, 22 Apr 2022 21:41:38 GMT server: Google Frontend content-length: 2 OK
Membuat kueri item
- Membuat kueri layanan inventaris
GET_URL=$INVENTORY_SERVICE_URL/getAvailableInventory
curl -i ${GET_URL}
Contoh respons
HTTP/2 200 access-control-allow-origin: * content-type: text/plain; charset=utf-8 x-cloud-trace-context: b94f921e4c2ae90210472c88eb05ace8;o=1 date: Fri, 22 Apr 2022 21:45:50 GMT server: Google Frontend content-length: 166 [{"ItemID":1,"Inventory":5}]
6. Konsep Spanner
Cloud Spanner membuat kueri database-nya menggunakan pernyataan SQL deklaratif. Pernyataan SQL menunjukkan apa yang diinginkan pengguna tanpa menjelaskan bagaimana hasilnya akan diperoleh.
- Di terminal, masukkan perintah ini untuk mengkueri tabel terkait data yang telah dibuat sebelumnya.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT * FROM InventoryHistory WHERE ItemID=1'
Contoh output
ItemRowID: 1
ItemID: 1
InventoryChange: 3
Timestamp:
Rencana eksekusi kueri
Rencana eksekusi kueri adalah serangkaian langkah yang digunakan Spanner untuk mendapatkan hasil. Mungkin ada beberapa cara untuk mendapatkan hasil dari pernyataan SQL tertentu. Rencana eksekusi kueri dapat diakses di konsol dan library klien. Untuk melihat cara Spanner menangani kueri SQL:
- Di konsol, buka halaman instance Cloud Spanner.
- Buka instance Cloud Spanner
- Klik nama instance Cloud Spanner. Dari bagian {i>database<i}, pilih {i>database<i} yang ingin Anda kueri.
- Klik Kueri.
- Masukkan kueri berikut di editor kueri
SELECT * FROM InventoryHistory WHERE ItemID=1
- Klik RUN
- Klik PENJELASAN
Cloud Console menampilkan rencana eksekusi visual untuk kueri Anda.
Pengoptimal kueri
Pengoptimal kueri Cloud Spanner membandingkan rencana eksekusi alternatif dan memilih yang paling efisien. Seiring waktu, pengoptimal kueri akan berkembang, sehingga memperluas pilihan dalam rencana eksekusi kueri dan meningkatkan akurasi estimasi yang memberikan informasi pilihan tersebut, sehingga menghasilkan rencana eksekusi kueri yang lebih efisien.
Cloud Spanner meluncurkan update pengoptimal sebagai versi pengoptimal kueri baru. Secara default, setiap database mulai menggunakan versi pengoptimal terbaru tidak lebih cepat dari 30 hari setelah versi tersebut dirilis.
Untuk melihat versi yang digunakan saat menjalankan kueri di gcloud spanner, setel tanda –query-mode ke PROFILE
- Masukkan perintah berikut untuk melihat versi pengoptimal
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Contoh output
TOTAL_ELAPSED_TIME: 6.18 msecs CPU_TIME: 5.17 msecs ROWS_RETURNED: 1 ROWS_SCANNED: 1 OPTIMIZER_VERSION: 3 RELATIONAL Distributed Union (1 execution, 0.11 msecs total latency) subquery_cluster_node: 1 | +- RELATIONAL Distributed Union | (1 execution, 0.09 msecs total latency) | call_type: Local, subquery_cluster_node: 2 | | | \- RELATIONAL Serialize Result | (1 execution, 0.08 msecs total latency) | | | +- RELATIONAL Scan | | (1 execution, 0.08 msecs total latency) | | Full scan: true, scan_target: InventoryHistory, scan_type: TableScan | | | | | +- SCALAR Reference | | | ItemRowID | | | | | +- SCALAR Reference | | | ItemID | | | | | +- SCALAR Reference | | | InventoryChange | | | | | \- SCALAR Reference | | Timestamp | | | +- SCALAR Reference | | $ItemRowID | | | +- SCALAR Reference | | $ItemID | | | +- SCALAR Reference | | $InventoryChange | | | \- SCALAR Reference | $Timestamp | \- SCALAR Constant true ItemRowID: 1 ItemID: 1 InventoryChange: 3 Timestamp:
Mengupdate versi pengoptimal
Versi terbaru pada saat lab ini adalah versi 4. Selanjutnya, Anda akan memperbarui Tabel Spanner agar menggunakan versi 4 untuk pengoptimal kueri.
- Mengupdate pengoptimal
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl='ALTER DATABASE InventoryHistory
SET OPTIONS (optimizer_version = 4)'
Contoh output
Schema updating...done.
- Masukkan perintah berikut untuk melihat update versi pengoptimal
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Contoh output
TOTAL_ELAPSED_TIME: 8.57 msecs CPU_TIME: 8.54 msecs ROWS_RETURNED: 1 ROWS_SCANNED: 1 OPTIMIZER_VERSION: 4 [...]
Memvisualisasikan versi pengoptimal kueri di Metrics Explorer
Anda dapat menggunakan Metrics Explorer di Konsol Cloud untuk memvisualisasikan Jumlah kueri untuk instance database Anda. Anda dapat melihat versi pengoptimal mana yang digunakan dalam setiap database.
- Buka Monitoring di Konsol Cloud, lalu pilih Metrics Explorer di menu kiri.
- Di kolom Resource type, pilih Instance Cloud Spanner.
- Di kolom Metric, pilih Count of kueri dan Terapkan.
- Di kolom Group By, pilih database, optimizer_version, dan status.
7. Membuat dan Mengonfigurasi Database Firestore
Firestore adalah database dokumen NoSQL yang dibangun untuk penskalaan otomatis, performa tinggi, dan kemudahan pengembangan aplikasi. Meskipun antarmuka Firestore memiliki banyak fitur yang sama dengan database tradisional, database NoSQL berbeda dalam menjelaskan hubungan antar-objek data.
Tugas berikut akan memandu Anda membuat aplikasi Cloud Run layanan pemesanan yang didukung oleh Firestore. Layanan pemesanan akan memanggil layanan inventaris yang dibuat di bagian sebelumnya untuk mengkueri database Spanner sebelum memulai pesanan. Layanan ini akan memastikan tersedianya inventaris yang memadai dan pesanan dapat dipenuhi.
8. Konsep Firestore
Model data
Database Firestore terdiri dari koleksi dan dokumen.
Dokumen
Setiap dokumen berisi kumpulan pasangan nilai kunci. Firestore dioptimalkan untuk menyimpan koleksi besar dokumen berukuran kecil.
Koleksi
Anda harus menyimpan semua dokumen dalam koleksi. Dokumen dapat berisi subkoleksi dan objek bertingkat, termasuk kolom dasar seperti string atau objek kompleks seperti daftar.
Membuat database Firestore
- Membuat database Firestore
gcloud firestore databases create --location=$REGION
Contoh output
Success! Selected Google Cloud Firestore Native database for cymbal-eats-6422-3462
9. Mengintegrasikan Firestore ke dalam aplikasi Anda
Di bagian ini, Anda akan memperbarui akun layanan, menambahkan akun layanan akses Firestore, meninjau dan men-deploy aturan keamanan Firestore, serta meninjau cara data dimodifikasi di Firestore.
Menyiapkan autentikasi
- Berikan peran pengguna Datastore ke akun layanan
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/datastore.user"
Contoh output
Updated IAM policy for project [cymbal-eats-6422-3462].
Aturan Keamanan Firestore
Aturan keamanan menyediakan kontrol akses dan validasi data dalam format yang ekspresif tetapi sederhana.
- Buka direktori order-service/starter-code
cd ~/cymbal-eats/order-service
- Buka file firestore.rules di editor cloud
cat firestore.rules
firestore.rules
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { ⇐ All database match /{document=**} { ⇐ All documents allow read: if true; ⇐ Allow reads } match /{document=**} { allow write: if false; ⇐ Deny writes } } }
Peringatan: Sebaiknya batasi akses ke penyimpanan Firestore. Untuk tujuan lab ini, semua operasi baca diizinkan. Ini bukan konfigurasi produksi yang disarankan.
Mengaktifkan Layanan yang Dikelola Firestore
- Klik Open Terminal
- Buat file .firebaserc dengan Project ID saat ini. Setelan untuk target deploy disimpan dalam file .firebaserc di direktori project Anda.
firebaserc.tmpl
sed "s/PROJECT_ID/$PROJECT_ID/g" firebaserc.tmpl > .firebaserc
- Download biner firebase
curl -sL https://firebase.tools | upgrade=true bash
Contoh output
-- Checking for existing firebase-tools on PATH... Your machine already has firebase-tools@10.7.0 installed. Nothing to do. -- All done!
- Men-deploy aturan Firestore.
firebase deploy
Contoh Output
=== Deploying to 'cymbal-eats-6422-3462'... i deploying firestore i cloud.firestore: checking firestore.rules for compilation errors... ✔ cloud.firestore: rules file firestore.rules compiled successfully i firestore: uploading rules firestore.rules... ✔ firestore: released rules firestore.rules to cloud.firestore ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/cymbal-eats-6422-3462/overview
Mengubah data
Koleksi dan dokumen dibuat secara implisit di Firestore. Cukup tetapkan data ke dokumen dalam koleksi. Jika koleksi atau dokumen tidak ada, Firestore akan membuatnya.
Menambahkan data ke firestore
Ada beberapa cara untuk menulis data ke Cloud Firestore:
- Menetapkan data dokumen dalam koleksi, dengan secara eksplisit menentukan ID dokumen.
- Menambahkan dokumen baru ke koleksi. Dalam hal ini, Cloud Firestore akan otomatis menghasilkan ID dokumen.
- Membuat dokumen kosong dengan ID yang otomatis dihasilkan, lalu menetapkan data untuk dokumen tersebut.
Bagian berikutnya akan memandu Anda membuat dokumen menggunakan metode set.
Menetapkan dokumen
Gunakan metode set()
untuk membuat dokumen. Dengan metode set()
, Anda harus menentukan ID untuk dokumen yang akan dibuat.
Lihat cuplikan kode di bawah ini.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.set({ orderNumber: 123, name: Anne, address: 555 Bright Street, city: Mountain View, state: CA, zip: 94043, orderItems: [id: 1], status: 'New' });
Kode ini akan membuat dokumen yang menentukan ID dokumen buatan pengguna 123. Agar Firestore membuat ID untuk Anda, gunakan metode add()
atau create()
.
Memperbarui dokumen
Metode pembaruan update()
memungkinkan Anda memperbarui beberapa kolom dokumen tanpa menimpa keseluruhan dokumen.
Dalam cuplikan di bawah, kode memperbarui urutan 123
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.update(name: "Anna");
Menghapus dokumen
Di Firestore, Anda dapat menghapus koleksi, dokumen, atau kolom tertentu dari dokumen. Untuk menghapus dokumen, gunakan metode delete()
.
Cuplikan di bawah menghapus pesanan 123.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.delete();
10. Men-deploy dan Menguji
Di bagian ini, Anda akan men-deploy aplikasi ke Cloud Run dan menguji metode buat, update, dan hapus.
Men-deploy aplikasi ke Cloud Run
- Simpan URL dalam variabel INVENTORY_SERVICE_URL untuk diintegrasikan dengan Layanan Inventaris
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
- Men-deploy layanan pesanan
gcloud run deploy order-service \
--source . \
--platform managed \
--region $REGION \
--allow-unauthenticated \
--project=$PROJECT_ID \
--set-env-vars=INVENTORY_SERVICE_URL=$INVENTORY_SERVICE_URL \
--quiet
Contoh output
[...] Done. Service [order-service] revision [order-service-00001-qot] has been deployed and is serving 100 percent of traffic. Service URL: https://order-service-3jbm3exegq-uk.a.run.app
Menguji aplikasi Cloud Run
Buat dokumen
- Menyimpan URL aplikasi layanan pesanan ke dalam variabel untuk diuji
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
- Membuat permintaan pesanan dan memposting pesanan baru ke database Firestore
curl --request POST $ORDER_SERVICE_URL/order \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Jane Doe",
"email": "Jane.Doe-cymbaleats@gmail.com",
"address": "123 Maple",
"city": "Buffalo",
"state": "NY",
"zip": "12346",
"orderItems": [
{
"id": 1
}
]
}'
Contoh output
{"orderNumber":46429}
Simpan Nomor Pesanan untuk digunakan nanti
export ORDER_NUMBER=<value_from_output>
Lihat hasil
Melihat hasil di Firestore
- Buka konsol Firestore
- Klik Data
Memperbarui dokumen
Pesanan yang dikirim tidak menyertakan jumlah.
- Perbarui data dan tambahkan pasangan nilai kunci jumlah
curl --location -g --request PATCH $ORDER_SERVICE_URL/order/${ORDER_NUMBER} \
--header 'Content-Type: application/json' \
--data-raw '{
"orderItems": [
{
"id": 1,
"quantity": 1
}
]
}'
Contoh output
{"status":"success"}
Lihat hasil
Melihat hasil di Firestore
- Buka konsol Firestore
- Klik Data
Menghapus dokumen
- Menghapus item 46429 dari koleksi pesanan Firestore
curl --location -g --request DELETE $ORDER_SERVICE_URL/order/${ORDER_NUMBER}
Lihat hasil
- Buka konsol Firestore
- Klik Data
11. Selamat!
Selamat, kamu telah menyelesaikan lab!
Langkah berikutnya:
Pelajari codelab Cymbal Eats lainnya:
- Memicu Cloud Workflows dengan Eventarc
- Memicu Pemrosesan Peristiwa dari Cloud Storage
- Terhubung ke Private CloudSQL dari Cloud Run
- Aplikasi Serverless yang Aman dengan Identity-Aware Proxy (IAP)
- Memicu Tugas Cloud Run dengan Cloud Scheduler
- Men-deploy dengan Aman ke Cloud Run
- Mengamankan Traffic Masuk Cloud Run
- Terhubung ke AlloyDB pribadi dari Autopilot GKE
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource, atau simpan project dan hapus resource satu per satu.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.