1. Genel Bakış
Bu laboratuvarda, sunucusuz veritabanlarını(Spanner ve Firestore) Cloud Run'da çalışan uygulamalarla(Go ve Node.js) entegre edeceksiniz. Cymbal Eats uygulaması, Cloud Run'da çalışan birden fazla hizmet içerir. Aşağıdaki adımlarda hizmetleri Cloud Spanner ilişkisel veritabanını ve bir NoSQL belge veritabanı olan Cloud Firestore'u kullanacak şekilde yapılandıracaksınız. Veri katmanı ve uygulama çalışma zamanı için sunucusuz ürünler kullanmak, tüm altyapı yönetimini soyutlamanıza olanak tanır. Böylece ek yük konusunda endişelenmek yerine uygulamanızı derlemeye odaklanabilirsiniz.
2. Öğrenecekleriniz
Bu laboratuvarda aşağıdakileri nasıl yapacağınızı öğreneceksiniz:
- Spanner'ı entegre etme
- Spanner Yönetilen Hizmetleri'ni etkinleştirme
- Koda entegre etme
- Spanner'a bağlanan kodu dağıtma
- Firestore'u entegre etme
- Firestore Yönetilen Hizmetlerini etkinleştir
- Koda entegre etme
- Firestore'a bağlanan kodu dağıtma
3. Kurulum ve Gereksinimler
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğinizi (genellikle
PROJECT_ID
olarak tanımlanır) belirtmeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Ortamı Ayarlama
- Proje kimliği değişkeni oluşturma
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
- Spanner, Cloud Run, Cloud Build ve Artifact Registry API'lerini etkinleştirme
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
- Depoyu klonlama
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
- Dizine gidin
cd cymbal-eats/inventory-service/spanner
4. Spanner örneği oluşturma ve yapılandırma
Spanner, envanter hizmetleri arka uç ilişkisel veritabanıdır. Aşağıdaki adımlarda bir Spanner örneği, veritabanı ve şeması oluşturacaksınız.
Örnek oluşturma
- Cloud Spanner örneği oluşturma
gcloud spanner instances create $SPANNER_INSTANCE --config=regional-${REGION} \
--description="Cymbal Menu Inventory" --nodes=1
Örnek Çıkış
Creating instance...done.
- Spanner örneğinin doğru yapılandırılıp yapılandırılmadığını doğrulama
gcloud spanner instances list
Örnek çıkış
NAME: inventory-instance DISPLAY_NAME: Cymbal Menu Inventory CONFIG: regional-us-east1 NODE_COUNT: 1 PROCESSING_UNITS: 100 STATE: READY
Veritabanı ve şema oluşturma
Yeni bir veritabanı oluşturun ve veritabanı şemasını oluşturmak için Google standart SQL'in veri tanımı dilini (DDL) kullanın.
- DDL dosyası oluşturma
echo "CREATE TABLE InventoryHistory (ItemRowID STRING (36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, Timestamp TIMESTAMP) PRIMARY KEY(ItemRowID)" >> table.ddl
- Spanner veritabanını oluşturma
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl-file=table.ddl
Örnek çıkış
Creating database...done.
Veritabanı durumunu ve şemasını doğrulama
- Veritabanının durumunu görüntüleme
gcloud spanner databases describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Örnek çıkış
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
- Veritabanının şemasını görüntüleyin
gcloud spanner databases ddl describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Örnek çıkış
CREATE TABLE InventoryHistory ( ItemRowID STRING(36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, TimeStamp TIMESTAMP, ) PRIMARY KEY(ItemRowID);
5. Spanner'ı entegre etme
Bu bölümde Spanner'ı uygulamanıza nasıl entegre edeceğinizi öğreneceksiniz. Buna ek olarak SQL Spanner, Spanner'ı herhangi bir uygulamaya entegre etmenize olanak tanıyan İstemci kitaplıkları, JDBC sürücüleri, R2DBC sürücüleri, REST API'leri ve RPC API'leri de sağlar.
Sonraki bölümde, Spanner'da veri yüklemek, verileri doğrulamak ve değiştirmek için Go istemci kitaplığını kullanacaksınız.
İstemci kitaplığını yükleme
Cloud Spanner istemci kitaplığı, hizmet hesabı kimlik bilgilerinizi bulmak için Uygulama Varsayılan Kimlik Bilgilerini (ADC) otomatik olarak kullanarak Cloud Spanner ile entegrasyonu kolaylaştırır.
Kimlik doğrulamayı ayarlayın
Google Cloud KSA ve Google Cloud istemci kitaplıkları, Google Cloud'da çalıştıklarını otomatik olarak algılar ve mevcut Cloud Run düzeltmesinin çalışma zamanı hizmet hesabını kullanır. Uygulama Varsayılan Kimlik Bilgileri adlı bu strateji, birden fazla ortamda kod taşınabilirliği sağlar.
Ancak en iyisi, varsayılan hizmet hesabı yerine kullanıcı tarafından yönetilen bir hizmet hesabı atayarak özel bir kimlik oluşturmaktır.
- Hizmet hesabına Spanner Veritabanı Yöneticisi rolü verme
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/spanner.databaseAdmin"
Örnek çıkış
Updated IAM policy for project [cymbal-eats-6422-3462]. [...]
İstemci kitaplıklarını kullanma
Spanner istemci kitaplıkları, Spanner ile entegrasyonun karmaşıklığını ortadan kaldırır ve birçok popüler programlama dilinde mevcuttur.
Spanner istemcisi oluşturma
Spanner istemcisi, Cloud Spanner veritabanında veri okumak ve yazmak için kullanılan bir istemcidir. Bir istemci, Close yöntemi dışında eş zamanlı olarak kullanılabilir.
Aşağıdaki snippet, bir anahtar istemcisi oluşturuyor
main.go
var dataClient *spanner.Client ... dataClient, err = spanner.NewClient(ctx, databaseName)
İstemciyi bir veritabanı bağlantısı olarak düşünebilirsiniz: Cloud Spanner ile tüm etkileşimleriniz bir İstemci üzerinden geçmelidir. Genellikle uygulamanız başlatıldığında bir İstemci oluşturursunuz ve ardından bu istemciyi işlemleri okumak, yazmak ve yürütmek için yeniden kullanırsınız. Her istemci, Cloud Spanner'daki kaynakları kullanır.
Verileri değiştirme
Spanner veritabanından veri eklemenin, güncellemenin ve silmenin birden çok yolu vardır. Kullanabileceğiniz yöntemler aşağıda listelenmiştir.
Bu laboratuvarda, Spanner'daki verileri değiştirmek için mutasyonları kullanacaksınız.
Spanner'daki değişiklikler
Dönüşüm, mutasyon işlemleri için bir container'dır. Mutasyon, Cloud Spanner'ın bir Cloud Spanner veritabanındaki farklı satır ve tablolara temel olarak uyguladığı ekleme, güncelleme ve silme işlemlerini ifade eder.
main.go
m := []*spanner.Mutation{} m = append(m, spanner.Insert( "inventoryHistory", inventoryHistoryColumns, []interface{}{uuid.New().String(), element.ItemID, element.InventoryChange, time.Now()}))
Kod snippet'i, envanter geçmişi tablosuna yeni bir satır ekler.
Dağıtım ve Test
Artık Spanner'ın yapılandırıldığına ve uygulamanın Cloud Run'a dağıtıldığı temel kod öğelerini incelediğinize göre.
Uygulamayı Cloud Run'a dağıtma
Cloud Run, tek bir komutla kodunuzu otomatik olarak derleyebilir, aktarabilir ve dağıtabilir. Aşağıdaki komutta, çalışan uygulama tarafından kullanılan (ör. daha önce oluşturduğunuz SPANNER_CONNECTION_STRING) değişkenleri ileterek run
hizmetinde deploy
komutunu çağırırsınız.
- Terminali aç'ı tıklayın.
- Envanter hizmetini Cloud Run'a dağıtma
gcloud run deploy inventory-service \
--source . \
--region $REGION \
--update-env-vars SPANNER_CONNECTION_STRING=$SPANNER_CONNECTION_STRING \
--allow-unauthenticated \
--project=$PROJECT_ID \
--quiet
Örnek çıkış
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
- Hizmet URL'sini depolayın
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
Cloud Run uygulamasını test etme
Öğe ekle
- Cloud Shell'de aşağıdaki komutu girin.
POST_URL=$INVENTORY_SERVICE_URL/updateInventoryItem
curl -i -X POST ${POST_URL} \
--header 'Content-Type: application/json' \
--data-raw '[
{
"itemID": 1,
"inventoryChange": 5
}
]'
Örnek çıkış
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
Öğe sorgulama
- Envanter hizmetini sorgulama
GET_URL=$INVENTORY_SERVICE_URL/getAvailableInventory
curl -i ${GET_URL}
Örnek yanıt
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. Spanner Kavramları
Cloud Spanner, bildirim temelli SQL ifadeleri kullanarak veritabanlarını sorgular. SQL ifadeleri, sonuçların nasıl elde edileceğini açıklamadan kullanıcının ne istediğini gösterir.
- Terminalde, daha önce oluşturulan kayıt için tabloyu sorgulamak üzere bu komutu girin.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT * FROM InventoryHistory WHERE ItemID=1'
Örnek çıkış
ItemRowID: 1
ItemID: 1
InventoryChange: 3
Timestamp:
Sorgu yürütme planları
Sorgu yürütme planı, Spanner'ın sonuçları elde etmek için kullandığı bir dizi adımdır. Belirli bir SQL ifadesinin sonuçlarını almanın birkaç yolu olabilir. Sorgu yürütme planlarına konsoldan ve istemci kitaplıklarından erişilebilir. Spanner'ın SQL sorgularını nasıl işlediğini görmek için:
- Konsolda Cloud Spanner örnekleri sayfasını açın.
- Cloud Spanner örneklerine git
- Cloud Spanner örneğinin adını tıklayın. Veritabanları bölümünde sorgulamak istediğiniz veritabanını seçin.
- Sorgu'yu tıklayın.
- Sorgu düzenleyiciye aşağıdaki sorguyu girin
SELECT * FROM InventoryHistory WHERE ItemID=1
- ÇALIŞTIR'ı tıklayın
- AÇIKLAMA'yı tıklayın.
Cloud Console, sorgunuz için bir görsel yürütme planı gösterir.
Sorgu optimize edici
Cloud Spanner sorgu optimize edici, alternatif yürütme planlarını karşılaştırır ve en verimli olanı seçer. Zaman içinde, Sorgu Optimize Edici gelişerek sorgu yürütme planındaki seçenekleri genişletecektir ve bu seçeneklere bilgi sağlayan tahminlerin doğruluğunu artırarak daha etkili sorgu yürütme planlarını ortaya çıkaracaktır.
Cloud Spanner, optimize edici güncellemelerini yeni sorgu optimize edici sürümleri olarak kullanıma sunar. Varsayılan olarak, her veritabanı optimize edicinin en son sürümünü, ilgili sürüm yayınlandıktan en az 30 gün sonra kullanmaya başlar.
gcloud spanner'da sorgu çalıştırırken kullanılan sürümü görmek için –query-mode işaretini PROFILE olarak ayarlayın
- Optimize Edici sürümünü görüntülemek için aşağıdaki komutu girin
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Örnek çıkış
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:
Optimize Edici sürümünü güncelle
Bu laboratuvarın yapıldığı tarihteki en yeni sürüm 4'tür. Ardından, sorgu optimize edici için sürüm 4'ü kullanmak üzere Spanner Tablosunu güncelleyeceksiniz.
- Optimize Edici'yi güncelleme
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl='ALTER DATABASE InventoryHistory
SET OPTIONS (optimizer_version = 4)'
Örnek çıkış
Schema updating...done.
- Optimize Edici sürüm güncellemesini görüntülemek için aşağıdaki komutu girin
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Örnek çıkış
TOTAL_ELAPSED_TIME: 8.57 msecs CPU_TIME: 8.54 msecs ROWS_RETURNED: 1 ROWS_SCANNED: 1 OPTIMIZER_VERSION: 4 [...]
Metrik Gezgini'nde sorgu optimize edici sürümünü görselleştirin
Cloud Console'da Metrik Gezgini'ni kullanarak veritabanı örneğinizin Sorgu sayısını görselleştirmek için kullanabilirsiniz. Her bir veritabanında hangi optimize edici sürümünün kullanıldığını görebilirsiniz.
- Cloud Console'da Monitoring'e gidin ve soldaki menüden Metrik Gezgini'ni seçin.
- Kaynak türü alanında Cloud Spanner Örneği'ni seçin.
- Metrik alanında Sorgu sayısı'nı seçin ve Uygula'yı tıklayın.
- Gruplandırma Ölçütü alanında veritabanı, optimize_version ve durum özelliklerini seçin.
7. Firestore Veritabanı Oluşturma ve Yapılandırma
Firestore otomatik ölçeklendirme, yüksek performans ve uygulama geliştirme kolaylığı için oluşturulmuş NoSQL belge veritabanıdır. Firestore arayüzü, geleneksel veritabanlarıyla aynı özelliklere sahip olsa da, veri nesneleri arasındaki ilişkileri tanımlama açısından NoSQL veritabanı onlardan farklıdır.
Aşağıdaki görev, Firestore tarafından desteklenen bir sipariş hizmeti Cloud Run uygulaması oluşturmada size yol gösterecektir. Sipariş hizmeti, siparişi başlatmadan önce Spanner veritabanını sorgulamak için önceki bölümde oluşturulan envanter hizmetini çağırır. Bu hizmet, yeterli envanterin mevcut olmasını ve siparişin doldurulabilmesini sağlar.
8. Firestore Kavramları
Veri modeli
Firestore veritabanı, koleksiyonlar ve belgelerden oluşur.
Dokümanlar
Her belge bir dizi anahtar/değer çifti içerir. Firestore, küçük dokümandan oluşan büyük koleksiyonları depolamak için optimize edilmiştir.
Koleksiyonlar
Tüm dokümanları koleksiyonlarda depolamanız gerekir. Belgeler, dizeler gibi temel alanlar veya listeler gibi karmaşık nesneler dahil olmak üzere alt koleksiyonlar ve iç içe yerleştirilmiş nesneler içerebilir.
Firestore veritabanı oluşturma
- Firestore veritabanını oluşturma
gcloud firestore databases create --location=$REGION
Örnek çıkış
Success! Selected Google Cloud Firestore Native database for cymbal-eats-6422-3462
9. Firestore'u uygulamanıza entegre etme
Bu bölümde hizmet hesabını güncelleyecek, Firestore erişim hizmeti hesapları ekleyecek, Firestore güvenlik kurallarını gözden geçirip dağıtacak ve verilerin Firestore'da nasıl değiştirildiğini inceleyeceksiniz.
Kimlik doğrulamayı ayarlayın
- Hizmet hesabına Datastore kullanıcı rolünü verme
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/datastore.user"
Örnek çıkış
Updated IAM policy for project [cymbal-eats-6422-3462].
Firestore Güvenlik Kuralları
Güvenlik kuralları, erişim denetimi ve veri doğrulamanın etkileyici ama basit bir biçimi sağlar.
- Order-service/starter-code dizinine gidin
cd ~/cymbal-eats/order-service
- firestore.rules dosyasını bulut düzenleyicide açın
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 } } }
Uyarı: En iyi uygulama, Firestore depolama alanına erişimi sınırlamaktır. Bu laboratuvarın amacı doğrultusunda tüm okumalara izin verilir. Bu, tavsiye edilen bir üretim yapılandırması değildir.
Firestore Yönetilen Hizmetlerini etkinleştir
- Terminali aç'ı tıklayın.
- Geçerli proje kimliğiyle .firebaserc dosyası oluşturun. Dağıtım hedeflerine ilişkin ayarlar proje dizininizdeki .firebaserc dosyasında depolanır.
firebaserc.tmpl
sed "s/PROJECT_ID/$PROJECT_ID/g" firebaserc.tmpl > .firebaserc
- Firebase ikili programını indir
curl -sL https://firebase.tools | upgrade=true bash
Örnek çıkış
-- Checking for existing firebase-tools on PATH... Your machine already has firebase-tools@10.7.0 installed. Nothing to do. -- All done!
- Firestore kurallarını dağıtın.
firebase deploy
Örnek Çıkış
=== 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
Verileri değiştirme
Koleksiyonlar ve dokümanlar doğrudan Firestore'da oluşturulur. Bir koleksiyondaki dokümana veri atamanız yeterlidir. Koleksiyon veya belge yoksa Firestore oluşturur.
Firestore'a veri ekle
Cloud Firestore'a veri yazmanın birkaç yolu vardır:
- Açıkça bir doküman tanımlayıcı belirterek koleksiyon içindeki dokümanın verilerini ayarlayın.
- Koleksiyona yeni doküman ekleyin. Bu durumda, Cloud Firestore otomatik olarak belge tanımlayıcısını oluşturur.
- Otomatik olarak oluşturulmuş bir tanımlayıcıyla boş bir doküman oluşturun ve bu dokümana daha sonra veri atayın.
Bir sonraki bölüm, ayarlama yöntemini kullanarak doküman oluşturma konusunda size yol gösterecektir.
Doküman ayarlama
Doküman oluşturmak için set()
yöntemini kullanın. set()
yöntemiyle oluşturulacak doküman için bir kimlik belirtmeniz gerekir.
Aşağıdaki kod snippet'ine göz atın.
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' });
Bu kod, kullanıcı tarafından oluşturulan doküman kimliği 123'ü belirten bir doküman oluşturur. Firestore'un sizin adınıza kimlik oluşturmasını sağlamak için add()
veya create()
yöntemini kullanın.
Belgeleri güncelleme
Güncelleme yöntemi update()
, tüm belgenin üzerine yazmadan bazı doküman alanlarını güncellemenize olanak tanır.
Aşağıdaki snippet'te kod, sipariş 123'ü günceller
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.update(name: "Anna");
Dokümanları silme
Firestore'da bir dokümandaki koleksiyonları, belgeleri veya belirli alanları silebilirsiniz. Doküman silmek için delete()
yöntemini kullanın.
Aşağıdaki snippet, 123 numaralı siparişi siler.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.delete();
10. Dağıtım ve Test
Bu bölümde uygulamayı Cloud Run'a dağıtacak ve oluşturma, güncelleme ve silme yöntemlerini test edeceksiniz.
Uygulamayı Cloud Run'a dağıtma
- Envanter hizmeti ile entegrasyon için URL'yi INVENTORY_SERVICE_URL değişkeninde depolayın
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
- Sipariş hizmetini dağıtma
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
Örnek çıkış
[...] 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
Cloud Run uygulamasını test etme
Doküman oluştur
- Sipariş hizmeti uygulamasının URL'sini test için bir değişkende saklama
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
- Bir sipariş isteği oluşturun ve Firestore veritabanına yeni bir sipariş yayınlayın
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
}
]
}'
Örnek çıkış
{"orderNumber":46429}
Sipariş Numarasını daha sonra kullanmak üzere kaydetme
export ORDER_NUMBER=<value_from_output>
Sonuçları görüntüle
Sonuçları Firestore'da görüntüleyin
- Firestore konsoluna gidin
- Veriler'i tıklayın
Doküman güncelleme
Gönderilen siparişte miktar yer almıyordu.
- Kaydı güncelleme ve miktar anahtar/değer çifti ekleme
curl --location -g --request PATCH $ORDER_SERVICE_URL/order/${ORDER_NUMBER} \
--header 'Content-Type: application/json' \
--data-raw '{
"orderItems": [
{
"id": 1,
"quantity": 1
}
]
}'
Örnek çıkış
{"status":"success"}
Sonuçları görüntüle
Sonuçları Firestore'da görüntüleyin
- Firestore konsoluna gidin
- Veriler'i tıklayın
Doküman silme
- 46429 numaralı öğeyi Firestore siparişleri koleksiyonundan silin
curl --location -g --request DELETE $ORDER_SERVICE_URL/order/${ORDER_NUMBER}
Sonuçları görüntüle
- Firestore konsoluna gidin
- Veriler'i tıklayın
11. Tebrikler!
Tebrikler, laboratuvarı tamamladınız.
Sıradaki adım:
Diğer Cymbal Eats codelab'lerini keşfedin:
- Eventarc ile Cloud Workflows'u tetikleme
- Cloud Storage'dan Etkinlik İşlemeyi Tetikleme
- Cloud Run'dan Private CloudSQL'e bağlanma
- Identity Aware Proxy (IAP) ile Güvenli Sunucusuz Uygulama
- Cloud Scheduler ile Cloud Run İşlerini Tetikleme
- Cloud Run'a Güvenli Şekilde Dağıtma
- Cloud Run Giriş Trafiğinin Güvenliğini Sağlama
- GKE Autopilot'tan özel AlloyDB'ye bağlanma
Temizleme
Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız kaynakları içeren projeyi silin veya projeyi tutup tek tek kaynakları silin.
Projeyi silme
Faturalandırmayı ortadan kaldırmanın en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.